有一些软件只能实时查看数据变化,而不提供保存功能,为了将这些数据输出并处理,可通过AHK获取软件中相应控件中的数值。
查找控件位置
新建一个ahk脚本,并单击运行,从而右下角会出现ahk的图标。右键该图标->单击【Window Spay】,即可弹出窗口监控框,如下图所示
其中【Window Title, Class and Process】中依次提供了窗口标题、类和进程等数据,通过【#HotIf WinActive】语法将其选中,即可对其操作,例如
#HotIf WinActive("ahk_exe Code.exe")
#Space::
{
MsgBox "你在Code.exe中按下了Win+空格"
}
当在【学习笔记】中按下Win+空格键时,就会弹出消息框。
获取控件
【WinGetControls】可以返回指定窗口中所有控件,例如,下列代码可以在弹出信息框中,将ahk从Code.exe窗口中识别到的控件全部显示出来
#Space::
{
a := ""
for n, ctrl in WinGetControls("ahk_exe Code.exe")
{
a := a n " " ctrl " "
}
MsgBox a
}
效果如下
保存文本
ahk在Code.exe中只识别到两个控件,所以用信息框看一下没什么问题,但控件较多时,最好还是将其另存为文件。就算不考虑这个,一会儿想要实时监控某个程序,也需要用到文件写入功能。
【FileOpen】可以创建一个文件,其输入参数为文件名和访问模式。访问模式包括r,w,a,rw等,即读取、写入、追加、读写,这玩意几乎是宇宙通用的。
在文件创建后,可以调用其中的Write或者WriteLine来写入文本,示例如下
#Space::
{
f = FileOpen("ctrls.txt", "a")
for n, ctrl in WinGetControls("ahk_exe Code.exe")
{
f.WriteLine(n " " ctrl)
}
f.Close()
MsgBox "文件保存成功”
}
这回,再去点击Win+Space,就会创建文件,并写入如下内容
1 Chrome_RenderWidgetHostHWND1
2 Intermediate D3D Window1
获取文本
【ControlGetText】可以在ahk中获取控件的文本,将循环体中的代码改为下面的形式,
ControlGetText(ctrl, "学习笔记.md - code - Visual Studio Code")
即可获取名为"dataSpay.ahk - code - Visual Studio Code"的窗口中ahk检测到的所有控件的内容,结果如下
Chrome Legacy Window
Chrome Legacy Window
AHK在VS Code中只检测到了Chrome Legacy Window,但在某些软件,尤其是winForm程序,其效果非常好。
至此,就实现了窗口中控件内容的获取。