我正在测试AutoHotkeys,以阻止用户在应用程序运行时使用Ctrl,Alt和Windows Key。为此,我编译了代码:
LAlt::return
RAlt::return
LControl::return
RControl::return
RWin::Return
LWin::Return
使用AutoHotkeys附带的编译器进入.exe。
我的问题是,通常当我关闭.exe文件时(通过使用TerminateProcess(,)或手动的代码),密钥不会立即释放。例如,Windows Key可能需要10秒才能完全“解锁”并能够再次使用,对我来说这是不可接受的。
所以我有两个问题:
谢谢,
Momergil
答案 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