|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Цикличная работа 2х приложений |
|
Цикличная работа 2х приложений
|
Новый участник Сообщения: 1 |
Профиль | Отправить PM | Цитировать Требуется скрипт со следующими функциями:
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}") 1. 1,2,3 окна открываются как бы без проблем, но когда доходит очередь до 4го - к этому времени первые 3 упорно работают и постяонно с разным интервалом времени стают активными, что мешает правильнмоу запуску 4го окна и дополнитеьной проги к ниму. Скрипт прирывается. Как прописать, что бы он возвращался к нужнмоу окну и продолжил выполнять на чем остановился? 2. Как задать, что бы он проверял открыто ли сейчас все 4 окна, если нет то вставать снова в очередь в главном окне 3. Спустя какой то промежуток времени в окне появится кнопка, после ее появления окно следует закрыть и стать снова в очередь в главном окне AutoIt Window Info на копку ни какий информации не отображает. Как это реализовать? На ум приходит только считывать пиксели по координатам и сраунивать с пикселями когда кнопки еще нету. Или есть другие решения? P.S: Код написан не рационально, не пинайте я только учусь, надеюсь поможете разобраться! |
|
Отправлено: 19:11, 26-02-2010 |
Пользователь Сообщения: 67
|
Профиль | Отправить PM | Цитировать Цитата MatrixID:
ControlSend ( "title", "text", controlID, "string" [, flag] ) ControlClick ( "title", "text", controlID [, button] [, clicks]] ) Вместо остановок на Sleep() лучше испульзуй . Цитата MatrixID:
While Not WinExists("Win1","Win1 text") And Not WinExists("Win2","Win2 text") And Not WinExists("Win3","Win3 text") And Not WinExists("Win4","Win4 text") Sleep(100) WEnd Цитата MatrixID:
|
|||
------- Отправлено: 19:59, 05-04-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ускорение приложений | ElemenTall | Непонятные проблемы с Железом | 4 | 27-11-2009 11:33 | |
Разное - Запуск DOS-приложений из приложений Windows | Nadine3452 | Microsoft Windows 2000/XP | 2 | 28-05-2009 13:16 | |
сервер приложений | slaine | Microsoft Windows NT/2000/2003 | 3 | 27-05-2008 17:30 | |
Совместная работа двух приложений в MS VС++ | woodzy | Программирование и базы данных | 2 | 08-05-2004 19:02 | |
Работа приложений DOS под WindowsXP | Colonel | Microsoft Windows 2000/XP | 8 | 05-12-2003 17:57 |
|