如何在.exe关闭后立即使AutoHotkeys的功能停止工作?

时间:2012-08-15 17:37:10

标签: autohotkey keyboard-hook

我正在测试AutoHotkeys,以阻止用户在应用程序运行时使用Ctrl,Alt和Windows Key。为此,我编译了代码:

LAlt::return
RAlt::return
LControl::return
RControl::return
RWin::Return
LWin::Return

使用AutoHotkeys附带的编译器进入.exe。

我的问题是,通常当我关闭.exe文件时(通过使用TerminateProcess(,)或手动的代码),密钥不会立即释放。例如,Windows Key可能需要10秒才能完全“解锁”并能够再次使用,对我来说这是不可接受的。

所以我有两个问题:

  • 有没有办法解决这个问题?如何在.exe关闭后立即释放密钥?
  • 如果我尝试通过代码获得相同的功能,会有任何改进吗?或者,如果我自己创建钩子,我会遇到与AutoHotkeys相同的问题吗?

谢谢,

Momergil

2 个答案:

答案 0 :(得分:2)

AutoHotkey有一个内置命令ExitApp,用于终止脚本 此示例使 Esc 成为您的终止热键:

Esc::ExitApp

您遇到的延迟似乎与关闭流程的时间有关。 您可以尝试使用#If命令*来使热键成为条件 (即只有在Flag = 1)时才会被阻止 然后,您可以使用OnExit让脚本在ExitApp之前快速更改上下文。当脚本以任何方式退出时调用OnExit子例程(除非它被“结束任务”之类的东西杀死)。您可以使用GoSub命令使用热键调用子例程。

Flag := 1
OnExit, myExit

Esc::GoSub, myExit

#If Flag
LAlt::return
LCtrl::return
x::return
#If

myExit:
Flag := 0
Exitapp

* #If命令需要Autohotkey_L 另一个更详细,但适用于AHK基础的选项是hotkey命令。


另一个选择是让AutoHotkey运行目标应用程序,并在应用程序退出时,AutoHotkey也会退出。这是记事本的一个例子。当用户关闭记事本时,脚本会正常退出。

RunWait, Notepad.exe
ExitApp ; Run after Notepad.exe closes

LAlt::return
RAlt::return
LControl::return
RControl::return
RWin::Return
LWin::Return

答案 1 :(得分:1)

我会使用winactive来禁用这些密钥。在此示例中,为“Evernote”禁用了modyfier键。一旦切换到另一个程序,键就会恢复,当你切换回Evernote时,修改键会再次被禁用。

SetTitleMatchMode, 2 ; Find the string Evernote anywhere in the windows title
#ifWinActive Evernote
    LAlt::return
    RAlt::return
    LControl::return
    RControl::return
    RWin::Return
    LWin::Return
#ifWinActive