PDA

Показать полную графическую версию : Ожидание окна и действие (Автозаполнение/GUICtrlComboBox_AutoComplete)


batya85
13-02-2011, 09:39
Как пользоваться _GUICtrlComboBox_AutoComplete ?
Нужен простой скрипт который будет постоянно сидеть в памяти (запущен) и ждать появления определенного окна.
При его(окна) появлении, нажать кнопку да
кнопка да

>>>> Window <<<<
Title: Весовой модуль
Class: #32770
Position: 348, 328
Size: 335, 126
Style: 0x94C801C5
ExStyle: 0x00010101
Handle: 0x0081021C

>>>> Control <<<<
Class: Button
Instance: 1
ClassnameNN: Button1
Name:
Advanced (Class): [CLASS:Button; INSTANCE:1]
ID: 6
Text: &Да
Position: 74, 67
Size: 89, 23
ControlClick Coords: 46, 10
Style: 0x50030000
ExStyle: 0x00000004
Handle: 0x00830222

>>>> Mouse <<<<
Position: 471, 427
Cursor ID: 0
Color: 0xD4D0C8

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
&Да
&Нет
Создание файла товаров, для весов DIGI.
Для этой операции потребуется некоторое время.
Продолжить?


>>>> Hidden Text <<<<



затем в поле ввода(курсор сам встает в поле после нажатия кнопки Да) ввести символы, перейти tab на следующее поле ввода ввести символы и нажать Enter
(это просто пара логин пароль)

Желательно его перевести в службу или хотя бы exe.

