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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] как щелкать по кнопкам в скрытых окнах? (http://forum.oszone.net/showthread.php?t=132436)

Pozia 18-02-2009 23:43 1042733

как щелкать по кнопкам в скрытых окнах?
 
Подскажите как правильно записать скрипт по установке какой нибудь проги с помощью нажатий по кнопкам в скрытых самим же аутлут окнам.

beve 19-02-2009 00:05 1042757

Вот на этом сайте Sanja Alone выложил скрипты по автоустановке многих прог, посмотри:
http://sanjaalone.h15.ru/au3.php

Pozia 21-02-2009 22:07 1045183

чет сложные для меня скрипты от Sanja Alone. Может кто нибудь может более доступно на примере нажатия по одной кнопке показать как это делается?

266903582 21-02-2009 23:33 1045249

Pozia,
Код:

if WinExists('VMware Workstation','By restoring this snapshot, the current state will be lost.') then ControlClick('VMware Workstation','By restoring this snapshot, the current state will be lost.','Button13')
или просто так:
Код:

ControlClick('VMware Workstation','By restoring this snapshot, the current state will be lost.','Button13')

beve 21-02-2009 23:37 1045252

Цитата:

чет сложные для меня скрипты от Sanja Alone.
Конечно, может и сложны. Но если попростому делать, то может быть и нестабильно. Но, для начала выбери какую то маленькую програмку, и начни свой скрипт с запуска программы установки и потом если непонятно будет, на каком то шаге, например, как убрать или поставить чекбокс, или еще что то то ссылку на программу напиши и хоть кусок твоего кода, так и тебе учится будет понятливей и тем кто сможет подсказать тоже будет понятно, что не понятно тебе, или вам.

Pozia 22-02-2009 00:55 1045284

266903582, это же обычный клик по активному окну. Мне нужно вызвать окно программы, скрыть его и щелкать по клавишам уже скрытого окна. В справочнике аутлут об этом прочел но не совсем могу понять КАК это реализовать.

Вот допустим часть скрипта Создания подключения к интернету:

#NoTrayIcon
;Запуск Мастера подключения к интернету
Run ("rundll32.exe netshell.dll,StartNCW")
WinWaitActive ( "Мастер новых подключений" )
ControlClick ( "Мастер новых подключений", "", 12324 )
WinWaitActive ( "Мастер новых подключений" )
ControlClick ( "Мастер новых подключений", "", 22125 )
ControlClick ( "Мастер новых подключений", "", 12324 )
WinWaitActive ( "Мастер новых подключений" )
ControlClick ( "Мастер новых подключений", "", "&Установить подключение вручную" )
ControlClick ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive ( "Мастер новых подключений" )
ControlClick ( "Мастер новых подключений", "", "Через &обычный модем" )
ControlClick ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive ( "Мастер новых подключений" )
Send ( "Beltelecom" )

...

Вот как скрыть эти моргающие окна при запуске скрипта?

beve 22-02-2009 14:46 1045583

Цитата:

Мне нужно вызвать окно программы, скрыть его и щелкать по клавишам уже скрытого окна. В справочнике аутлут об этом прочел но не совсем могу понять КАК это реализовать.
Если тебе саму суть то вот:
Код:

#NoTrayIcon
;Запуск Мастера подключения к интернету
Run
("rundll32.exe netshell.dll,StartNCW")
WinWaitActive ( "Мастер новых подключений" )
WinSetState ( "Мастер новых подключений", "", @SW_HIDE  )
ControlClick ( "Мастер новых подключений", "", 12324 )
WinWaitActive ( "Мастер новых подключений" )
ControlClick ( "Мастер новых подключений", "", 22125 )
ControlClick ( "Мастер новых подключений", "", 12324 )
WinWaitActive ( "Мастер новых подключений" )
ControlClick ( "Мастер новых подключений", "", "&Установить подключение вручную" )
ControlClick ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive ( "Мастер новых подключений" )
ControlClick ( "Мастер новых подключений", "", "Через &обычный модем" )
ControlClick ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive ( "Мастер новых подключений" )
ControlSend ( "Мастер новых подключений", "", "[CLASS:Edit; INSTANCE:1]","Beltelecom" )
;при отправке текста в скрытых окнах нужно использовать такое
WinSetState
( "Мастер новых подключений", "", @SW_SHOW  )

P.S. Ты пишеш - аутлут, но лучше все таки, чтоб понятливей для всех писать Автоит.

266903582 22-02-2009 15:01 1045602

Pozia, controlclick работает не только в активных окнах...

Pozia 22-02-2009 15:12 1045612

beve, супер. оказывается все легко. А вот самое первое окно есть возможность скрыть? Аль это уже из мира фантастики?

Pozia 22-02-2009 19:02 1045757

вот пытаюсь сделать автоустановку MathType. не совсем выходит. Текст скрипта:

Код:

#NoTrayIcon  run ('setup.exe')
WinWaitActive                        ('Установка 6.0c','','')
WinSetState                        ('Установка 6.0c','',@SW_HIDE)
ControlClick                        ('Установка 6.0c','',21)
ControlClick                        ('Установка 6.0c','',101)
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:1]','{end}')
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:1]','{backspace 35}')
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:1]','Pozia')
ControlClick                        ('Установка 6.0c','', 103)
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:2]','{end}')
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:2]','{backspace 35}')
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:2]','Pozia')
ControlClick                        ('Установка 6.0c','', 105)
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:3]','{end}')
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:3]','{backspace 35}')
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:3]','Pozia')
ControlClick                        ('Установка 6.0c','', 107)
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:4]','{end}')
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:4]','{backspace 35}')
ControlSend                        ('Установка 6.0c','','[CLASS:Edit; INSTANCE:4]','XXXXXXX-XXXXXX-XXXXX')
ControlClick                        ('Установка 6.0c','',112)
ControlClick                        ('Установка 6.0c','',22)
WinWaitActive                        ('Выполнение Установка 6.0c','','')
WinSetState                        ('Выполнение Установка 6.0c','', @SW_HIDE)
WinWaitActive                        ('Выбор языка','','')
WinSetState                        ('Выбор языка','',@SW_HIDE)
ControlClick                        ('Выбор языка','',1)
WinWaitActive                        ('Завершение установки','','')
WinSetState                        ('Завершение установки','',@SW_HIDE)
ControlClick                        ('Завершение установки','', 25)
ControlClick                        ('Завершение установки','', 1)
Exit

