我有这个代码:
#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〃;这取决于第二个复选框是选中还是未选中。这就是我想要的样子。
然而,如果我按下Enter
或NumpadEnter
,它只会变成"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了。