Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Цикличная работа 2х приложений

Ответить
Настройки темы
Цикличная работа 2х приложений

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить 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}")
Все 4 окна и 4 дополнительные программы к ним запускаются и отрабатывают нормально, но есть следующие проблемы:

1. 1,2,3 окна открываются как бы без проблем, но когда доходит очередь до 4го - к этому времени первые 3 упорно работают и постяонно с разным интервалом времени стают активными, что мешает правильнмоу запуску 4го окна и дополнитеьной проги к ниму. Скрипт прирывается.
Как прописать, что бы он возвращался к нужнмоу окну и продолжил выполнять на чем остановился?

2. Как задать, что бы он проверял открыто ли сейчас все 4 окна, если нет то вставать снова в очередь в главном окне

3. Спустя какой то промежуток времени в окне появится кнопка, после ее появления окно следует закрыть и стать снова в очередь в главном окне
AutoIt Window Info на копку ни какий информации не отображает. Как это реализовать? На ум приходит только считывать пиксели по координатам и сраунивать с пикселями когда кнопки еще нету. Или есть другие решения?

P.S: Код написан не рационально, не пинайте я только учусь, надеюсь поможете разобраться!

Отправлено: 19:11, 26-02-2010

 

Пользователь


Сообщения: 67
Благодарности: 13

Профиль | Отправить PM | Цитировать


Цитата MatrixID:
1. 1,2,3 окна открываются как бы без проблем, но когда доходит очередь до 4го - к этому времени первые 3 упорно работают и постяонно с разным интервалом времени стают активными, что мешает правильнмоу запуску 4го окна и дополнитеьной проги к ниму. »
Тебе помогут следующие функции:
Код: Выделить весь код
ControlSend ( "title", "text", controlID, "string" [, flag] ) 
ControlClick ( "title", "text", controlID [, button] [, clicks]] )
это значительно более надежные инструменты, чем Send() и позволяют работать не только с активными окнами.
Вместо остановок на Sleep() лучше испульзуй
Код: Выделить весь код
WinWait ( "title", ["text"], [timeout] )
.
Цитата MatrixID:
2. Как задать, что бы он проверял открыто ли сейчас все 4 окна»
Проверяем существование 4-х окон, после их появления продолжаем работать:
Код: Выделить весь код
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:
3. Спустя какой то промежуток времени в окне появится кнопка, после ее появления окно следует закрыть »
Отследить появление кнопки можно по id. Пробуй
Код: Выделить весь код
ControlGetText ( "title", "text", controlID)
Дождаться ее появления и закрыть окно просто:
Код: Выделить весь код
While ControlGetText ( "title", "text", controlID) =""
	Sleep(100)
WEnd
WinClose("title", "text")

-------
Информация для размышления
Такому в вузах не научат


Отправлено: 19:59, 05-04-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Цикличная работа 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




 
Переход