0

我正在测试 AutoHotkeys 作为一种在应用程序运行时阻止用户使用 Ctrl、Alt 和 Windows 键的方法。为此,我编译了代码:

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

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

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

所以我有两个问题:

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

谢谢,

莫默吉尔

4

2 回答 2

2

ExitAppAutoHotkey 有一个用于终止脚本的内置命令。
此示例使Esc您的终止热键:

Esc::ExitApp

似乎您遇到的延迟可能与关闭流程所需的时间有关。#If您可以尝试使用command*使热键有条件
(即它们仅在 时被阻止Flag = 1)。
然后,您可以让脚本快速更改之前ExitApp使用的上下文OnExit。当脚本以任何方式退出时调用 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 basic 的选项是hotkey命令。


另一种选择是让 AutoHotkey 运行目标应用程序,并且在应用程序退出时,AutoHotkey 也会退出。这是记事本的示例。当用户关闭记事本时,脚本会优雅地退出。

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

LAlt::return
RAlt::return
LControl::return
RControl::return
RWin::Return
LWin::Return
于 2012-08-15T19:59:53.597 回答
1

我会使用 winactive 禁用这些键。在此示例中,“Evernote”的修饰符键被禁用。一旦你切换到另一个程序,按键就会恢复,而当你切换回 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
于 2012-08-16T08:08:38.780 回答