请考虑远程运行的旧版 Windows 应用程序中聚焦的标准 win32 列表控件中的以下元素列表(WindowSpy 无法获取其控件或文本):
- 110
- 120
- 210
- 220
- 221
- 2211
- 2213
- 222
- 2222
- 2224
- 223
在这个小提琴中看到类似的东西https://jsfiddle.net/e56bnLmc/
我想使用 AutoHotkey 导航到元素“2222”。
如果我输入“120”,光标就会滚动到元素“120”。
如果我输入“2222”并连续输入“2”,光标会滚动到“210”,然后是“220”,然后是“221”,然后是“2211”。但不会滚动到元素“2222”。这在 Windows 10 上的 Firefox 和 Chrome 中提供的小提琴中显示,但在 Explorer 或 Edge 中不显示。
我不能使用箭头键,因为我不是使用键盘,但使用 AutoHotkey,转到“2222”。我知道有一个元素“2222”,但不知道下一个元素是哪个(可能是“2223”或“230”或“310”),也不知道前一个元素是哪个(可能是“2221”或“222”或“140”)。
答案1
我可以使用 来完成这项工作ImageSearch
,搜索包含我想要查找的文本的图像。但我不太喜欢这个解决方案。
我安装了 ImageMagick 来生成图像。它是从脚本内部调用的。
如果列表很长,我必须循环单击滚动条(这里不想使用 PgDn 以避免选择列表中的项目)。
由于提示和文本在屏幕上的子像素表示,我不得不允许阴影差异,而我无法使用 ImageMagick 复制这些差异。通过反复试验,我发现(对于这些小文本)*200
尽管使用了不同的提示,但传递似乎可以得到匹配,并且不会将 Z 误认为 2、将 S 误认为 5 或将 O 误认为 0。
WindowMatch := "xxxx"
; End position of the scrollbar, to check if at the bottom or not (and click to next page)
ScrollPosX := 692
ScrollPosY := 518
Label := "2222"
RunWait magick.exe -size 45x11 xc:white -font Tahoma -pointsize 12 -draw "fill black text 3`,10 ' %Label% '" label.png
WinActivate, %WindowMatch%
Loop {
ImageSearch, FoundX, FoundY, 0,0, 200,1000, *200 label.png
if (ErrorLevel = 1) {
; Find Light grey which means scroll bar NOT at the bottom
PixelSearch, Px, Py, ScrollPosX, ScrollPosY, ScrollPosX, ScrollPosY, 0xf0f0f0, 1, Fast
if ErrorLevel {
; Pixel not found -> Scroll bar at the bottom -> Label not found
Break
} else {
; Click the scrollbar to advance a page
Click, %ScrollPosX%, %ScrollPosY%
}
} else {
MsgBox The text was found at %FoundX%x%FoundY%.
}
}
MsgBox, Cannot be found!