多个 GUI 未从 AutoHotKey 启动
Multiple GUIs not launching from AutoHotKey
我正在尝试使生成模板的过程自动化,以请求我们的外包提供商进行体检。脚本中有六个GUI:
- 特别说明
- 列出即将到来的约会
- 联系信息
- 已列出授权书?
- 电子文件还是硬拷贝文件?
- 授权号和生效日期范围
每个 GUI 都会要求用户选择一个选项,然后根据答案在模板中粘贴一段文本。
用于特殊说明的第一个 GUI 运行很好。但是脚本没有继续到第二个 GUI,而是结束了。我使用 SciTE4 编辑器试图查看发生了什么,在第一个 GUI 运行s 之后,它跳到了最后。
这是前两个 GUI 和结尾的代码:
;SPECIAL INSTRUCTIONS GUI
;Gui, Add, Text, W400 H40, Special instructions?
Gui, Add, Radio, vSpecInstrs Checked, Yes
Gui, Add, Radio, , No
Gui, Add, Edit, W370 r4 vListofInstrs,
Gui, Add, Button, vButtonNext1 gNextSelected1, Next
Gui, Add, Button, xp+60 vButtonCancel1 gCancelSelected1, Cancel
Gui, Show, W400 H150, Special Instructions?
return
;
NextSelected1:
Gui, Submit, ; Save the input from the user to each control's associated variable.
If SpecInstrs = 1
{
SendInput >{space 2}>{space 2}>{space 2}>{space 2}>{space 2}IMPORTANT{!}{space 2}<{space 2}<{space 2}<{space 2}<{space 2}<
Send {Enter 2}
SendInput %ListofInstrs%
Send {Enter 2}
}
Else If SpecInstrs = 2
{
Send {Enter 2}
}
SpecInstrs = 0
FileType =
Gui, Destroy
;Return
;
; Actions on Cancel or Close
;
CancelSelected1:
;GuiClose:
;ExitApp
gosub, GuiClose
;Return
;UPCOMING APPOINTMENTS GUI
Gui, Add, Text, Center W200 H50, UPCOMING APPOINTMENTS?
Gui, Add, Radio, vAppts checked, Yes
Gui, Add, Radio, , No
Gui, Add, Button, vButtonNext2 gNextSelected2, Next
Gui, Add, Button, xp+60 vButtonCancel2 gCancelSelected2, Cancel
Gui, Show, , Appointments
return
;
NextSelected2:
Gui, Submit, ; Save the input from the user to each control's associated variable.
If Appts = 1
{
SendInput >{space 2}>{space 2}>{space 2}>{space 2}>{space 2}Future Appointments - Do NOT Schedule On This Date{(}s{)}{space}<{space 2}<{space 2}<{space 2}<{space 2}<
Send {Enter 2}
SendInput {[}Copy and paste appointments from CPRS here{]}
Send {Enter 2}
SendInput >{space 2}>{space 2}>{space 2}>{space 2}>{space 2}<{space 2}<{space 2}<{space 2}<{space 2}<
Send {Enter 2}
}
Else If Appts = 2
{
Send Appointments pending: None
Send {Enter 2}
}
Gui, Destroy
Appts = 0
Return
;
; Actions on Cancel or Close
;
CancelSelected2:
gosub, GuiClose
;GuiClose:
;ExitApp
Return
代码实际上永远不会进入即将到来的约会 GUI。在 运行 调试器中,在我 select Next 按钮之后,它跳到最后的代码:
;
;
GuiClose:
ExitApp
Return
我会粘贴其余的代码,但我想如果我能弄清楚如何在 GUI 1 之后制作 GUI 2 运行,我就能让其他人工作。 (此外,如果我什至无法将 GUI 2 获取到 运行,谁在乎其余的?!)。感谢您的帮助!
你似乎对return
关键字有很大的误解:
AutoHotkey 开始执行脚本的顶部 ,直到第一个 return
出现 。之后,只有 热键、热字串、函数,对您来说最重要的是标签。
一些随机的 AutoHotkey 脚本可能如下所示:
#noEnv
sendMode, Input
setWorkingDir, %A_WorkingDir%
Gui, 1:add, button, gbuttonpressed, press me
Gui, 1:show
return
; any random commands here will never be executed, if not enclose in a labe, hotkey etc!
buttonpressed:
gui, 1:destroy
msgbox, hi!
goSub, secondGui_start
return
secondGui_start:
Gui, 2:add, text,, this Gui will show after the first one
Gui, 2:show
return
2GuiClose:
exitApp
return
回到你的脚本。
按下带有关联变量 ButtonNext
的按钮时,将调用标签 NextSelected1
。它以
结尾
Gui, Destroy
Return
,但您希望之后会发生一些事情!所以告诉编译器你想在 return
之前继续下一个 Gui。否则,脚本变为空闲,并且由于您既没有热键也没有热字串也没有附加 #persistent
关键字,脚本终止。
使用 GoTo
关键字这样做。如果你把你的第二个gui放在自己的标签里,你就可以这样调用了。
最后,如果你想管理多个guis,那么就给它们编号,就像我在上面的例子中所做的那样。
我正在尝试使生成模板的过程自动化,以请求我们的外包提供商进行体检。脚本中有六个GUI:
- 特别说明
- 列出即将到来的约会
- 联系信息
- 已列出授权书?
- 电子文件还是硬拷贝文件?
- 授权号和生效日期范围
每个 GUI 都会要求用户选择一个选项,然后根据答案在模板中粘贴一段文本。
用于特殊说明的第一个 GUI 运行很好。但是脚本没有继续到第二个 GUI,而是结束了。我使用 SciTE4 编辑器试图查看发生了什么,在第一个 GUI 运行s 之后,它跳到了最后。
这是前两个 GUI 和结尾的代码:
;SPECIAL INSTRUCTIONS GUI
;Gui, Add, Text, W400 H40, Special instructions?
Gui, Add, Radio, vSpecInstrs Checked, Yes
Gui, Add, Radio, , No
Gui, Add, Edit, W370 r4 vListofInstrs,
Gui, Add, Button, vButtonNext1 gNextSelected1, Next
Gui, Add, Button, xp+60 vButtonCancel1 gCancelSelected1, Cancel
Gui, Show, W400 H150, Special Instructions?
return
;
NextSelected1:
Gui, Submit, ; Save the input from the user to each control's associated variable.
If SpecInstrs = 1
{
SendInput >{space 2}>{space 2}>{space 2}>{space 2}>{space 2}IMPORTANT{!}{space 2}<{space 2}<{space 2}<{space 2}<{space 2}<
Send {Enter 2}
SendInput %ListofInstrs%
Send {Enter 2}
}
Else If SpecInstrs = 2
{
Send {Enter 2}
}
SpecInstrs = 0
FileType =
Gui, Destroy
;Return
;
; Actions on Cancel or Close
;
CancelSelected1:
;GuiClose:
;ExitApp
gosub, GuiClose
;Return
;UPCOMING APPOINTMENTS GUI
Gui, Add, Text, Center W200 H50, UPCOMING APPOINTMENTS?
Gui, Add, Radio, vAppts checked, Yes
Gui, Add, Radio, , No
Gui, Add, Button, vButtonNext2 gNextSelected2, Next
Gui, Add, Button, xp+60 vButtonCancel2 gCancelSelected2, Cancel
Gui, Show, , Appointments
return
;
NextSelected2:
Gui, Submit, ; Save the input from the user to each control's associated variable.
If Appts = 1
{
SendInput >{space 2}>{space 2}>{space 2}>{space 2}>{space 2}Future Appointments - Do NOT Schedule On This Date{(}s{)}{space}<{space 2}<{space 2}<{space 2}<{space 2}<
Send {Enter 2}
SendInput {[}Copy and paste appointments from CPRS here{]}
Send {Enter 2}
SendInput >{space 2}>{space 2}>{space 2}>{space 2}>{space 2}<{space 2}<{space 2}<{space 2}<{space 2}<
Send {Enter 2}
}
Else If Appts = 2
{
Send Appointments pending: None
Send {Enter 2}
}
Gui, Destroy
Appts = 0
Return
;
; Actions on Cancel or Close
;
CancelSelected2:
gosub, GuiClose
;GuiClose:
;ExitApp
Return
代码实际上永远不会进入即将到来的约会 GUI。在 运行 调试器中,在我 select Next 按钮之后,它跳到最后的代码:
;
;
GuiClose:
ExitApp
Return
我会粘贴其余的代码,但我想如果我能弄清楚如何在 GUI 1 之后制作 GUI 2 运行,我就能让其他人工作。 (此外,如果我什至无法将 GUI 2 获取到 运行,谁在乎其余的?!)。感谢您的帮助!
你似乎对return
关键字有很大的误解:
AutoHotkey 开始执行脚本的顶部 ,直到第一个 return
出现 。之后,只有 热键、热字串、函数,对您来说最重要的是标签。
一些随机的 AutoHotkey 脚本可能如下所示:
#noEnv
sendMode, Input
setWorkingDir, %A_WorkingDir%
Gui, 1:add, button, gbuttonpressed, press me
Gui, 1:show
return
; any random commands here will never be executed, if not enclose in a labe, hotkey etc!
buttonpressed:
gui, 1:destroy
msgbox, hi!
goSub, secondGui_start
return
secondGui_start:
Gui, 2:add, text,, this Gui will show after the first one
Gui, 2:show
return
2GuiClose:
exitApp
return
回到你的脚本。
按下带有关联变量 ButtonNext
的按钮时,将调用标签 NextSelected1
。它以
Gui, Destroy
Return
,但您希望之后会发生一些事情!所以告诉编译器你想在 return
之前继续下一个 Gui。否则,脚本变为空闲,并且由于您既没有热键也没有热字串也没有附加 #persistent
关键字,脚本终止。
使用 GoTo
关键字这样做。如果你把你的第二个gui放在自己的标签里,你就可以这样调用了。
最后,如果你想管理多个guis,那么就给它们编号,就像我在上面的例子中所做的那样。