Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Ожидание окна и действие (Автозаполнение/GUICtrlComboBox_AutoComplete) (http://forum.oszone.net/showthread.php?t=199356)

batya85 13-02-2011 09:39 1611562

Ожидание окна и действие (Автозаполнение/GUICtrlComboBox_AutoComplete)
 
Как пользоваться _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 1611587

Предупреждение за нарушение правил форума, пункт 2.7 и пункт 3.19:

Цитата:

2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...
Подробнее о принципах создания тем читайте в этом документе и Правилах форумов.

3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный и напишите об этом в теме.
Переименуйте пожалуйста тему (Как переименовать свою тему?).

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

batyaPS 13-02-2011 11:22 1611631

Цитата:

Цитата Creat0R
Переименуйте пожалуйста тему (Как переименовать свою тему?). »

я бы рад , но нет кнопки "Редактировать"

madmasles 13-02-2011 16:13 1611877

Цитата:

Цитата batya85
Нужен простой скрипт который будет постоянно сидеть в памяти (запущен) и ждать появления определенного окна. »

Попробуйте так:
Код:

#NoTrayIcon

Global $fClick = True, _
        $sTitle = '[TITLE:Весовой модуль; CLASS:#32770]'

HotKeySet('{Esc}', '_Exit') ;Esc - выход
If @Compiled Then
    _RegRun() ;для записи скрипта в автозагрузку
EndIf
While 1
    If WinExists($sTitle) And BitAND(WinGetState($sTitle), 2) Then
        If $fClick Then
            _Click()
            If Not @error Then
                $fClick = False
            EndIf
        EndIf
    Else
        $fClick = True
    EndIf
    Sleep(100)
WEnd

Func _Exit()
    Exit
EndFunc  ;==>_Exit

Func _RegRun()
    Local $sRegRun = 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'

    If RegRead($sRegRun, @ScriptName) = '' Or RegRead($sRegRun, @ScriptName) <> @ScriptFullPath Then
        RegWrite($sRegRun, @ScriptName, 'REG_SZ', @ScriptFullPath)
    EndIf
EndFunc  ;==>_RegRun

Func _Click()
    Local $sLogin = 'digi'

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


batyaPS 13-02-2011 18:06 1611970

Цитата:

Цитата madmasles
Попробуйте так: »

большое спасибо. чуть уточню .

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

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




madmasles 13-02-2011 19:22 1612025

batyaPS,
Я код изменил, но не проверял. (Предыдущий код проверял на собственном нарисованном окне.)

batyaPS 14-02-2011 09:25 1612417

поправка 2 .

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

batyaPS 18-02-2011 08:35 1615900

ну подскажите, куда правильно поставить SLIP ?

madmasles 18-02-2011 08:41 1615903

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 1615946

Цитата:

Цитата madmasles
А что-то меняется при удачных действиях? »

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

madmasles 18-02-2011 10:24 1615960

Цитата:

Цитата batyaPS
окно которое не имеет названия и AutoIT Window Info его не видит
либо зависает. »

Я не знаю, как отловить такое окно. :sorry:

batyaPS 18-02-2011 11:23 1616005

Цитата:

Цитата madmasles
Send('{ENTER}')
;здесь бы проверку сделать, что-то должно измениться.
Return SetError(0) »

да , надо что то придумать . иначе получается скрипт ждет чего .
т.е. повторно окно с логином и паролем не заполняется , хотя кнопку первого окна нажимает .

Creat0R 18-02-2011 12:22 1616051

Цитата:

Цитата batyaPS
ак отловить это окно без
заголовка ? »

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

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

batyaPS 18-02-2011 12:44 1616077

вот тут
Цитата:

Цитата batyaPS
да , надо что то придумать . иначе получается скрипт ждет чего .
т.е. повторно окно с логином и паролем не заполняется , хотя кнопку первого окна нажимает . »

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

Цитата:

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


Цитата:

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

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


Время: 18:29.

Время: 18:29.
© OSzone.net 2001-