Что нового

[Элементы GUI] Как прочитать/управлять (отмечать) элементы в SysListView32 в настройках NOD32

Favorite6233

Знающий
Сообщения
21
Репутация
5
Нужно в разделе настроек NOD32 в разделе "Фильтрация протоколов-Исключённые приложения" найти нужное приложение из списка и поставить (или убрать) галочку. Сколько ни пытался - количество элементов показывает, а вот получить указатель на элемент с нужным содержанием и управлять этим элементом не получается. Приложения в этот список попадают автоматически: сам NOD32 вносит сюда все приложения, которые делают запросы в сеть. Располагает NOD32 элементы по алфавиту.
 
Автор
F

Favorite6233

Знающий
Сообщения
21
Репутация
5
madmasles [?]

Сначала с помощью ControlListView, потом с помощью _GUICtrlListView_FindText с разными модификациями.
Пробовал _GUICtrlListView_GetView просмотреть тип представления - возвращает 0 (Details).
_GUICtrlListView_GetItemCount и прочие, которые показывают количество элементов - показывают правильно.
_GUICtrlListView_GetItem возвращает следующие данные:

(0] ([0] - Item state, which can be a combination of the following)
[1]0 ([1] - One based item image overlay index)
[2]0 ([2] - One based item state image index)
[3] ([3] - Item text)
[4]0 ([4] - Zero based item image index)
[5]0 ([5] - Item application defined value)
[6]0 ([6] - Number of image widths to indent the item)
[7]0 ([7] - Identifier of the tile view group that receives the item)

Может есть ещё какие команды или способы?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Можешь экспортировать настройки в xml файл, подправить его как нужно и импортировать назад
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Favorite6233,
У меня работает.
Код:
#include <GuiTreeView.au3>
#include <GuiListView.au3>

;проверял только на Windows XP 32, ESET Smart Security 3.0.684.0 rus
$iError = 1
$hWinEset = WinGetHandle('[Title:ESET Smart Security; Class:Eset Client Frame]')
If Not $hWinEset Then Exit -11
ControlSend($hWinEset, '', '', '{F5}')
$hWin = WinWait('[Title:ESET Smart Security; Class:#32770]', '', 5)
If Not $hWin Then Exit -22
For $j = 1 To 1
	$hTreeView = ControlGetHandle($hWin, '', '[CLASS:SysTreeView32; INSTANCE:1]')
	If Not $hTreeView Then ExitLoop
	;_GUICtrlTreeView_Expand($hTreeView);???
	$hItem = _GUICtrlTreeView_FindItem($hTreeView, 'Активный режим')
	If Not $hItem Then ExitLoop
	_GUICtrlTreeView_EnsureVisible($hTreeView, $hItem)
	If Not _GUICtrlTreeView_SelectItem($hTreeView, $hItem) Then ExitLoop
	$hListView = ControlGetHandle($hWin, '', '[CLASS:SysListView32; INSTANCE:1]')
	If Not $hListView Then ExitLoop
	For $i = 1 To 5
		$iCount = _GUICtrlListView_GetItemCount($hListView)
		If $iCount Then ExitLoop
		Sleep(1000)
	Next
	If Not $iCount Then ExitLoop
	$iRand = Random(0, $iCount - 1, 1)
	$sText = ''
	For $i = 0 To $iCount - 1
		_GUICtrlListView_EnsureVisible($hListView, $i)
		$fCheck = _GUICtrlListView_GetItemChecked($hListView, $i)
		_GUICtrlListView_SetItemChecked($hListView, $i, Not $fCheck)
		$sMessage = StringFormat('Index:\t%d (0 - %d)\tText:\t%s\nIs Checked:\t%s', $i, $iCount - 1, _
				_GUICtrlListView_GetItemText($hListView, $i), $fCheck)
		ToolTip($sMessage, 0, 0)
		If $i = $iRand Then $sText = _GUICtrlListView_GetItemText($hListView, $i)
		Sleep(1000)
		_GUICtrlListView_SetItemChecked($hListView, $i, $fCheck)
	Next
	If $sText Then
		ToolTip('Find: ' & $sText, 0, 0)
		$iIndex = _GUICtrlListView_FindInText($hListView, $sText)
		If $iIndex < 0 Then ExitLoop
		_GUICtrlListView_EnsureVisible($hListView, $iIndex)
		$fCheck = _GUICtrlListView_GetItemChecked($hListView, $iIndex)
		_GUICtrlListView_SetItemChecked($hListView, $iIndex, Not $fCheck)
		Sleep(3000)
		_GUICtrlListView_SetItemChecked($hListView, $iIndex, $fCheck)
		Sleep(1000)
	EndIf
	$iError = 0
Next
ToolTip('')
ControlClick($hWin, '', '[CLASS:Button; INSTANCE:8]');Отмена
If $iError Then
	MsgBox(16, 'Error', 'Error')
	Exit -33
Else
	MsgBox(64, 'Info', 'OK')
EndIf
 

beliy

Продвинутый
Сообщения
372
Репутация
72
думаю намного проще будет делать через импорт/экспорт настроек +при желании можно пересобрать дистрибутив для установки с уже заданными настройками. +все можно удобно менять с помошью ESET Remote Administrator Console, также с помошью ее удобно мониторить состояние работы антивируса.
 
Автор
F

Favorite6233

Знающий
Сообщения
21
Репутация
5
madmasles
Не, не работает. У меня не SmartSequrity, а NOD32 версии 4.2.64.12 - ни в какую. _GUICtrlListView_EnsureVisible - не помогает.
_GUICtrlListView_GetItemChecked - всегда возвращает False

inververs [?]
Можешь экспортировать настройки в xml файл, подправить его как нужно и импортировать назад
Да, так придётся и сделать. Попробовал вручную подправить .xml файл - нормально получилось. Дальше - дело техники. Спасибо.

beliy
Да, буду делать через импорт/экспорт и правку файла. Пересобрать дистрибутив можно, я это сделаю, и это будет работать при установке антивируса. А вот если антивирус уже стоит и нужно подправить "галочки" в этом пункте, то буду делать через импорт/экспорт. ESET Remote Administrator Console ещё надо настраивать, да и мониторить - это всё работа. А так - будет программка, которая делает все необходимые настройки, которую и по телефону можно будет запустить.

В общем - всем спасибо, вопрос решён, хоть и не через графический интерфейс, но решён.

Единственное - осталось любопытство: чё такого наворотили в данном случае в интерфейсе необычного, что существующие функции не смогли туда добраться. И ещё есть любопытная программа: AIMP3. Там как-то установка (инсталляция) сделана так, что Autoit v3 Window info не может отобразить кнопок. Поэтому пришлось просто мышкой водить по экрану и тыкать в соответствующие области окна.
 
Верх