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

使用Polyethene库中GuiControlGet函数获取控件宽度报错求助

问题分析与修复方案

错误原因

  1. 参数传递错误:原命令GuiControlGet, OutputVar, Pos,% var中的% var是展开变量值,实际传递的是控件文本Hello world作为ControlID;但你调用自定义函数时传了字符串"var",导致函数找不到对应控件,局部变量v未被赋值,触发错误。
  2. Pos子命令的特殊行为:原生GuiControlGet的Pos子命令不会给主输出变量赋值,而是自动创建OutputVarX、OutputVarY、OutputVarW、OutputVarH四个后缀变量。你的自定义函数仅返回空的主变量v,且函数内的局部变量及其后缀会在执行结束后销毁,外部无法访问OutPutW。

修复代码示例

方案1:返回包含位置信息的对象

这种方式更符合函数式编程的习惯,直接返回结构化的位置数据:

var := "Hello world"
Gui HUD:New, +AlwaysOnTop +ToolWindow -Caption +HwndMainHwnd, hudWin
Gui HUD:Font,s14,Consolas
Gui, Add, Text,,% var
GuiControlGet, OutputVar, Pos,% var
Gui HUD:Show, x300 y300 w300 h300

msgbox,% outputVarW                          ; 原生命令正常返回宽度

; 修复:传递var的实际值,而非字符串"var"
OutPut := GuiControlGet("Pos", var)   
msgbox,% OutPut.W                                 ; 从返回对象中获取宽度

GuiControlGet(Subcommand = "", ControlID = "", Param4 = "") {
    if (Subcommand = "Pos") {
        ; 收集Pos子命令生成的位置变量
        GuiControlGet, temp, Pos, %ControlID%, %Param4%
        return {X: tempX, Y: tempY, W: tempW, H: tempH}
    } else {
        ; 其他子命令按原逻辑处理
        GuiControlGet, v, %Subcommand%, %ControlID%, %Param4%
        return v
    }
}

方案2:模仿原生命令的变量赋值行为

这种方式完全复刻原生命令的用法,通过动态变量名在外部创建后缀变量:

var := "Hello world"
Gui HUD:New, +AlwaysOnTop +ToolWindow -Caption +HwndMainHwnd, hudWin
Gui HUD:Font,s14,Consolas
Gui, Add, Text,,% var
GuiControlGet, OutputVar, Pos,% var
Gui HUD:Show, x300 y300 w300 h300

msgbox,% outputVarW                          ; 原生命令正常返回宽度

; 修复:传递输出变量名、子命令和控件标识
GuiControlGet("OutPut", "Pos", var)   
msgbox,% OutPutW                                 ; 直接访问后缀变量

; 调整函数参数:第一个参数为输出变量名
GuiControlGet(OutputVarName = "", Subcommand = "", ControlID = "", Param4 = "") {
    if (OutputVarName = "")
        return ""
    ; 使用动态变量名调用原生命令,在外部生成后缀变量
    GuiControlGet, %OutputVarName%, %Subcommand%, %ControlID%, %Param4%
    return %OutputVarName%
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:02:33