You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AutoHotKey GUI弹窗关闭按钮未触发问题求助

Fixing Unresponsive Close Button in Named AutoHotkey GUI

我来帮你解决这个Close按钮不响应的问题——这其实是AutoHotkey里命名GUI的回调规则在搞鬼。当你给GUI指定了自定义名称(SelectedListRowsTextGui)时,AHK不会自动关联全局的ButtonClose标签,必须用正确的方式绑定按钮回调。下面给你两种可靠的解决方案:

方法一:显式指定按钮回调(推荐)

直接在按钮控件定义里用gLabel参数绑定一个独立的回调函数,这样不管这个函数放在脚本的哪个全局位置,都能被正确触发,还能避免多个GUI之间的标签冲突。

修改后的完整代码:

;---------------------------------------------------------------------115-----
; Copy Selected Windows Listview Items to Tab Spaced Text - Show popup Window Gui
115:
Gui, SelectedListRowsTextGui:Destroy
MouseGetPos, , , , ListView_hwnd, 2 ;2 means return HWND
ControlGet, selected_row_text, List, Selected, , ahk_id %ListView_hwnd%
Gui, SelectedListRowsTextGui: +ToolWindow +AlwaysOnTop -Caption
Gui, SelectedListRowsTextGui:Add, Edit, vUnused_variable x11 y15 w950 h66, %selected_row_text%
; 用gCloseSelectedListGui直接指定按钮的回调函数
Gui, SelectedListRowsTextGui:Add, Button, x62 y84 w140 h30 +Center gCloseSelectedListGui, Close
Gui, SelectedListRowsTextGui:Show, , 
return

; 独立的回调函数,可放在脚本任意全局位置
CloseSelectedListGui:
Gui, SelectedListRowsTextGui:Destroy
return

方法二:使用GUI名称前缀的标签

如果你习惯用AHK的默认标签规则,需要给按钮标签加上GUI名称的前缀,格式为[GUIName]Button[ButtonText]。这样AHK就能识别这个标签属于你的SelectedListRowsTextGui窗口。

修改后的代码示例:

;---------------------------------------------------------------------115-----
; Copy Selected Windows Listview Items to Tab Spaced Text - Show popup Window Gui
115:
Gui, SelectedListRowsTextGui:Destroy
MouseGetPos, , , , ListView_hwnd, 2 ;2 means return HWND
ControlGet, selected_row_text, List, Selected, , ahk_id %ListView_hwnd%
Gui, SelectedListRowsTextGui: +ToolWindow +AlwaysOnTop -Caption
Gui, SelectedListRowsTextGui:Add, Edit, vUnused_variable x11 y15 w950 h66, %selected_row_text%
Gui, SelectedListRowsTextGui:Add, Button, x62 y84 w140 h30 +Center, Close
Gui, SelectedListRowsTextGui:Show, , 
return

; 命名GUI对应的按钮标签,必须带GUI名称前缀
SelectedListRowsTextGuiButtonClose:
Gui, SelectedListRowsTextGui:Destroy
return

问题根源解释

你之前把ButtonClose移到115:标签外没用,核心原因是:当使用命名GUI时,AHK不会去匹配全局的ButtonClose标签,而是默认寻找带有该GUI名称前缀的标签。如果不通过gLabel显式指定,或者不按规则命名标签,按钮点击事件就找不到对应的处理逻辑,自然不会响应。

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

火山引擎 最新活动