Creat0R
13-02-2011, 10:25
Предупреждение за нарушение правил форума, пункт 2.7 (http://forum.oszone.net/rules.html#2.7) и пункт 3.19 (http://forum.oszone.net/rules.html#3.19):

2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...
Подробнее о принципах создания тем читайте в этом документе (http://forum.oszone.net/faq.php?faq=vb_read_and_post#faq_thread) и Правилах форумов.

3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread) и напишите об этом в теме.

Переименуйте пожалуйста тему (Как переименовать свою тему? (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread)).

А также куски кода следует помещать в соответствующий тег (code).

batyaPS
13-02-2011, 11:22
Переименуйте пожалуйста тему (Как переименовать свою тему?). »
я бы рад , но нет кнопки "Редактировать"
http://s48.radikal.ru/i119/1102/de/dc34f0f53517t.jpg (http://radikal.ru/F/s48.radikal.ru/i119/1102/de/dc34f0f53517.png.html)

madmasles
13-02-2011, 16:13
Нужен простой скрипт который будет постоянно сидеть в памяти (запущен) и ждать появления определенного окна. »Попробуйте так:#NoTrayIcon (http://www.autoitscript.com/autoit3/docs/keywords.htm##notrayicon)

Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $fClick = True (http://www.autoitscript.com/autoit3/docs/keywords.htm#True), _
$sTitle = '[TITLE:Весовой модуль; CLASS:#32770]'

HotKeySet (http://www.autoitscript.com/autoit3/docs/functions/HotKeySet.htm)('{Esc}', '_Exit') ;Esc - выход
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @Compiled (http://www.autoitscript.com/autoit3/docs/macros.htm#@compiled) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
_RegRun() ;для записи скрипта в автозагрузку
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) WinExists (http://www.autoitscript.com/autoit3/docs/functions/WinExists.htm)($sTitle) And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) BitAND (http://www.autoitscript.com/autoit3/docs/functions/BitAND.htm)(WinGetState (http://www.autoitscript.com/autoit3/docs/functions/WinGetState.htm)($sTitle), 2) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $fClick Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
_Click()
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$fClick = False (http://www.autoitscript.com/autoit3/docs/keywords.htm#False)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$fClick = True (http://www.autoitscript.com/autoit3/docs/keywords.htm#True)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(100)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Exit()
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_Exit

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _RegRun()
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sRegRun = 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)($sRegRun, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptname)) = '' Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)($sRegRun, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptname)) <> @ScriptFullPath (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptfullpath) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)($sRegRun, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptname), 'REG_SZ', @ScriptFullPath (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptfullpath))
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_RegRun

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Click()
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sLogin = 'digi'

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) ControlClick (http://www.autoitscript.com/autoit3/docs/functions/ControlClick.htm)($sTitle, '', '[CLASS:Button; INSTANCE:1]') Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) WinExists (http://www.autoitscript.com/autoit3/docs/functions/WinExists.htm)($sTitle) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
Send (http://www.autoitscript.com/autoit3/docs/functions/Send.htm)($sLogin)
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(100)
Send (http://www.autoitscript.com/autoit3/docs/functions/Send.htm)('{TAB}')
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(100)
Send (http://www.autoitscript.com/autoit3/docs/functions/Send.htm)($sLogin)
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(100)
Send (http://www.autoitscript.com/autoit3/docs/functions/Send.htm)('{ENTER}')
;здесь бы проверку сделать, что-то должно измениться.
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(0)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_Click

batyaPS
13-02-2011, 18:06
Попробуйте так: »
большое спасибо. чуть уточню .

1 - окно которое отлавливаем .
2 - кнопка которую жмем.
3 - в оба поля через tab нужно ввести символы digi
4 - окно которое не имеет названия и AutoIT Window Info его не видит
либо зависает. данное окно закрывается(подтверждается вход) нажатием клавиши enter

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

http://i059.radikal.ru/1102/bc/e3a77d59aee0t.jpg (http://radikal.ru/F/i059.radikal.ru/1102/bc/e3a77d59aee0.png.html)

http://s012.radikal.ru/i320/1102/13/3c65c9bfa781t.jpg (http://radikal.ru/F/s012.radikal.ru/i320/1102/13/3c65c9bfa781.png.html)

madmasles
13-02-2011, 19:22
batyaPS,
Я код изменил, но не проверял. (Предыдущий код проверял на собственном нарисованном окне.)

batyaPS
14-02-2011, 09:25
поправка 2 .

действие 3 не выполняется, наверно по тому что окно 4 появляется не сразу , а спустя 5 секунд после нажатия кнопки 2.
нужна задержка 5-6 сек.
как можно получить данные о окне 4 ? если AutoIT Window Info его не видит ?

batyaPS
18-02-2011, 08:35
ну подскажите, куда правильно поставить SLIP ?

madmasles
18-02-2011, 08:41
batyaPS,
Попробуйте так:;...
If Not ControlClick($sTitle, '', '[CLASS:Button; INSTANCE:1]') Then Return SetError(1)
Sleep(7000) ;здесь ждем 7 секунд
If WinExists($sTitle) Then Return SetError(1)
Send($sLogin)
Sleep(100)
Send('{TAB}'
;...А что-то меняется при удачных действиях?

batyaPS
18-02-2011, 10:05
А что-то меняется при удачных действиях? »
что Вы имеете в виду ? с задержкой все работает как и хотел .(правда пришлось малость ее увиличить, каждый раз появление окна происходит с разной задержкой в зависимости от загрузки ПК)
не чего не появляется и не каких сообщений нет. появилось окно . тут же нажалась кнопка . выдержка . ввод логин пароль .ентер. все как надо . было бы вообще шикарно если бы можно было избавится от задержки . но как отловить это окно без
заголовка ?

madmasles
18-02-2011, 10:24
окно которое не имеет названия и AutoIT Window Info его не видит
либо зависает. »Я не знаю, как отловить такое окно. :sorry:

batyaPS
18-02-2011, 11:23
Send('{ENTER}')
;здесь бы проверку сделать, что-то должно измениться.
Return SetError(0) »
да , надо что то придумать . иначе получается скрипт ждет чего .
т.е. повторно окно с логином и паролем не заполняется , хотя кнопку первого окна нажимает .

Creat0R
18-02-2011, 12:22
ак отловить это окно без
заголовка ? »
Можно например по размеру, можно ещё ожидать появление любого дочернего окна, если это окно конечно.

P.S
Я что то не могу сообразить, где тут упоминается «Автозаполнение/GUICtrlComboBox_AutoComplete»?

batyaPS
18-02-2011, 12:44
вот тут
да , надо что то придумать . иначе получается скрипт ждет чего .
т.е. повторно окно с логином и паролем не заполняется , хотя кнопку первого окна нажимает . »

наверно можно было бы применить это

Можно например по размеру, можно ещё ожидать появление любого дочернего окна, если это окно конечно. »


P.S
Я что то не могу сообразить, где тут упоминается «Автозаполнение/GUICtrlComboBox_AutoComplete»? »

ну я в Autoit не силен , по этому что не искал выпадало на GUICtrlComboBox_AutoComplete думал это единственное возможное решение .




© OSzone.net 2001-2012