什么是键盘钩子?

What is keyboard hook?

我正在阅读 Autohotkey 的文档,然后我无法理解短语 'keyboard hook' 或 'mouse hook' 的含义。

这是正文:

"$ 前缀对鼠标热键没有影响,因为它们总是使用鼠标钩子。它对已经需要键盘钩子的热键也没有影响"

URL: https://www.autohotkey.com/docs/Hotkeys.htm

1 - 一个 Keyboard HookMouse Hook 这意味着:你可以 monitor/receive 所有键盘按键值或您监控所有鼠标按钮按下值

注意:您需要使用命令代码#InstallKeybdHook来启用监视器

对于鼠标挂钩,您需要使用命令代码#InstallMouseHook

试试这个 AHK 代码:

Example.ahk

#SingleInstance force
#InstallKeybdHook

$^c::
send ^c
send {f5}
return

esc::exitapp

2 - $ 前缀意味着您可以使用热键 ($^c::) 进入相同的热键代码 (发送 ^c)。

如何监控所有键盘按键值:

1 - 转到系统托盘。(Autohotkey 图标)

2 - 然后单击鼠标右键。

3-然后去打开。

4 - 然后单击鼠标左键。

5 - 然后点击 Ctrl+c

6 - 现在您将看到 键盘挂钩 你点击了。

注意:要监视所有键盘按键值,您需要手动按下 (F5) 键(刷新)

热键类型(在自动热键中)

一个。注册

  • reg: 热键是通过操作系统的RegisterHotkey()函数实现的。
  • reg(no): 与上面相同,除了这个热键是无效的(由于不受支持、禁用或暂停)。

RegisterHotKey 函数(winuser.h)
from microsoft

BOOL RegisterHotKey(
  [in, optional] HWND hWnd,
  [in]           int  id,
  [in]           UINT fsModifiers,
  [in]           UINT vk
);

b。挂钩

  • k-hook:热键是通过 keyboard hook.
  • 实现的
  • m-hook: 热键是通过鼠标钩子实现的
  • 2-hooks:热键需要上面提到的两个 hooks

keyboard hook

监控击键,目的是激活:

  1. hotstrings
  2. RegisterHotkey 不支持键盘热键
  3. 它还支持一些其他功能,例如输入命令

使用键盘钩子时

here says:
最近注册的钩子 首先被调用。
最近启动的脚本不一定优先,因为挂钩热键总是优先于已注册的热键
AutoHotkey 在以下情况下使用钩子:

  1. 指示使用它(#UseHook 或 $),
  2. 如果脚本使用 #IfWin
  3. 则自动
  4. 如果热键无法注册

进一步参考:

SetWindowsHookEx

https://docs.microsoft.com/en-us/windows/win32/winmsg/about-hooks

为了利用特定类型的挂钩,开发人员提供了一个挂钩过程并使用 SetWindowsHookEx 函数将其安装到与挂钩关联的链

SetWindowsHookExA函数(winuser.h)

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexa?redirectedfrom=MSDN

关于 C# 的类似问题:

RegisterHotKeys and global keyboard hooks?

一个

https://www.autohotkey.com/boards/viewtopic.php?t=68550