您可以在运行时使用Hotkey 命令创建热键。
要在 gui 中选择热键,最简单(但不是最好)的选项是 hotkey control。
它肯定是最简单的一种,对最终用户也很方便,但它不支持普通热键以外的任何东西。要获得更好的方法,您需要一个自定义方法。
This 是我通过 Google 搜索找到的第一个自定义的。我自己没用过,但它可能是好东西。
您也可以使用一个非常简单但功能强大的自定义控件,它只是一个Edit 控件。如果您希望您的最终用户足够聪明,可以输入 !F1、+#k、d & o 或其他任何内容,则效果很好。
无论如何,我将在这里演示内置热键控件的用法。如果您想自己弄清楚,请立即停止阅读。
首先,创建 gui 并将一个变量和一个 g-label 关联到热键控件。
不过,我将使用函数而不是 label,但我不喜欢编写旧版 AHK。
Gui, Add, Hotkey, % "x50 y25 w90 h30 vChosenHotkey gHotkeyChanged"
Gui, Show, % "w200 h100"
Return
那么就需要定义g-labelHotkeyChanged了,我就用函数代替label,如上所述。
HotkeyChanged()
{
global ChosenHotkey
Gui, Submit, NoHide
Hotkey, % ChosenHotkey, MyHotkey, On
}
而且在使用函数时,您必须担心作用域,这就是指定 global ChosenHotkey 的原因。
在那里我告诉函数我将使用在其范围之外定义的变量。
如果您还不知道作用域,并且还不想了解它们,您可以编写旧版 AHK 并使用标签,然后忘记这一切。
要了解一般编程中的作用域,您可能可以从 Google 中找到一些不错的东西。
为了在 AHK 中了解它们,我在相关文档页面上有一个关于它们的先前答案 here 和 here's。
然后我让脚本用Gui, Submit 更新其关联变量,您似乎已经知道这一点。
然后我得到Hotkey 命令。
第一个参数是要使用的热键,它存储在ChosenHotkey 变量中。
第二个参数是标签/函数名称,或函数对象。我将使用函数名称MyHotkey。
在第三个参数中,On 被指定为打开热键并可能替换之前的任何热键。
那么需要定义函数或标签MyHotkey:
MyHotkey()
{
MsgBox, % "Hotkey pressed!"
}
就是这样。
如果您想保存之前使用的热键,然后在脚本重新启动时再次使用它,有很多选项,所有这些基本上都归结为将热键保存到某个文件的想法。
这是完整的脚本:
Gui, Add, Hotkey, % "x50 y25 w90 h30 vChosenHotkey gHotkeyChanged"
Gui, Show, % "w200 h100"
return
HotkeyChanged()
{
global ChosenHotkey
Gui, Submit, NoHide
Hotkey, % ChosenHotkey, MyHotkey, On
}
MyHotkey()
{
MsgBox, % "Hotkey pressed!"
}
GuiClose()
{
ExitApp
}