本帖最后由 rmajly 于 2022-2-16 00:15 编辑
程序界面中SysTreeView及其节点控件的自动化操作(AutoIt3)
楼主菜鸟一枚,目前遇到一个任务 如下图1所示,在SysTreeView控件中,运用递归方法检索到“LS_账户清洗_多金产品账户日终对账-副本”节点;
然后上移两级,如图2所示,点击右键菜单中的“生成模块代码(无目录结构)”。
本来想用Python+Win32+Spy++方法,无奈只能抓到SysTreeView的句柄,里面的控件句柄抓不到,无奈只能放弃。
冥思苦想之际,偶遇AutoIt,定睛一看,卧槽!正解!于是花了两天学习了一下,侥幸达到了任务要求。具体实现代码如下:
#include <GuiTreeView.au3>
;声明变量
Global $hWnd,$goalfile,$result,$htzqchtz,$count,$isgo
Local $str,$location,$j,$hItem,$start,$end
_main()
Func _main()
;运行Eclipse,等待配置完毕
Run('D:\研究生\4:研二下\hs_eclipse\eclipse.exe')
WinWaitActive("[CLASS:SWT_Window0]")
;激活目标程序窗口
$htzqchtz="资源 - Eclipse SDK"
WinActivate($htzqchtz, "")
ConsoleWrite("资源 -- Eclipse SDK被激活" & @CRLF)
$count=1
$isgo=True
;清理项目
WinMenuSelectItem('资源 - Eclipse SDK','','项目(&P)','清理(&N)...')
;Sleep(10)
send("{ENTER}")
;获取目标TreeView,并全部展开
$hWnd=ControlGetHandle($htzqchtz,"","SysTreeView321") ;控件句柄
;$goalfile='(11111056)LS_账户同步多金融_客户风险等级维护(银行试题)'
$goalfile='LS_账户清洗_多金产品账户日终对账'
;将树节点全部展开
_GUICtrlTreeView_Expand($hWnd)
;点击根结点,刷新工程目录
ControlTreeView ($htzqchtz,"",$hWnd,"Select",'#0')
;Sleep(10)
$hItem =_GUICtrlTreeView_GetSelection($hWnd)
_GUICtrlTreeView_ClickItem($hWnd,$hItem,"right", False,1);点击项目
;sleep(10)
for $i = 1 to 10 ;发送按键来实现
;sleep(10)
send("{DOWN}")
next
;sleep(10)
send("{ENTER}")
;自定义函数求节点书目
ConsoleWrite('TreeView总节点个数:'&_GUICtrlTreeView_GetCount($hWnd)&@CR)
;sleep(10)
$str='#0'
$start=TimerInit() ;计时开始
SearchTree($str)
$end=TimerDiff($start);计时结束
ConsoleWrite('检索时间:'&$end&@CR)
ConsoleWrite('检索结果:'&$result&@CR)
ConsoleWrite('检索节点个数:'&$count&@CR)
;将目标根节点路径拆分
$location=StringSplit($result,'|')
;获取上级目标节点路径
for $j=2 to $location[0]-2
;ConsoleWrite('目标操作路径数是:'&$location[$j]&@CR)
$str=$str&'|'&$location[$j]
Next
ConsoleWrite('目标操作路径数:'&$str&@CR)
;Sleep(10)
;获取上级目标节点,右键点击弹出菜单窗口
ControlTreeView ($htzqchtz,"",$hWnd,"Select",$str)
;Sleep(10)
$hItem =_GUICtrlTreeView_GetSelection($hWnd)
_GUICtrlTreeView_ClickItem($hWnd,$hItem,"right", False,1);点击项目
;sleep(10)
;#cs
;发送按键来实现
for $i = 1 to 16
;sleep(10)
send("{DOWN}")
next
;sleep(10)
send("{RIGHT}")
;sleep(1000)
send("{ENTER}")
;#ce
;将树节点全部折叠
;_GUICtrlTreeView_Expand($hWnd,'',False)
EndFunc
;TreeView的根结点遍历函数
Func SearchTree($str)
Local $i,$temp,$str1,$num
$str1=$str
$num=ControlTreeView($htzqchtz,"",$hWnd,"GetItemCount",$str1)
$count+=$num
;#cs只要有匹配结果,立马跳出递归
If $isgo=False Then
Return $str1
EndIf
;#ce
If $num=0 Then
$temp=ControlTreeView($htzqchtz,"",$hWnd, "GetText", $str1)
If StringInStr($temp,$goalfile) Then
$isgo=False
ConsoleWrite('匹配节点名称:'&$temp&@CR)
$result=$str1
EndIf
Else
For $i=0 to $num-1
SearchTree($str1&StringFormat('|#%d',$i))
Next
EndIf
#cs
If $isgo=False Then
Return $str1
EndIf
#ce
EndFunc
————————————————
版权声明:本文为CSDN博主「PARKZHOU」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/PARKZHOU/article/details/76522165
|