Windows 为什么我的自动热键脚本在按Enter/NumpadEnter时不发送复选框--仅在单击按钮时才发送?
我有以下代码:Windows 为什么我的自动热键脚本在按Enter/NumpadEnter时不发送复选框--仅在单击按钮时才发送?,windows,autohotkey,Windows,Autohotkey,我有以下代码: #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, But
#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
如果我运行它并单击“确定”按钮,它会弹出一个GUI框,显示“喵!0”或“喵!1”,具体取决于第二个复选框是否选中。这就是我想要的
但是,如果我按Enter
或NumpadEnter
,它只会发出“喵喵”声,没有“0”或“1”;复选框值将被忽略
这怎么可能?昨天和今天,我已经为此诅咒了好几个小时,无助地试图阅读手册并搜索,但什么也没找到
我发现自动热键通常非常奇怪
(我还尝试在每个
Gosub
s和许多其他东西之后添加return
。这确实是一件非常奇怪的事情。我要说的是,在我为您编写的另一个答案中使用
Gui,New
是我的错
Gui,New
创建一个新的Gui,并将其设置为默认Gui,就像任何其他创建Gui的方法一样但它仅将其设置为当前线程的默认gui。因此,当您运行热键时,您处于热键线程中。
在该线程中,它不是默认gui,而名为
1
的gui是默认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,您可以这样做:
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,新的描述了使用这两种方法的一些起伏。
但是如果您只使用一个gui,而不是多个gui,为了简单起见,我建议您不要使用gui,New
,这样您就不必担心gui的命名问题。这确实是一件非常奇怪的事。
我要说的是,在我为您编写的另一个答案中使用Gui,New
是我的错
Gui,New
创建一个新的Gui,并将其设置为默认Gui,就像任何其他创建Gui的方法一样但它仅将其设置为当前线程的默认gui。
因此,当您运行热键时,您处于热键线程中。
在该线程中,它不是默认gui,而名为1
的gui是默认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,您可以这样做:
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,新的描述了使用这两种方法的一些起伏。
但是如果您只使用一个gui,而不是多个gui,为了简单起见,我建议您不要使用gui,New
,这样您就不必担心gui的命名问题