Что нового

[Автоматизация] Отследить всплывающее окно антивируса Kaspersky и нажать кнопку

newbie215

Новичок
Сообщения
18
Репутация
0
Привет всем! Необходимо отследить всплывающее окно антивируса Kaspersky и нажать в нем кнопку. Для меня это стало каким-то мистическим действом. WinExists почему-то не всегда справлялся с поиском окна, вернее работал 2-3 раза из 10. Всплывающее окно не имеет Title, так что обращаться приходилось по классу, в окне надо нажать кнопку "Разрешить(по умолчанию)", при проверке с помощью Window Info оказалось, что это не кнопка вовсе, во всяком случае поля в Window Info были пусты. Пришлось сделать костыльным методом, отсчитывать количество пикселей от Edit2(он выделен красным цветом на скрине), но результата никакого. В сухом остатке имеем: 2-3 раза из 10 можно отследить всплывающее окно, нажать кнопку нельзя, после того как окно отслежене скрипт переставал выполняться, даже если его зациклить.

Прошу прощения за вырвиглазный код.
Код:
#include <FTPEx.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#RequireAdmin
$download = InetGet("http://soft.sibnet.ru/get/?id=30802",".\K-Lite_Codec_Pack_1005_Mega.exe",1,1)
ProgressOn("Скачивание файла","Скачивание файла с сервера","0 %")
$file_size = InetGetSize("http://soft.sibnet.ru/get/?id=30802")
Do
   Sleep(250)
   $download_percent = Int(100*InetGetInfo($download,0)/$file_size)
   ProgressSet($download_percent,$download_percent&"Процентов скачалось")
Until InetGetInfo($download,2)
ProgressSet(100,"Завершено","Полностью скачалось")
Local $bytes = InetGetInfo($download,0)
InetClose($download)
Sleep(2000)
ProgressOff()
MsgBox(4096,"","Количество скачанных байт:"&$bytes,2)

Run("K-Lite_Codec_Pack_1005_Mega.exe")
WinWaitActive("Setup - K-Lite Mega Codec Pack")
ControlClick("Setup - K-Lite Mega Codec Pack","","[CLASS:TNewButton; INSTANCE:1]")
ControlClick("Setup - K-Lite Mega Codec Pack","","[CLASS:TNewButton; INSTANCE:2]")
ControlClick("Setup - K-Lite Mega Codec Pack","","[CLASS:TNewButton; INSTANCE:2]")
ControlClick("Setup - K-Lite Mega Codec Pack","","[CLASS:TNewButton; INSTANCE:2]")
ControlClick("Setup - K-Lite Mega Codec Pack","","[CLASS:TNewButton; INSTANCE:2]")
ControlClick("Setup - K-Lite Mega Codec Pack","","[CLASS:TNewButton; INSTANCE:2]")
ControlClick("Setup - K-Lite Mega Codec Pack","","[CLASS:TNewButton; INSTANCE:5]")
ControlClick("Setup - K-Lite Mega Codec Pack","","[CLASS:TNewButton; INSTANCE:6]")
ControlClick("Setup - K-Lite Mega Codec Pack","","[CLASS:TNewButton; INSTANCE:6]")
$i = 0
Sleep(20000)
While Not WinExists("[CLASS:AVP.AlertDialog]","")
If WinExists("[CLASS:AVP.AlertDialog]","") Then
   MsgBox(0,"","Сейчас кликну",2)
   While $i<500
	  $curs_pos = ControlGetPos("[CLASS:AVP.AlertDialog]","","[CLASS:Edit; INSTANCE:2]")
	  MsgBox(0,"","Я тут"&$cursor_pos[0]&"|"&$cursor_pos[1],2) 
	  Sleep(100)
	  MouseMove($curs_pos[0],$curs_pos[1]+60)
	  MouseClick("",$curs_pos[0],$curs_pos[1]+65)
	  $i=$i+1
   WEnd
   ExitLoop
EndIf

WEnd


Может есть какое-то решение?
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
newbie215
Ну так наверняка нужно отключить самозащиту антвируса что бы им манипулировать?
Если не поможет то у него либо нет элементов либо он их старательно прячет от таких "тыкалок" как ваша
 
Автор
N

newbie215

Новичок
Сообщения
18
Репутация
0
MnM
Проблема в том, что я собираюсь устанавливать приложения на других удаленных компьютерах по своему сценарию, т.е. есть 300-400 компьютеров в одной конторке по всей России и, если приспичит установить новую софтину, то они лезут на мой веб-сервер, качают нужную DLL-ку и с помощью нее устанавливают софт. На всех компьютерах стоит этот антивирус и никакой другой, отключать его нельзя, пользователь может быть малограмотным и попросту побоится нажимать какие-то кнопки, так вот и приходится что-то выдумывать, чтобы разрешить установку в этом окне.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
newbie215 сказал(а):
костыльным методом, отсчитывать
Если всплывающее окно предоставляет доступ к информации о позиции(WinGetPos()) то костыльным методом тыкайте туда с помощью MouseClick()
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
newbie215 [?]
работал 2-3 раза из 10
У вас так составлено условие
Код:
While Not WinExists("[CLASS:AVP.AlertDialog]","")
Т.е. как только окно появляется - цикл больше не выполняется. Замените этот цикл на
Код:
WinWait("[CLASS:AVP.AlertDialog]")


Далее.
ControlGetPos() возвращает координаты относительно клиентской области, а клики мышью по умолчанию относительно экранных. Попробуйте добавить опцию
Код:
Opt("MouseCoordMode", 2)
Но перед кликом нужно будет активировать окно
Код:
WinActivate("[CLASS:AVP.AlertDialog]")
 
Автор
N

newbie215

Новичок
Сообщения
18
Репутация
0
С помощью MouseClick невозможно нажать на окно касперского. Курсор доходит до края окна и все. В интернете ничего не нашел по поводу обхода защиты касперского без предварительного добавления скрипта в доверенную зону касперского. Может так искал, конечно, но все же. В принципе, изначально в концепции программы предусматривалась установка скрипта, с последующим добавлением его в доверенную зону, а потом уже скрипт будет докачивать DLL-ки с инструкциями для самого себя, поэтому проблем с доступом быть не должно, но тема обхода защиты антивируса не перестает быть актуальной. Может еще найдутся какие-то предложения кликнуть, допустим при помощи сторонних средств?

P.S. Забыл добавить, OS Win7, хотя на скрине видно.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
newbie215, а с клавиатурой это окно работает? Попробуйте
Код:
Send()
ControlSend()
В качестве эксперимента - вручную отключите самозащиту и посмотрите, работают ли скрипты.
 
Автор
N

newbie215

Новичок
Сообщения
18
Репутация
0
InnI
В качестве эксперимента - вручную отключите самозащиту и посмотрите, работают ли скрипты.
Если отключить самозащиту, то работает, но на клиентских компьютерах нельзя отключать самозащиту.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
newbie215 [?]
пользователь может быть малограмотным и попросту побоится нажимать какие-то кнопки
Выведите ему окно на пол-экрана с убедительной просьбой нажать кнопку "Разрешить". Желательно с картинкой окна и куда тыкать. В противном случае пригрозите неработоспособностью программ. Пусть сам решает.
 
Автор
N

newbie215

Новичок
Сообщения
18
Репутация
0
В качестве эксперимента - вручную отключите самозащиту и посмотрите, работают ли скрипты.
Как вариант :smile:. Как мне кажется, самый удобный вариант будет добавить в доверенную зону движок, а через него уже все остальное запускать, раз по-другому никак. Спасибо за ответы.
 
Верх