Что нового

[Автоматизация] Как работать с SysTreeView32?

degid

Новичок
Сообщения
15
Репутация
1
В "Управлении компьютером" нужно добраться до ветки "Пользователи".

Если использовать ControlTreeView, то ничего не происходит:
Код:
$WinTitle= "Управление компьютером"
Run ('cmd /c "compmgmt.msc"', @SystemDir, @SW_HIDE) 
WinWait($WinTitle)
ControlTreeView($WinTitle, "", "SysTreeView322", "Select", "Управление компьютером (локальным)|Служебные программы|Локальные пользователи и группы|Пользователи")


а при _GUICtrlTreeView_FindItem, mmc вообще вылетает с ошибкой :(
Код:
$WinTitle= "Управление компьютером"
Run ('cmd /c "compmgmt.msc"', @SystemDir, @SW_HIDE) 
WinWait($WinTitle)
$hDTCtrl = ControlGetHandle($WinTitle, "", "SysTreeView321")
$hDTItem = _GUICtrlTreeView_FindItem($hDTCtrl, "Служебные программы")

Где ошибка?
 

saavaage

Знающий
Сообщения
171
Репутация
17
Попробуйте так:
Код:
ShellExecute("compmgmt.msc")
WinWaitActive("Управление компьютером")
send("{down 4}")
sleep(250)
send("{right}")
sleep(250)
send("{down 1}")
sleep(250)
send("{tab}")
sleep(250)


PS У меня WinXP Pro Rus SP, sleep - можете задавать как угодно (я просто люблю полный контроль)
 

beve

Осваивающий
Сообщения
104
Репутация
31
saavaage [?]
Попробуйте так:
Лучше тогда так:
Код:
$controlID="[CLASS:SysTreeView32; INSTANCE:1]"
$Title="Управление компьютером"
ShellExecute("compmgmt.msc")
WinWait($Title)
Controlsend($Title, "", $controlID, "{down 4}")
controlsend($Title, "", $controlID, "{right}")
controlsend($Title, "", $controlID, "{down 1}")


degid [?]
а при _GUICtrlTreeView_FindItem, mmc вообще вылетает с ошибкой

Учитывая то, что функции _GUICtrlTreeView_GetText, вызывает ошибку приложения, при использовании функции _GUICtrlTreeView_FindItem, то можно сделать так:
Код:
#include <GuiTreeView.au3>
$WinTitle= "Управление компьютером"
ShellExecute("compmgmt.msc")
WinWait($WinTitle)

$hDTCtrl = ControlGetHandle($WinTitle, "", "SysTreeView321")
$bState=_FindItem($hDTCtrl, "Пользователи")
MsgBox(64,"Сообщение", $bState)

Func _FindItem($hWnd, $sText, $nItems=20)
	Local $nCoutItems=0, $hStart = _GUICtrlTreeView_GetFirstChild($hWnd, 0)
	_GUICtrlTreeView_SelectItem($hWnd, $hStart)
	While $hStart <> 0x00000000
		$nCoutItems+=1
		if $nCoutItems=$nItems then Return False
		_GUICtrlTreeView_SelectItem($hWnd, $hStart)
		Local $sItem =ControlTreeView($WinTitle, "", "[CLASS:SysTreeView32; INSTANCE:1]", "GetSelected")
		If StringRegExpReplace($sItem, "^.*\|", "")==$sText Then Return True
		$hStart = _GUICtrlTreeView_GetNext($hWnd, $hStart)
	WEnd
	Return False
EndFunc   ;==>_FindItem
 
Автор
D

degid

Новичок
Сообщения
15
Репутация
1
saavaage сказал(а):
Попробуйте так:
Код:
ShellExecute("compmgmt.msc")
WinWaitActive("Управление компьютером")
send("{down 4}")
sleep(250)
send("{right}")
sleep(250)
send("{down 1}")
sleep(250)
send("{tab}")
sleep(250)


PS У меня WinXP Pro Rus SP, sleep - можете задавать как угодно (я просто люблю полный контроль)
это не катит, я так делала с групповыми политиками... {tab} как-то по разному на разных компах срабатывает....

saavaage спасибо! так вроде стабильно отрабатывает :smile:
 
Верх