Что нового

[Автоматизация] Не выполняется ControlClick в условном переходе (if,endif)

warezoogle3

Новичок
Сообщения
73
Репутация
1
Привет Всем! :smile:

Есть такая простейшая конструкция
Код:
#RequireAdmin

AutoItSetOption("WinTitleMatchMode", 2)
AutoItSetOption("WinDetectHiddenText", 1)

Run("Vistalizator.exe")

If WinExists("Warning","Yes") Then
WinActivate("Warning")
WinWaitActive("Warning")
ControlClick("Warning","", "Button1")
EndIf


Но если снять условный переход,то все прекрасно работает,а нужно именно с переходом.
Не могу найти ошибку.
Помогите пожалуйста.
Для удобства вот ссылка на файл Vistalizator.exe, если вдруг кто-то захочет пробовать.
http://www.froggie.sk/download/Vistalizator.exe
Заранее огромное спасибо! :beer: :IL_AutoIt_1:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ты полностью описывай ситуацию.
Судя из названия темы, следует что окно активируется, но не выполняется именно ControlClick.
Хотя, прочитав твоё сообщение, приходишь к выводу что вообще не проходит проверка условия на существование окна.
Тогда вопрос: а зачем ты туда лепишь "Yes" ?
 
Автор
W

warezoogle3

Новичок
Сообщения
73
Репутация
1
C2H5OH

Так тоже не работает
Код:
#RequireAdmin

AutoItSetOption("WinTitleMatchMode", 2)
AutoItSetOption("WinDetectHiddenText", 1)

Run("Vistalizator.exe")

If WinExists("Warning") Then
WinActivate("Warning")
WinWaitActive("Warning")
ControlClick("Warning","", "Button1")
EndIf


Так тоже не работает.
Окно появляется,но не кликает.
И судя по иконке в трее (в коде не поставил
Код:
#NoTrayIcon
) и имени в процессах,скрипт не завершается,а вешается.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
If WinExists("Warning") Then
	ConsoleWrite("point1" & @CRLF)
	WinActivate("Warning")
	ConsoleWrite("point2" & @CRLF)
	WinWaitActive("Warning")
	ConsoleWrite("point3" & @CRLF)
	ControlClick("Warning","", "Button1")
	ConsoleWrite("point4" & @CRLF)
EndIf
 
Автор
W

warezoogle3

Новичок
Сообщения
73
Репутация
1
C2H5OH,извините,я новичок. :smile:

Заменил ту часть кода на Ваш,но опять зависает.
И не понял, point-и надо было заменить на какие-то значения?
Логику не понял в общем.
Извините пожалуйста,если уже нервирую. :beer:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Продолжаем разговор. :beer:

Ты запускаешь скрипт из SciTE.
При этом в нижней части появляется окно консоли. Команда ConsoleWrite пишет сообщение в это окно.
Тебе ничего изменять не нужно. Тебе нужно запустить скрипт
Код:
#RequireAdmin

AutoItSetOption("WinTitleMatchMode", 2)
AutoItSetOption("WinDetectHiddenText", 1)

Run("Vistalizator.exe")

If WinExists("Warning") Then
	ConsoleWrite("point1" & @CRLF)
	WinActivate("Warning")
	ConsoleWrite("point2" & @CRLF)
	WinWaitActive("Warning")
	ConsoleWrite("point3" & @CRLF)
	ControlClick("Warning","", "Button1")
	ConsoleWrite("point4" & @CRLF)
EndIf


и посмотреть какие сообщения появились в окне консоли.
Таким образом ты определишь какие команды в скрипте выполнились, а на какой он завис.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
warezoogle3
Вы должны понимать, что код autoit выполнится намного быстрее чем появится ваше окно, И соответсвтено условия If WinExists("Warning") Then вообще не выполнится. Вам надо именно дожидаться появления окна, а затем отсылать какие либо клавиши, а не просто проверять наличие окна.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
inververs
Так он же говорит что у него скрипт виснет, а не завершается с ошибкой.
У меня этот скрипт работает без проблем.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
а, ну раз так, убирайте вообще win.. функции, ControlClick должен отослать в неактивное окно.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
C2H5OH [?]
Так он же говорит что у него скрипт виснет, а не завершается с ошибкой.У меня этот скрипт работает без проблем.
warezoogle3 [?]
Окно появляется,но не кликает.
и имени в процессах,скрипт не завершается,а вешается.

inververs прав, скрипт запускает программу и пока она строит своё окно скрипт выходит из условия не найдя окно. Чисто гепотетически сомневаюсь что скрипт будет ждать построения окна, поэтому трудно предположить, что скрипт виснет на WinWaitActive. Эта единственная функция в этом скрипте, которая может приостановить скрипт. Используйте WinWait вместо WinExists.

Почему скрипт под админом запускается? Он случаем не кликает сам себя?

Код:
#RequireAdmin

Opt("WinTitleMatchMode", 2)
Opt("WinDetectHiddenText", 1)

Run("Vistalizator.exe")
$hWnd = WinWait("Warning", 5)
If $hWnd Then
	If Not WinActivate($hWnd) Then
		MsgBox(0, 'Сообщение', 'Окно не может быть активировано')
		Exit
	EndIf
	If Not WinWaitActive($hWnd, '', 3) Then ; ждём 3 сек
		MsgBox(0, 'Сообщение', 'Завершаем не дождавшись активации окна')
		Exit
	EndIf
	If Not ControlClick($hWnd, "", "Button1") Then MsgBox(0, 'Сообщение', 'Клик как бы не выполнился')
EndIf
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
AZJIO,
У Вас ошибка:
Код:
;...У Вас:
$hWnd = WinWait('Warning', 5)
;...Должно быть:
$hWnd = WinWait('Warning', '', 5)
;...
 
Автор
W

warezoogle3

Новичок
Сообщения
73
Репутация
1
Спасибо огромное,добрые люди!
Каждый раз удивляюсь,какие прекрасные люди сидят на этом форуме! :beer: :IL_AutoIt_1:
Немного переделал код,который Вы предложили и получилось
Код:
#RequireAdmin

Opt("WinTitleMatchMode", 2)
Opt("WinDetectHiddenText", 1)

Run("Vistalizator.exe")
$hWnd = WinWait('Warning', '', 5)
If $hWnd Then
WinActivate($hWnd)
WinWaitActive($hWnd, '', 3)
ControlClick($hWnd, "", "Button1")
EndIf

Так отлично работает! :smile:
Но хочу понять логику кода.
Тоесть получается внедряем целую функцию в переменную,а потом ее используем уже в качестве другой функции?
Грубо говоря что-то типо этого? (просто поменял одну из строк)
Код:
WinActivate(WinWait('Warning', '', 5))

Тоесть получается то,что я хотел (ждет 5 секунд и если окно не появилось,ничего не делает).
 
Верх