Цикличная работа 2х приложений
Требуется скрипт со следующими функциями:
1. Что бы в открытом окне выбирал несколько строчек и вставал в очередь в ожидание, после того как подходит очередь – выскакивает табличка в которой требуется принять приглашение, и таких приглашений надо принять 4, все остальные отклонить. После принятия приглашения откроется отдельное окно с уникальным заголовком (4 приглашения=4 окна)
2. К каждому окну требуется запускать отдельное приложение и нажимать пару кнопок в нем (последовательно). Каждое из 4х окон периодически становится активным.
3. По истечению определенного времени в окнах станет активная кнопка, окно в котором она появилась необходимо закрыть и перейти к пункту 1.
И так далее по кругу, рано или поздно окна поменяются несколько раз (некоторые больше некоторые меньше)
--------------------------
Это мой первый опыт работы с AutoIt – перечитал мануалы, по разбирался с простенькими функциями на этом пока все? на данный момент вот, что удалось написать - очень простенько:
Код:
Opt("WinWaitDelay",100)
Opt("WinTitleMatchMode",4)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)
WinWait("Заголовок Главного окна","")
If Not WinActive("Заголовок Главного окна","") Then WinActivate("Заголовок Главного окна","")
WinWaitActive("Заголовок Главного окна","")
Send("{ALTDOWN}{TAB}{ALTUP}")
; следующие строки добавление в очередь
Sleep(1000)
MouseClick("left",498,361)
Send("{UP}")
Sleep(1000)
MouseClick("left",867,533)
Sleep(1000)
MouseClick("left",498,361)
Sleep(1000)
Send("{UP}")
Sleep(1000)
MouseClick("left",867,533)
Sleep(1000)
MouseClick("left",498,361)
Sleep(1000)
Send("{UP}")
Sleep(1000)
MouseClick("left",867,533)
Sleep(1000)
MouseClick("left",498,361)
Sleep(1000)
Send("{UP}")
Sleep(1000)
MouseClick("left",867,533)
Sleep(1000)
MouseClick("left",498,361)
Sleep(1000)
Send("{UP}")
Sleep(1000)
MouseClick("left",867,533)
Sleep(1000)
Send("{UP}")
Sleep(1000)
MouseClick("left",498,361)
Sleep(1000)
MouseClick("left",867,533)
Sleep(1000)
Send("{UP}")
Sleep(1000)
MouseClick("left",498,361)
Sleep(1000)
MouseClick("left",867,533)
Sleep(1000)
Send("{UP}")
Sleep(1000)
MouseClick("left",498,361)
Sleep(1000)
MouseClick("left",867,533)
Sleep(1000)
Send("{UP}")
Sleep(1000)
MouseClick("left",498,361)
Sleep(1000)
MouseClick("left",867,533)
;работа с первым появившимся окном очереди
Sleep(1000)
WinWait("Ожидание очереди","")
If Not WinActive("Ожидание очереди","") Then WinActivate("Ожидание очереди","")
WinWaitActive("Ожидание очереди","")
Send("{SPACE}")
WinWait("ОК","")
If Not WinActive("ОК","") Then WinActivate("ОК","")
WinWaitActive("ОК","")
Send("{SPACE}")
Sleep(1000)
MouseClick("left",11,482) ; этим действием ставлю галочку в чек бокс, AutoIt Window Info не показывает какое имя этого чекбокса поэтому мышкой
Run('C:\111\paint.exe') ; запускаю вторую программу к первому окну эти действия обязательны до появления 2го окна
WinWait("Paint","")
If Not WinActive("Paint","") Then WinActivate("Paint","")
WinWaitActive("Paint","")
Send("{ALTDOWN}{ALTUP}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}") ; перемещение по меню
WinWait("Read Profile from File","Read Profile From Fi")
If Not WinActive("Read Profile from File","Read Profile From Fi") Then WinActivate("Read Profile from File","Read Profile From Fi")
WinWaitActive("Read Profile from File","Read Profile From Fi")
Send("{TAB}{TAB}{BACKSPACE}zz.txt{ENTER}") ; загрузка конфига для программы
WinWait("Paint","")
If Not WinActive("Paint","") Then WinActivate("Paint","")
WinWaitActive("Paint","")
Send("{ALTDOWN}{ALTUP}{RIGHT}{RIGHT}{RIGHT}{ENTER}") ; запск 2й программы из меню
;работа с вторым окном
Sleep(1000)
WinWait("Ожидание очереди","")
If Not WinActive("Ожидание очереди","") Then WinActivate("Ожидание очереди","")
WinWaitActive("Ожидание очереди","")
Send("{SPACE}")
WinWait("ОК","")
If Not WinActive("ОК","") Then WinActivate("ОК","")
WinWaitActive("ОК","")
Send("{SPACE}")
Sleep(1000)
MouseClick("left",11,482)
MouseClick("left",312,965) ; выбор мышкой в трее прогррамму №2 от первого окна
WinWait("Paint","")
If Not WinActive("Paint","") Then WinActivate("Paint","")
WinWaitActive("Paint","")
Send("{ALTDOWN}{ALTUP}{DOWN}{DOWN}{ENTER}{ALTDOWN}{ALTUP}{UP}{UP}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}") ; открытие 2й копии 2й программы дял второго окна
WinWait("Read Profile from File","")
If Not WinActive("Read Profile from File","") Then WinActivate("Read Profile from File","")
WinWaitActive("Read Profile from File","")
Send("{TAB}{TAB}zz.txt{ENTER}")
WinWait("Paint","")
If Not WinActive("Paint","") Then WinActivate("Paint","")
WinWaitActive("Paint","")
Send("{ALTDOWN}{ALTUP}{RIGHT}{RIGHT}{RIGHT}{ENTER}")
;работа с третьим окном аналогична
Sleep(1000)
WinWait("Ожидание очереди","")
If Not WinActive("Ожидание очереди","") Then WinActivate("Ожидание очереди","")
WinWaitActive("Ожидание очереди","")
Send("{SPACE}")
WinWait("ОК","")
If Not WinActive("ОК","") Then WinActivate("ОК","")
WinWaitActive("ОК","")
Send("{SPACE}")
Sleep(1000)
MouseClick("left",11,482)
MouseClick("left",312,965)
WinWait("Paint","")
If Not WinActive("Paint","") Then WinActivate("Paint","")
WinWaitActive("Paint","")
Send("{ALTDOWN}{ALTUP}{DOWN}{DOWN}{ENTER}{ALTDOWN}{ALTUP}{UP}{UP}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}")
WinWait("Read Profile from File","")
If Not WinActive("Read Profile from File","") Then WinActivate("Read Profile from File","")
WinWaitActive("Read Profile from File","")
Send("{TAB}{TAB}zz.txt{ENTER}")
WinWait("Paint","")
If Not WinActive("Paint","") Then WinActivate("Paint","")
WinWaitActive("Paint","")
Send("{ALTDOWN}{ALTUP}{RIGHT}{RIGHT}{RIGHT}{ENTER}")
;работа с четвертым окном аналогична
Sleep(1000)
WinWait("Ожидание очереди","")
If Not WinActive("Ожидание очереди","") Then WinActivate("Ожидание очереди","")
WinWaitActive("Ожидание очереди","")
Send("{SPACE}")
WinWait("ОК","")
If Not WinActive("ОК","") Then WinActivate("ОК","")
WinWaitActive("ОК","")
Send("{SPACE}")
Sleep(1000)
MouseClick("left",11,482)
MouseClick("left",312,965)
WinWait("Paint","")
If Not WinActive("Paint","") Then WinActivate("Paint","")
WinWaitActive("Paint","")
Send("{ALTDOWN}{ALTUP}{DOWN}{DOWN}{ENTER}{ALTDOWN}{ALTUP}{UP}{UP}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}")
WinWait("Read Profile from File","")
If Not WinActive("Read Profile from File","") Then WinActivate("Read Profile from File","")
WinWaitActive("Read Profile from File","")
Send("{TAB}{TAB}zz.txt{ENTER}")
WinWait("Paint","")
If Not WinActive("Paint","") Then WinActivate("Paint","")
WinWaitActive("Paint","")
Send("{ALTDOWN}{ALTUP}{RIGHT}{RIGHT}{RIGHT}{ENTER}")
; после открытия 4 окон закрыть прочие ожидающие окна при появлении
WinWait("Ожидание очереди","")
If Not WinActive("Ожидание очереди","") Then WinActivate("Ожидание очереди","")
WinWaitActive("Ожидание очереди","")
Send("{RIGHT}{SPACE}")
WinWait("Ожидание очереди","")
If Not WinActive("Ожидание очереди","") Then WinActivate("Ожидание очереди","")
WinWaitActive("Ожидание очереди","")
Send("{RIGHT}{SPACE}")
WinWait("Ожидание очереди","")
If Not WinActive("Ожидание очереди","") Then WinActivate("Ожидание очереди","")
WinWaitActive("Ожидание очереди","")
Send("{RIGHT}{SPACE}")
Все 4 окна и 4 дополнительные программы к ним запускаются и отрабатывают нормально, но есть следующие проблемы:
1. 1,2,3 окна открываются как бы без проблем, но когда доходит очередь до 4го - к этому времени первые 3 упорно работают и постяонно с разным интервалом времени стают активными, что мешает правильнмоу запуску 4го окна и дополнитеьной проги к ниму. Скрипт прирывается.
Как прописать, что бы он возвращался к нужнмоу окну и продолжил выполнять на чем остановился?
2. Как задать, что бы он проверял открыто ли сейчас все 4 окна, если нет то вставать снова в очередь в главном окне
3. Спустя какой то промежуток времени в окне появится кнопка, после ее появления окно следует закрыть и стать снова в очередь в главном окне
AutoIt Window Info на копку ни какий информации не отображает. Как это реализовать? На ум приходит только считывать пиксели по координатам и сраунивать с пикселями когда кнопки еще нету. Или есть другие решения?
P.S: Код написан не рационально, не пинайте я только учусь, надеюсь поможете разобраться!
|