自动获取当前插入符位置或当前文本框位置

Autoit get current caret position Or current text box position

所以我正在做一个项目,但我卡在了这部分。 我正在尝试定位打字插入符(打字时闪烁的线)或正在输入的当前文本框的位置。

困难的主要部分是我希望对计算机上的每个输入都执行此操作(Firefox 搜索、记事本、重命名文件、编写此 post...)

我开始怀疑 auto-it 能否做到这一点,我愿意使用另一种可以做到这一点的语言。 (除了Auto-it我还没有检查任何其他语言)

我测试了 "WinGetCaretPos()" 和其他一些随机脚本,但它们有同样的问题,它们没有 return 正确的位置。

~谢谢

并非所有控件都是标准 window 控件,可以使用 AutoIt 函数访问。许多程序(尤其是浏览器)都有非标准控件,因此 "every input" 在计算机上可能很难获得。

下面是一个示例,说明如何获取任何活动 window 的控件信息,这些活动 window 给予控件焦点并且具有标准 windows 控件。

HotKeySet("{ESC}", "Terminate")

While 1
    Sleep(500)
    GetControlFocus()
WEnd

Func GetControlFocus()
    Local $hWinHandle = WinGetHandle("[Active]")
    Local $sControl = ControlGetFocus($hWinHandle)

    Local $sText = "The active window handle is: " & $hWinHandle & @CRLF

    If $sControl <> "" Then
        $sText &= "The control with focus in the active window is: " & $sControl & @CRLF
        Local $aPos = ControlGetPos($hWinHandle, "", $sControl)
        $sText &= "Mouse position: X: " & $aPos[0] & " Y: " & $aPos[1] & @CRLF & "Size: " & $aPos[2] & ", " & $aPos[3]

    Else
        $sText &= "The active window is not giving focus to a control that AutoIt recognizes."
    EndIf

    ToolTip($sText, 0, 0)
EndFunc   ;==>GetControlFocus

Func Terminate()
    Exit
EndFunc   ;==>Terminate

您可以使用 IUIAutomation 和此 UDF 获取其他程序的控制位置。但它不会像使用几个标准的 AutoIt 函数那么简单。