Что нового

Send() не работает, как надо, не отзывается на Ctrl

Статус
Закрыто для дальнейших ответов.

Core2Duo76

Новичок
Сообщения
58
Репутация
1
Всем привет! Делаю мелкий скрипт запуска проги и нажатия ГК. Запускает прогу по адресу, пауза, ищем имя окна для того процесса, активируем это окно и жмем ГК. Вот нажатие и не работает, одно решение нашел с функцией _sendEx, просматривающую не залипла ли клавиша контрол. А она взяла и не помогла. Вот в чем дело???


Код:
#include <WinAPIEx.au3>
#include <Misc.au3>

$path = FileReadLine(@ScriptDir & '\адрес программы.txt',1)
$send= FileReadLine(@ScriptDir & '\адрес программы.txt',2)
$path=StringReplace($path,'"','')
Run($path)
ConsoleWrite($path & @CRLF)
ConsoleWrite($send & @CRLF)
$prc_name = StringLower(StringRegExpReplace($path, '.+\\([^\\]+)$', '$1'))
sleep(7000)
ConsoleWrite($prc_name & @CRLF)
$winname = _WinGetForProc($prc_name)
WinActivate($prc_name)
sleep(1000)
_SendEx("{rctrl}o")


Func _SendEx($sSend_Data)
    Local $hUser32DllOpen = DllOpen("User32.dll")

    While _IsPressed("10", $hUser32DllOpen) Or _IsPressed("11", $hUser32DllOpen) Or _IsPressed("12", $hUser32DllOpen)
        Sleep(10)
    WEnd

    Send($sSend_Data)

    DllClose($hUser32DllOpen)
EndFunc

Func _WinGetForProc($sProcName)
	$alist = ProcessList($sProcName)
	For $i = 1 To $alist[0][0]
		$iProcPid = $alist[$i][1]
	Next
	$aData = _WinAPI_EnumProcessWindows($iProcPid, 0)
	$iWin = $aData[1][0]
	$sTitle = WinGetTitle($iWin)
	Return $sTitle
EndFunc   ;==>_WinGetForProc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
А почему правый Ctrl? Попробуйте левый ;) Или другие варианты
Код:
_SendEx("^o")
_SendEx("{CTRLDOWN}o{CTRLUP}")


OffTopic:
Функция Run() возвращает PID процесса. Нет необходимости искать имя, а по имени - PID.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Core2Duo76
У вас, случайно, не русская раскладка по умолчанию установлена?
 
Автор
C

Core2Duo76

Новичок
Сообщения
58
Репутация
1
Именно она! Но скрипт делается для компа за кучу км от меня, там восьмерина стоит. А при чем тут русская раскладка? я же в send пишу именно 'o'
 
Автор
C

Core2Duo76

Новичок
Сообщения
58
Репутация
1
Проблема решена. Кроме того, что была проблема с раскладкой, вторая проблема - яндексовский перехватчик клавиатуры Punto Switcher.
 

lemonia

Новичок
Сообщения
126
Репутация
0
Похожая проблема, помогите советом, что ещё можно попробовать сделать.
Вот это при обработке одних файлов работает, а с другими нужно вручную жать Cntrl+S. Уже Send("^s") совал после каждой строки и по несколько раз дублировал. Также и Sleep(1000); тоже вставлял дополнительно в разные места и время ожидания увеличивал.
Код:
WinWaitActive("ABBYY")
 Sleep(1000);
 Send("^s")
 WinWait("Save")
 Sleep(500);

Полный код (этот отрывок ближе к концу):
Код:
Const $FR_dir = "E:\Program Files\ABBYY FineReader 8.0 Professional Edition\"
Run($FR_dir&"FineReader.exe")
AutoItSetOption ( "WinTitleMatchMode" , 2 )
$search = FileFindFirstFile("*.pdf")
If $search = -1 Then
 MsgBox(0, "Error", "No pdf files")
 Exit
EndIf
While 1
 $file = FileFindNextFile($search)
 If @error Then ExitLoop
 $file_name= StringTrimRight($file, 4); имя файла без расширения ".pdf"
WinWaitActive("ABBYY")
SendKeepActive("ABBYY")
Send("^n", 0); новый пакет
Send("!f") ;
Send("v")
 WinWaitActive("Save")
 Sleep(500)
 ControlSetText ( "Save", "", "Edit1", @WorkingDir&"\"&$file_name ); создаем папку пакета
 Sleep(500)
 Send("{ENTER}")
 Sleep(500)
 Send("^o")
 Sleep(500)
 ControlSetText ( "Open", "", "Edit1", @WorkingDir&"\"&$file ); открытие и распознавание pdf файла
 Send("{ENTER}")
 WinWaitClose("Adding")
 Sleep(500)
 WinWaitActive("ABBYY")
 Sleep(500)
 Send("^+R")
 WinWaitClose("Reading")
 Sleep(500);
 WinWaitActive("ABBYY")
 Sleep(1000);
 Send("^s")
 WinWait("Save")
 Sleep(500);
 ControlSetText ( "Save", "", "Edit1", @WorkingDir&"\"&$file_name&"\"&$file_name ); сохраняем результаты распознавания в папку пакета
 Send("{ENTER}")
 Sleep(500);
 WinWaitClose("Saving")
 Send("!f")
 Send("c") ;Закрываем пакет
WEnd

FileClose($search)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
lemonia [?]
Похожая проблема
OffTopic:
Да что же это такое! Тема заблокирована! :mad:

Правила
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 
Статус
Закрыто для дальнейших ответов.
Верх