自动导航至列表中的元素

自动导航至列表中的元素

请考虑远程运行的旧版 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!

相关内容