官网某个脚本也有类似的功能(Remote TreeView)
http://www.autohotkey.com/forum/viewtopic.php?t=12381
这个RTV.ahk还要1个别人的库,然而下了这个库后,AHK报错,说调用某个函数参数数量太少。
无心研究,遂自己写一个,反正我也只要 GetPath 和 SetPath。
我这个TVPath.ahk不需要任何别人的库。使用时只需要在你的脚本中 #include TVPath.ahk 即可。也可以把 TVPath.ahk 拷贝到 autohotkey/lib 目录,这样就不需要 #include 了(具体看AHK帮助中关于用户库的说明)。
库中有2个函数
TVPath_Get(hTreeView, ByRef outPath, Delimiter="\")
TVPath_Set(hTreeView, inPath, ByRef outMatchPath, EscapeChar="", Delimiter="\", RetryTimesForGetChild=0, NoSelection=False)
Vim生成的HTML版脚本:
http://www.autohotkey.net/~wingzero520/TVPath.ahk.html
示例1, 获取注册表编辑器的TreeView选中项目的路径
Code: Select all
SetTitleMatchMode, 2
ControlGet, hwnd, hwnd, , SysTreeView321, 注册表编辑器
if( (ret:=TVPath_Get(hwnd, outPath))="")
MsgBox outPath=%outPath%
else
MsgBox % ret
return
简体中文WINDOWS有效,其他WINDOWS请自行更改脚本中的中文。
Code: Select all
SetTitleMatchMode, 2
inPath=我的电脑\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
WinActivate, 注册表编辑器
ControlGet, hwnd, hwnd, , SysTreeView321, 注册表编辑器
if( (ret:=TVPath_Set(hwnd, inPath, matchPath))="")
MsgBox matchPath=%matchPath%
else
MsgBox % ret
return
--------------------------------
更新历史:
15-1-18
只是貌似对 WIN7 上的某些 SysTreeView32 控件无效(比如资源管理器左边的目录树)
10-11
用 GenDocs 生成了函数说明文档放到 Autohotkey.net,这样这个帖子能短点
支持自定义路径分隔符。
解决 Set 函数选择资源管理器树有时只能选择前几层节点的问题,详情请看 TVPath_Set()帮助
10-06
自己的疏忽造成的低级bug: 只检查了RegExMatch()的errorlevel,而没检查返回值.,导致只要用到正则永远都只会选中第一个节点...感谢 热土流风 指出。
9-20:
TVPath_Set() 的功能大幅度强化,不仅应 maxspeedwind的要求实现了按序号匹配,还可以用正则表达式,甚至可以自己写回调函数来匹配。
感谢@wz520提供的源文件