Не работает он в следующем: когда появляется последнее окно Завершение установки в котором нужно поставить птичку на согласие и нажать Готово то ничего не происходит пока я не нажму ALT+Tab и не выберу там MathType. Тогда появляется окно и скрипт дальше отробатывает. Опытно установил что мешает выполнению скрипта выделеная строка. Без нее все работает. В чем может быть причина?

266903582 22-02-2009 22:04 1045902

Pozia, обильное использование функции WinWaitActive не способствует стабильной работе скрипта. Попробуй заменить на winwait. В таком случае, даже если окно неактивно, нажатие произойдет.
P. S. Я давно использую для таких целей 2 функции, которые под разные нужды на ходу можно дополнять:
для нажатия на кнопку в окне просто пиши cl("здесь все необходимое для функции controlclick") Программа дождется появления окна и нажмет кнопку.
Код:

Func wa($tx1, $tx2)
        While WinExists($tx1, $tx2)=0
                Sleep(1)
        WEnd
EndFunc
Func cl($tx1, $tx2,$classn)
        wa($tx1, $tx2)
        ControlClick($tx1, $tx2,$classn)
EndFunc

Пример:
Код:

cl('Setup - AoADVDCreator','Completing the AoADVDCreator Setup Wizard','TNewButton4')

Func wa($tx1, $tx2)
        While WinExists($tx1, $tx2)=0
                Sleep(1)
        WEnd
EndFunc
Func cl($tx1, $tx2,$classn)
        wa($tx1, $tx2)
        ControlClick($tx1, $tx2,$classn)
EndFunc


beve 23-02-2009 01:43 1046075

Цитата:

вот пытаюсь сделать автоустановку MathType. не совсем выходит. Текст скрипта:
Ты ссылку конечно не дал... Вот у меня времени полно, я скачал MathType 6.0c, но ни русская версия ни английская с твоим кодом не совпадает...А без того чтоб посмотреть, сам понимаеш никто не подскажет.

Pozia 23-02-2009 02:53 1046098

beve, извиняюсь. Скрипт подходит к шестой версии. Предварительно нужно ее распоковать в папку и в файле setup.inf поменять строки ;no_background = 0 и ;InstallNoDlg = 1 на no_background = 1 и InstallNoDlg = 1 соответственно. Это уберет несколько окон. Скрипт выполнить в распакованной папке

beve 23-02-2009 14:17 1046404

Чтоб твой скрипт работал, нужно
WinWaitActive ('Завершение установки','','')
заменить на
WinWait('Завершение установки','','')

Pozia 23-02-2009 14:42 1046422

beve, так просто на деле. Мог я и сам догодаться конечно же. Сама команда дает подсказку. :)


Время: 19:15.

Время: 19:15.
© OSzone.net 2001-