You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AHK脚本WinGetText获取内容为空,Window Spy却显示有内容的问题

AutoHotkey v1 脚本WinGetText无法获取目标窗口文本问题

问题详情

手动按下Alt+n后,v2版本的Window Spy显示目标窗口存在“Create New Prescription”可见文本,但在AutoHotkey v1脚本中出现以下异常:

  • 通过#IfWinActive指定目标窗口后,按Ctrl+J触发Send !n,WinGetActiveTitle能正确返回预期的窗口标题
  • WinGetText始终无法捕获到“Create New Prescription”文本,日志文件仅重复记录“ blah”内容
  • 已尝试的无效操作:省略WinGetText的窗口标题参数、切换SetTitleMatchMode的Slow/Fast模式
  • 版本混淆排查:发现误用v2版Window Spy,曾尝试引入v2的WinGetTextFast()函数,因v1无WinGetControlsHwnd函数报错;同时存在本地查v1文档、线上看v2文档的版本错位问题,已定位方向但未解决。

现有v1脚本

#IfWinActive <Redacted title> ; 隐私信息已隐藏,该语句可正常匹配目标窗口
^j::
Send, !n

WinGetActiveTitle, title
MsgBox, %title% ; 消息框显示预期的窗口标题

WinGetText, createNewPrescriptionTitle, title
while (InStr(createNewPrescriptionTitle, "Create New Prescription") != 1)
{
    Sleep, 1000
    FileAppend, %createNewPrescriptionTitle% blah, log.txt ; 日志仅记录" blah blah blah..."
    WinGetText, createNewPrescriptionTitle, title
}

MsgBox, "Huzzah"

解决方案建议

  1. 修正窗口目标错误:
    Send !n大概率会弹出新的“Create New Prescription”对话框/子窗口,而原脚本一直获取初始窗口的文本,自然找不到目标内容。可改用WinWait等待新窗口出现后再获取文本:
#IfWinActive <Redacted title>
^j::
Send, !n
; 等待新窗口加载,可根据窗口标题或文本匹配
WinWait, Create New Prescription
; 获取新窗口的文本
WinGetText, createNewPrescriptionTitle, Create New Prescription
MsgBox, "Huzzah"
return
  1. 使用窗口句柄提升准确性:
    相比窗口标题,句柄更稳定,可通过WinGet获取新窗口句柄后再调用API获取文本:
#IfWinActive <Redacted title>
^j::
Send, !n
WinWait, Create New Prescription
WinGet, hWnd, ID, Create New Prescription
; 调用Windows API获取窗口文本
VarSetCapacity(windowText, 2048)
DllCall("user32.dll\GetWindowText", "Ptr", hWnd, "Str", windowText, "Int", 2048)
MsgBox, %windowText%
return
  1. 替换v2函数的v1实现:
    v1没有WinGetTextFast(),但可通过遍历控件获取文本,替代实现如下:
WinGetTextFast(hWnd) {
    text := ""
    WinGet, controls, ControlList, ahk_id %hWnd%
    Loop, Parse, controls, `n
    {
        ControlGetText, ctrlText, %A_LoopField%, ahk_id %hWnd%
        text .= ctrlText "`n"
    }
    return text
}

调用时只需传入目标窗口句柄即可:createNewPrescriptionTitle := WinGetTextFast(hWnd)

  1. 统一版本工具:
    使用v1对应的Window Spy(位于v1安装目录下的WindowSpy.ahk)排查窗口信息,避免用v2工具分析v1脚本问题,减少版本混淆。

内容的提问来源于stack exchange,提问作者user11302188

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:35:12