Что нового

Нажатие горячей клавиши при откритии\закритии определенного окна

alexandr

Новичок
Сообщения
29
Репутация
0
помогите написать скрипт который будет ждать появлении определенно окна с заголовком "тест" и при появлении его будет нажимать "shift + f1" , при пропадании окна опять будет нажиматься "shift + f1" и так до бесконечности

нашол
WinWaitActive("тест")
Send("{ENTER}")

но пока не знаю как все организовать
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
alexandr [?]
написать скрипт который будет ждать появлении определенно окна с заголовком "тест" и при появлении его будет нажимать "shift + f1" , при пропадании окна опять будет нажиматься "shift + f1" и так до бесконечности
Код:
Global $End_Of_Time = Execute('Never')

Do
	WinWait("тест")
	Send("+{F1}")
	WinWaitClose("тест")
	Send("+{F1}")
Until $End_Of_Time
 
Автор
A

alexandr

Новичок
Сообщения
29
Репутация
0
в принципе все ясно немного изменил строку WinWait("тест") на WinWaitActive("тест")
потому как нужное окно вызывает одна программа, и скрипт работает только если добавить WinWaitActive, с этим все ясно...
но теперь вопрос как отследить закрытие окна ведь оно вызвано отдельной программой, если окно закрыть то вторая часть скрипта не срабатывает а срабатывает если закрыть всю программу.. можно ли как то отследить активность нажного окна?
алгоритм такой: открывается одна программа через время в етой программе открывается окно с заголовком "тест" скрипт видит что окно с заголовком "тест" стало активным - нажимается горячая клавиша.. потом после нажатия горячей клавиши скрипт начинает ждать пока окно станет неактивным и нажимается опять горячая клавиша.. или открывается одна программа через время в етой программе открывается окно с заголовком "тест" скрипт видит что окно с заголовком "тест" стало активным - нажимается горячая клавиша.. потом после нажатия горячей клавиши скрипт начинает ждать появление ещо одного заголовки другого и опять же наживается горячая клавиша
 
Автор
A

alexandr

Новичок
Сообщения
29
Репутация
0
Код:
Global $End_Of_Time = Execute('Never')

Do
    If WinWaitActive("Касса") Then
    Send("{F6}")
	Sleep(1000)
    WinWaitNotActive("Касса")
    Send("{F6}")
	Sleep(1000)
EndIf
Until $End_Of_Time


вроде работает)) разобрался спасибо))
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
alexandr [?]
как отследить закрытие окна

и...

после нажатия горячей клавиши скрипт начинает ждать пока окно станет неактивным

не очень совместимо. Ты определись, что нужно ожидать, неактивности окна, или его закрытие (удаление)?
 
Автор
A

alexandr

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

нужно нажатие гарячей клавиши при роботе с окном (при его открытии или активности) и после опять же нажатие клавиши при прекращении роботы окна (закрытии или не активности) в ходе экспериментов выяснилось что нельзя (или мне так кажется) отследить открытие окна а можно отследить его активность\неативность... так как окно работает не как отдельный процесс а его вызывает программа внутри своего окна. но ето не суть.. все заработало..

теперь опять прошу помощи.. как сделать еще один скрипт который будет мониторить на запущенность процесс например "123.exe" если процесс запущен то нечего не происходит, если не запущен - то запускается программа "С:/1.exe" и нажимается горячая клавиша F8, и так по кругу..
 
Автор
A

alexandr

Новичок
Сообщения
29
Репутация
0
крутил крутил.. все таки надо отследить когда именно закрывается окно "тест".. схема такая запускается программа - в самой программе запускается окно с заголовком "тест" и в етот момент должна нажатся горячая клавиша.. потом в етом окне с заголовком "тест" есть кнопка при нажатии на которую вылазит еще одно окно с заголовком "тест2" и первое окно "тест" становится не активным и срабатывает горячая клавиша.. но надо чтобы она срабатывала при именно закрытии окна "тест". но вот как отследить даже не представляю.. если не понятно изложил позже смогу выложить скрины..


возможно и второй вариант, запускается программа - в самой программе запускается окно с заголовком "тест" и в етот момент должна нажатся горячая клавиша.. потом в окне "тест" есть кнопки при нажатии на которые вылазит еще заголовок "тест2" или "тест3" или"тест4" и при не активности окна "тест" сканируются заголовки других активных окон если есть окно с названием "тест2" или "тест3" или "тест4" нечего не происходит а когда все заголовки (тест 1,2,3,4) стают не активными то запускается горячая клавиша..
 
Автор
A

alexandr

Новичок
Сообщения
29
Репутация
0
не выходит, скрипт срабатывает только когда закрывается сама программа на закрытие окна "тест" нет реакции..



может дописать в скрипт чтобы горячая клавиша нажималась первый раз при обнаружении окна "тест" а второй при обнаружении одного из 3 заголовков "тест0" или "тест1" или "тест2" (заголовок изначально указать нельзя так как не известно какая кнопка нажимается в окне "тест")
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
alexandr [?]
скрипт срабатывает только когда закрывается сама программа на закрытие окна "тест" нет реакции..
Значит окно не закрывается а прячется. Нужно отслеживать скрытие окна.

Код:
Global $End_Of_Time = Execute('Never')

Do
    WinWait("тест")
    Send("+{F1}")
    WinWaitNotVisible("тест")
    Send("+{F1}")
Until $End_Of_Time

Func WinWaitNotVisible($sTitle)
	While BitAND(WinGetState($sTitle), 2) = 2
		Sleep(10)
	WEnd
EndFunc
 
Верх