为什么我的AutoHotKey脚本在按Enter/NumpadEnter时不发送复选框——只在单击按钮时发送



我有这个代码:

#Persistent
#SingleInstance Off
Gui, New, -MinimizeBox, % "Test"
Gui, Add, Edit, vUserInput w300
Gui, Add, Checkbox, vMyCheckbox1, % "Ceckbox one"
Gui, Add, Checkbox, vMyCheckbox2, % "Checkbox two"
Gui, Add, Button, gOkButtonPress w50 h25 x80, % "OK"
Gui, Show, Center
return
Enter::
Gosub, OkButtonPress
NumpadEnter::
Gosub, OkButtonPress
OkButtonPress:
Gui, Submit
MsgBox, Meow! %MyCheckbox2%
ExitApp
return

如果我运行它并点击";OK";按钮,它弹出一个GUI框,上面写着";喵!0";或";喵!1〃;这取决于第二个复选框是选中还是未选中。这就是我想要的样子。

然而,如果我按下EnterNumpadEnter,它只会变成"0";喵"没有";0";或";1〃;;复选框值将被忽略。

这怎么可能?昨天和今天,我已经为此咒骂了好几个小时,无助地试图阅读手册并进行搜索,但一无所获。

总的来说,我觉得AutoHotKey非常奇怪。

(我还尝试在每个Gosub之后添加return,以及许多其他内容。(

这确实是一件非常奇怪的事情
我想说,在我为你写的另一个答案中使用Gui, New是我的错。

Gui, New创建一个新的gui,并将其设置为默认gui,就像创建gui的任何其他方法一样但是它只将其设置为当前线程的默认gui
因此,当您运行热键时,您处于热键线程中
在该线程中,它不是默认的gui,而是名为1的gui
因此,对Gui, Submit的调用试图引用gui1,但它不存在。

你可以通过命名你的gui来解决这个问题,然后用它的名字来引用gui:

Gui, MyCoolGui:New, -MinimizeBox, % "Test" ;name the gui
Gui, Add, Edit, vUserInput w300
Gui, Add, Checkbox, vMyCheckbox1, % "Ceckbox one"
Gui, Add, Checkbox, vMyCheckbox2, % "Checkbox two"
Gui, Add, Button, gOkButtonPress w50 h25 x80, % "OK"
Gui, Show, Center
;each of the gui commands couldve been explicitly specified
;to operate on the named gui "MyCoolGui" like MyCoolGui:Add, MyCoolGui:Show
;but it's redundant
return
Enter::         ;no need to gosub, or goto, 
NumpadEnter::   ;just stack the hotkeys and labels
OkButtonPress:  ;like this
Gui, MyCoolGui:Submit   ;refer to our named gui
MsgBox, % "Meow! " MyCheckbox2
ExitApp
return

或者,你不能使用Gui, New,你可以这样做:

Gui, -MinimizeBox
Gui, Add, Edit, vUserInput w300
Gui, Add, Checkbox, vMyCheckbox1, % "Ceckbox one"
Gui, Add, Checkbox, vMyCheckbox2, % "Checkbox two"
Gui, Add, Button, gOkButtonPress w50 h25 x80, % "OK"
Gui, Show, Center, % "Test" ;give a title on the show command
return
Enter::         
NumpadEnter::   
OkButtonPress:  
Gui, Submit 
MsgBox, % "Meow! " MyCheckbox2
ExitApp
return

Gui, New的文档描述了使用这两种方法中的任何一种的一些起伏
但是,如果您只使用一个gui,而不是多个gui,为了简单起见,我建议您不要使用Gui, New,这样您就不必担心命名gui了。

最新更新