Что нового

Закрытие всплывающего окна подтверждения

Solid_Rio

Новичок
Сообщения
4
Репутация
0
Версия AutoIt: 3.14.2

Описание: Есть программа, которую необходимо перезапускать каждые 2 часа. При запуске необходимо подтвердить всплывающее окно. Необходимо сделать процесс автоматическим.

Код:
  >>>> Window <<<<
Title:	Time Limited License Agreement
Class:	#32770
Position:	710, 405
Size:	487, 214
Style:	0x94C801C5
ExStyle:	0x00010109
Handle:	0x0000000000360C0C

>>>> Control <<<<
Class:	Button
Instance:	1
ClassnameNN:	Button1
Name:	
Advanced (Class):	[CLASS:Button; INSTANCE:1]
ID:	2
Text:	ОК
Position:	375, 139
Size:	88, 26
ControlClick Coords:	46, 12
Style:	0x50030000
ExStyle:	0x00000004
Handle:	0x00000000002E0BF2

>>>> Mouse <<<<
Position:	1139, 586
Cursor ID:	0
Color:	0x590000

Примечания: Пытался построить перезапуск с помощью сторонних программ (типо планировщика в вин7, xStarter и тд) по той причине, что работаю в сфере промышленной автоматизации и не сильно понимаю в IT. Все получилось - кроме подтверждения данного окна. Все используемые мною программы имели имитацию кнопок и нажатия ЛКМ и возможность закрытия необходимого окна, но из всех сработала только одна Auto keyboard by Murgee(имитировал нажатие клавиши ENTER), но она платная. Наткнулся на данный форум. Нашел похожую тему: http://autoit-script.ru/index.php?topic=12426.0 Но все советы и скрипт указанный там мне не помог.
Код:
HotKeySet('{Esc}', '_Exit')
AdlibRegister('_CloseWin', 500)

While 1
    Sleep(500)
WEnd

Func _CloseWin()
    Local $h_Win = WinActivate("Time Limited License Agreement")
    If Not $h_Win Then Return
	Send ("{ENTER}")
EndFunc   ;==>_CloseWin
ENTER
Func _Exit()
    Exit
EndFunc   ;==>_Exit
Пытался и ENTER отправлять и через совет из той темы - WinClose - ничего не помогло. Надеюсь вы мне подскажите как победить данное окно.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
HotKeySet('{Esc}', '_Exit')
AdlibRegister('_CloseWin', 500)

While 1
    Sleep(500)
WEnd

Func _CloseWin()
    Local $h_Win = WinActivate("Time Limited License Agreement")
    If Not $h_Win Then Return
    ControlClick($h_Win, "", "Button1")
EndFunc   ;==>_CloseWin
Func _Exit()
    Exit
EndFunc   ;==>_Exit



Добавлено:
Сообщение автоматически объединено:

Отредактируй
modify_inline.gif
свое сообщение выдели то, что под спойлером между этими тегами [code]

[/code] И свой скрипт тоже выдели тегами [autoit]

[/autoit]
 
Автор
S

Solid_Rio

Новичок
Сообщения
4
Репутация
0
alex33 сказал(а):
Код:
HotKeySet('{Esc}', '_Exit')
AdlibRegister('_CloseWin', 500)

While 1
    Sleep(500)
WEnd

Func _CloseWin()
    Local $h_Win = WinActivate("Time Limited License Agreement")
    If Not $h_Win Then Return
    ControlClick($h_Win, "", "Button1")
EndFunc   ;==>_CloseWin
Func _Exit()
    Exit
EndFunc   ;==>_Exit



Добавлено:
Сообщение автоматически объединено:

Отредактируй
modify_inline.gif
свое сообщение выдели то, что под спойлером между этими тегами [code]

[/code] И свой скрипт тоже выдели тегами [autoit]

[/autoit]







