如何在现有工作简单的AutoHotKey GUI窗口脚本中添加一个复选框?

问题描述

我目前有这个:

InputBox,UserInput,My private search engine,Specify a search string:,320,128
if not ErrorLevel
{
    UserInput := StrReplace(UserInput,"""","\""")
    Run %ComSpec% /c "PHP "C:\test\engine.PHP" "--query=%UserInput%"
}

运行时,它将显示一个带有简单文本输入的GUI小窗口,要求我输入查询。当我单击“确定”或按Enter时,它将使用搜索查询作为参数执行我的engine.PHP PHP CLI脚本(它完成了所有实际工作)。在我弄清楚之前,这个简单的事情花费了我极其长时间的阅读,搜索,测试和宣誓。尤其是UserInput := StrReplace(UserInput,"\""")部分使我几乎发疯了,然后我才意识到。 (如果您不这样做,那么各种输入字符都会破坏整个过程。)

有效。但是,我发现我经常想指定一些复选框选项,例如[ ] Skip the videos dir。所以我需要添加一个复选框。

如果这是HTML,我会知道该怎么做。但事实并非如此。这是AutoHotKey脚本,坦率地说,这很令人生气。尽管阅读了手册中的相关章节,但我根本无法弄清楚该如何做。我已经放弃了,不得不寻求帮助。

我如何在我的文本输入框下方直观地在现有代码添加一个复选框,然后又将其作为自变量发送,例如... "--option1=%something%"

解决方法

您将要为此创建一个gui
而且我还认为您在该命令行中缺少或有额外的引号。
第一个引号(这里的第一个引号:"php "C:\tes...)似乎没有结尾的引号(?)

但是无论如何,这里:

#Persistent

Gui,New,-MinimizeBox,% "My private search engine"
Gui,Add,Text,% "Specify a search string:"
Gui,Edit,vUserInput w300
Gui,Checkbox,vMyCheckbox,% "Check Me!"
Gui,Button,gOkButtonPress w50 h25 x80,% "OK"
Gui,gGuiClose w50 h25 x160 y71,% "Cancel"
Gui,Show,Center
return

OkButtonPress:
    Gui,Submit
    if (MyCheckbox)
        MsgBox,% "Checkbox was checked!"
    else
        MsgBox,% "Checkbox wasn't checked!"
    
    UserInput := StrReplace(UserInput,"""","\""")
    Run,% A_ComSpec " /c ""php ""C:\test\engine.php"" ""--query=" UserInput """"
return

GuiClose:
    ExitApp
return
使用

#Persistent (docs) 是为了使脚本在运行时不会立即退出,因为没有热键或任何其他会使脚本不退出的东西一旦代码执行完成。

然后是时候创建GUI了。
如果您是第一次使用AHK guis,还有很多地方可以理解。
尝试保持相关文档页面的打开状态,看看我在做什么。
https://www.autohotkey.com/docs/commands/Gui.htm#New
https://www.autohotkey.com/docs/commands/Gui.htm#Add
https://www.autohotkey.com/docs/commands/Gui.htm#Events
https://www.autohotkey.com/docs/commands/Gui.htm#GuiClose
如果您不了解其中的一部分,只需询问即可。

首先,我添加文本控件,编辑控件和复选框控件,而未指定任何x或y坐标。
这样,AHK会为您照顾好位置,并将它们很好地放置在彼此的下方。
我为两个按钮指定了自己的坐标。如果您只是盲目地这样做,那会有些棘手,但是反复试验会带您到这里,大声笑。
如果您想创建更多精美的guis,而又不想在想像一下头上想要的坐标和宽度/高度时拔出头发,我建议使用例如SmartGuiXp (image)
它将使创建AHK guis更加轻松。

然后,我将gui显示在屏幕中央,让AHK担心它应该具有的宽度/高度,因此我没有指定任何宽度/高度。

此外,用% " "显式指定字符串只是个人喜好,而不是必需的。在我看来,这看起来不错,而不必像传统的AHK一样。

OkButtonPress标签中(顺便说一句,标签是旧版AHK。我会使用函数,但随后我们将不得不担心可变范围,因此我决定不让这个答案更加令人困惑)第一行是
Gui,Submit (docs)
这使gui将控件的内容保存到关联的变量中。
因此,我们的文本输入到UserInput,复选框的状态输入到MyCheckbox

然后我们终于进入运行命令。
我没有解决缺少引号的可能问题。
我只是将其从传统语法更改为现代表达语法。当然,您不需要这样做,并且可以根据需要将其保留为旧式语法。