Что нового

Как правильно записать нажатие клавиш

Dedok

Новичок
Сообщения
15
Репутация
0
Скачал версию 3.3.6

Думал, что справлюсь сам, но я не программист и с наскока ничего не получилось.
Задача автоматизировать пользовательскую программу, отправляющую файл.

1 Нажимаем на рабочем столе ярлык myprog.exe
2 Появляется окно программы с заголовком (пишу дословно)"ОтправкаФайла".
3 Вверху появляются менюшки Файл, Настройка, ............Помощь.
4 Нажимаем мышой Файл.
5 Идём в раскрывающимся списке на строчку Отправить.
6 Через 5 сек появляется окошко Подтвеждаете отправку Да/Нет.
7 Жмём Да.
8 Жмём крестик для закрытия программы.

Не провинулся далее открытия программы

Run("c:\myprog.exe")
WinWaitActive("ОтправкаФайла")
Send("!Ф")

Те меню Файл не раскрывается, а если делать руками , то Alt+Ф работает.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Если по умолчанию стоит английская раскладка, то нужно Send'ить латиницей.
 
Автор
D

Dedok

Новичок
Сообщения
15
Репутация
0
По умолчанию стоит русская.
И как сендить букву Ф по латински?
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Важно не какая стоит в данный момент, а какая стоит по умолчанию.

Сендить нужно на ту же клавишу на клавиатуре.
ф = a
й = q
ц = w
у = e

и т. д.
 
Автор
D

Dedok

Новичок
Сообщения
15
Репутация
0
Поставил Английскую по умолчанию.
Написал !A, всё равно не срабатывает.....
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Попробуй использовать маленькие буквы (не заглавные).
 
Автор
D

Dedok

Новичок
Сообщения
15
Репутация
0
За три часа продвинулся ещё на шаг.
Ставим по умолчанию русскую раскладку и тогда срабатывает !Ф.,меню файл наконец-то раскрылось.

Теперь дальше. в раскрывшимся меню файл надо исполнить !О, но если сендить подряд, то меню файл просто закрывается.

Send("!Ф")
Send("!О")
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Dedok
Попробуйте так:
Код:
Run("c:\myprog.exe")
WinWait("ОтправкаФайла")
Send("^o") ; или !o если сочетание клавиш Alt+O Буква "o" латинская
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Dedok
Еще вариант: после комбинации !Ф отправлять О без !, то есть, без клавиши [Alt]...
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Попробуй еще так:

Код:
If @KBLayout = 00000419 Or @KBLayout = 0419 Then Send ("!ф")
If @KBLayout = 00000409 Or @KBLayout = 0409 Then Send ("!a")


Если по-умолчанию раскладка русская, то посылает ALT+ф, если английская, то ALT+a.

Буквы пиши маленькими. Во многих программах Send ALT+Ф равносильно ALT+SHIFT+ф (а это уже другой хоткей).
 
Автор
D

Dedok

Новичок
Сообщения
15
Репутация
0
Попробывал исполнить код с определением раскладки. Работает строчка только с русской раскладкой по умолчанию и русской ф.

По поводу нажатия клавиш подряд, путём подбора пришел к комбинации
Send("!ф,о")
 
Автор
D

Dedok

Новичок
Сообщения
15
Репутация
0
Очень ненадёжно горячими клавишами.
Тк всё время надо отвечать ОК догадался просто сендить {ENTER}.

Теперь следующая проблема: во время загрузки иногда всплывает окно "введите пароль", а иногда нет.
Как написать условие Если всплывает окно "Введите пароль" нажать энтер, а если нет такого окна, то пустить скрипт дальше.
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
If WinExists('заголовок') Then
	;действия, если есть окно
EndIf

:whistle:
 
Автор
D

Dedok

Новичок
Сообщения
15
Репутация
0
Вот, осилил строчку.

Код:
If WinExists("Введите пароль") Then Send ("{ENTER}")
EndIf


Не исполняется, пишет ошибку.
"EndIf" statement with no matching "If" statement.: EndIf
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Dedok
На одной и той же строчке с Then можно ввести всего одну команду (например, Send ("{ENTER}")), но... в этом случае нельзя использовать Else, ElseIf и EndIf...
 
Автор
D

Dedok

Новичок
Сообщения
15
Репутация
0
Убрал EndIf вовсе. Теперь ошибки нет, но определение окна не работает и условие не выполняется.
Т.е. окно появляется, но далее ничего не происходит. Предположил, что название окна неправильное, посмотрел в Window Info- нет, всё правильно.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Dedok
Функция WinExists() проверяет, существует ли окно...
А для функции Send() важно, чтобы окно было активным...
 

forfrends

Новичок
Сообщения
176
Репутация
3
а можно выложить саму программу "myprog.exe"? что бы нам не гадать а попробовать прямо на ней
 
Автор
D

Dedok

Новичок
Сообщения
15
Репутация
0
Работает только так. Т.е. сначала ждём пока окно станет активным, проверяем условие, что оно есть и сендим ENTER.
Код:
WinWaitActive("Введите пароль")
If WinExists("Введите пароль") Then Send ("{ENTER}")


Только такая конструкция теряет смысл, ведь приходится ждать активации конкретного окна, а если оно не придёт, то скрипт повисает.
Чего бы тут придумать?

По поводу выложить. Я уже сам думал об этом, но она связана с SQL базой в 1Гб и ключами привязанными к конкретной машине. Я пробывал перенести себе домой- ничего не получилось. Сижу, подбираю по сточке в день...
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Dedok
А если так:

Код:
If WinExists("Введите пароль") Then
 WinActivate ("Введите пароль")
 Send ("{ENTER}")
EndIf
 
Верх