Пробовал данный вариант, еще в качестве предложения из темы указанной в первом посте, не работает. Окно становится активным, кнопка ОК подсвечивается синим, но нажатия не происходит. Данное окно какое-то необычно, ибо, как я указывал в первом посте, все программы имитации нажатия клавиш клавиатуры/кликов мыши/команд закрытия окна (кроме одной, о которой я говорил) не работают на данное окно. :(

Хм... Может быть это полезная информация, но сама программа, которая выдает это окно требует включения функции "Управления учетными записями пользователей" в вин7 - по умолчанию. И соответственно на ярлыке данной программы синий щит и уведомление о подтверждения запуска данной программы. Изначально, когда я строил перезапуск программы - это было для меня препятствием, но обошел по советам из гугла через планировщик заданий и пару команд в бат файле. Собственно, к чему это я, быть может необходимо наделить команду в скрипте какими-то правами?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
#RequireAdmin
А если в начале скрипта написать?
 
Автор
S

Solid_Rio

Новичок
Сообщения
4
Репутация
0
alex33 сказал(а):
Код:
#RequireAdmin
А если в начале скрипта написать?
И.... Заработало! Спасибо :smile:

Мой конечный скрипт, быть может кто-нибудь столкнется с похожей проблемой и он, как я в свое время, наткнется на данную тему.
Код:
#RequireAdmin
HotKeySet('{Esc}', '_Exit')
AdlibRegister('_CloseWin', 500)

While 1
    Sleep(500)
WEnd

Func _CloseWin()
    Local $h_Win = WinActivate("Time Limited License Agreement")
    If Not $h_Win Then Return
    ControlClick($h_Win, "", "Button1")
EndFunc   ;==>_CloseWin
Func _Exit()
    Exit
EndFunc   ;==>_Exit

Простите за оффтоп:
П.с. Понравилось использовать скрипты Autoit, никогда не сталкивался с таким. Возник вопрос. Могу ли я реализовать скрипт(я уже описывал выше), который будет висеть в ожидании, при старте определенной программы он начинает отсчитывать 7190 секунд, закрывает 2 программы по истечении времени (в случае, если программа была закрыта до истечения времени - возвращаться в режим ожидания со сбросом таймера), и открывает их заново с использованием части кода, который уже есть в этой теме. На данный момент я делаю это с помощью стороннего планировщика, но хотелось бы попробовать в скрипт autoit. Если это возможно, то где я могу спросить помощи, в этой теме или создать новую?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Понравилось использовать скрипты Autoit, никогда не сталкивался с таким.
Да, это мощная штука.
Могу ли я реализовать скрипт(я уже описывал выше), который будет висеть в ожидании, при старте определенной программы он начинает отсчитывать 7190 секунд, закрывает 2 программы по истечении времени (в случае, если программа была закрыта до истечения времени - возвращаться в режим ожидания со сбросом таймера), и открывает их заново с использованием части кода, который уже есть в этой теме.
в этой теме или создать новую?
Лучше в новой. Но я уже подготовил ответ:
Код:
#RequireAdmin ; запрос прав администратора
HotKeySet('{Esc}', '_Exit')
Local $iWaitSeconds = 7190 ; сколько сек. ждать
Local $sProcessName = "prog.exe" ; имя процесса программы
Local $hTimer ; переменная с указателем на таймер
While 1 ; бесконечный цикл
	If ProcessExists($sProcessName) Then ; если процесс существует (запущен)
		If Not $hTimer Then $hTimer = TimerInit() ; если таймер не запущен - запускаем
		If Floor(TimerDiff($hTimer) / 1000) > $iWaitSeconds Then ; если прошло время
			AdlibRegister('_CloseWin', 500) ; запускаем функцию закрытия через каждые 500 мс.
		EndIf
	Else ; если процесса нет
			AdlibUnRegister('_CloseWin') ; удаляем зарег. функ., если есть
		$hTimer = TimerInit() ; перезапуск таймера с нуля
	EndIf
	Sleep(500)
WEnd

Func _CloseWin()
	Local $h_Win = WinActivate("Time Limited License Agreement")
	If Not $h_Win Then Return
	ControlClick($h_Win, "", "Button1")
EndFunc   ;==>_CloseWin
Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
S

Solid_Rio

Новичок
Сообщения
4
Репутация
0
alex33 сказал(а):
Понравилось использовать скрипты Autoit, никогда не сталкивался с таким.
Да, это мощная штука.
Могу ли я реализовать скрипт(я уже описывал выше), который будет висеть в ожидании, при старте определенной программы он начинает отсчитывать 7190 секунд, закрывает 2 программы по истечении времени (в случае, если программа была закрыта до истечения времени - возвращаться в режим ожидания со сбросом таймера), и открывает их заново с использованием части кода, который уже есть в этой теме.
в этой теме или создать новую?
Лучше в новой. Но я уже подготовил ответ:
Код:
#RequireAdmin ; запрос прав администратора
HotKeySet('{Esc}', '_Exit')
Local $iWaitSeconds = 7190 ; сколько сек. ждать
Local $sProcessName = "prog.exe" ; имя процесса программы
Local $hTimer ; переменная с указателем на таймер
While 1 ; бесконечный цикл
	If ProcessExists($sProcessName) Then ; если процесс существует (запущен)
		If Not $hTimer Then $hTimer = TimerInit() ; если таймер не запущен - запускаем
		If Floor(TimerDiff($hTimer) / 1000) > $iWaitSeconds Then ; если прошло время
			AdlibRegister('_CloseWin', 500) ; запускаем функцию закрытия через каждые 500 мс.
		EndIf
	Else ; если процесса нет
			AdlibUnRegister('_CloseWin') ; удаляем зарег. функ., если есть
		$hTimer = TimerInit() ; перезапуск таймера с нуля
	EndIf
	Sleep(500)
WEnd

Func _CloseWin()
	Local $h_Win = WinActivate("Time Limited License Agreement")
	If Not $h_Win Then Return
	ControlClick($h_Win, "", "Button1")
EndFunc   ;==>_CloseWin
Func _Exit()
	Exit
EndFunc   ;==>_Exit

Спасибо большое за предложенное решение. Правда это не совсем то, что я хотел, но это по причине того, что я возможно неправильно объяснил. На данный момент пока буду осуществлять перезапуск с помощью сторонних программ и скрипта, который находится выше в теме, т.к. сейчас очень много проектов по работе. В случае наличия свободного времени обязательно вернусь к данном вопросу и возможно обращусь на данный форум, но уже в новой теме. AutoIT меня действительно заинтересовал и возможно в дальнейшем буду искать его применение в сфере своей работы.
 
Верх