Что нового

Автоматическая установка adguard

Fergus

Новичок
Сообщения
11
Репутация
0
Помогите решить проблему с установкой, не могу понять где ошибка, вот часть кода:
Код:
Func zapusk_programm()
$iCheck = 0
$sMessage = '' 
$iPid = Run('D:\Новая папка\ATF-Cleaner\adguardInstaller.exe')
$hWin = WinWait('[Title:Adguard - загрузка компонента; Class:#32770]', '', 3)
If Not $hWin Then
    MsgBox(16, 'Error', 'Нет окна :(')
    If ProcessExists($iPid) Then ProcessClose($iPid)
    Exit -33
 EndIf
$hProgress = ControlGetHandle($hWin, '', '[CLASS:msctls_progress32; INSTANCE:1]')
$iStart = TimerInit()
While $iCheck < 100
    $iCheck = _SendMessage($hProgress, $PBM_GETPOS)
    ConsoleWrite(StringFormat('%d%', $iCheck) & @LF)
    Sleep(500)
    If TimerDiff($iStart) > 200000 Then ExitLoop
WEnd
If $iCheck < 100 Then
    MsgBox(16, 'Error', 'Не дождались окончания установки :(')
    WinClose($hWin)
    Exit -77
 EndIf
 ControlClick($hWin, 'Д&алее', '[CLASS:Button; INSTANCE:1]')
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Fergus
а в чем проблема то? что за ошибка выпадает или где не срабатывает?
почему у тебя таймаут ожидания окна три секунды? не мало ли?
 
Автор
F

Fergus

Новичок
Сообщения
11
Репутация
0
Ошибка связана с переменной:
Line 24(...)
$iCheck=_SendMessage($hProgress, $PBM_GETPOS)
$iCheck=_SendMessage($hProgress, ^ERROR
Error: Variable used without being declared
Код:
ControlClick($hWin, 'Д&алее', '[CLASS:Button; INSTANCE:1]')
Кнопку "Далее" не нажимает.
Насчет таймаута, запуск установки происходит моментально, так что вроде 3 секунд достаточно. А вот дальше идет задержка, причем большая(качает с интернета файлы, скорость соединения не большая). Потом, кнопка "Далее" неактивна, опять задержка правда не большая.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
[?]
$iCheck=_SendMessage($hProgress, $PBM_GETPOS)
$iCheck=_SendMessage($hProgress, ^ERROR
Error: Variable used without being declared
Fergus, ну так вроде ясно написано что ты не "объявил" ее, переменную
Код:
$PBM_GETPOS

в локальных ее нет, значит она глобальная..значит объяви ее вначале скрипта\
по
Код:
ControlClick
смотри еще раз справку
первый параметр: заголовок окна
второй: текст (можно пустые кавычки)
третий: объект, по которому кликаешь.
плюс порой мало дождаться появления окна, нужно дождаться его активности или сделать активным, потом кликать.
пример на форуме по автоустановке достаточно..
вот пример кликанья по чужому окну http://autoit-script.ru/index.php/topic,8921.msg59973.html#msg59973
по
Код:
WinWait

опять читай справку
Возвращает дескриптор указанного окна.
Ошибка: Возвращает 0, если выход по тайм-ауту.
в твоем случае возвращает нуль..не нужен тайм-аут.
а может лучше использовать
Код:
WinWaitActive
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
madmasles
я согласен с любым указанием на ошибку в моих выводах. мои познания весьма скромны..только хочется услышать и пояснения.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Александр,
Если бы функция WinWait вернула 0, то до строки 24 скрипт бы не дошел, а выдал сообщение и выход с кодом -33.
 
Верх