多个GUI未从AutoHotKey启动

时间:2015-03-20 20:06:37

标签: user-interface autohotkey

我正在尝试自动生成模板以从我们的外包提供商处请求体检。脚本中有六个GUI:

  • 特别说明
  • 列出即将到来的约会
  • 联系信息
  • 授权委托书?
  • 电子或硬拷贝文件?
  • 授权号和生效日期范围

每个GUI都要求用户选择一个或另一个选项,并根据答案在模板中粘贴一个文本块。

特殊指令的第一个GUI运行得很好。但是脚本结束了,而不是继续进行第二个GUI。我使用SciTE4编辑器试着看看发生了什么,在第一次运行GUI后,它会跳到最后。

这是前两个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。在运行调试器时,在我选择Next按钮后,它会跳到最后的代码:

;
;
GuiClose:
  ExitApp
Return

我会粘贴剩下的代码,但我想如果我能弄清楚如何在GUI 1之后运行GUI 2,我可以让其他代码工作。 (此外,如果我甚至无法运行GUI 2,谁会关心其余的?!)。我感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

对您来说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,那么就像我在上面的例子中所做的那样给它们编号。