C++ 如何让程序在全局范围内检测我的击键?

标签 c++ windows

我正在制作一个程序,我希望它在我按下 F6 时检测到,然后调用 if 语句。这应该在全局范围内起作用,而不仅仅是在我专注于我的程序时。我该怎么做?

最佳答案

由于您使用的是 Windows,因此可以使用 SetWindowsHookEx 设置键盘 Hook 使用 WH_KEYBOARDWH_KEYBOARD_LL。然后在匹配的 KeyboardProc 中处理按键或 LowLevelKeyboardProc功能,并过滤掉任何 F6 按键。请务必调用 CallNextHookEx对于任何非 F6 按键,因为未能调用 CallNextHookEx 将“吃掉”键盘消息。

您需要在 DLL 中执行此操作;您将需要 DLL 的 32 位和 64 位版本,因为 32 位应用只能注入(inject) 32 位 DLL,而 64 位应用只能注入(inject) 64 位 DLL。


你也可以尝试一些基于 RegisterHotKey 的东西.这比 Hook 更安全,尽管如果另一个应用程序调用 RegisterHotKey 并在您调用之前指定 F6,您将无法注册热键。

因为你不想在你的热键上有任何额外的修饰符,调用看起来像这样:

RegisterHotKey(myHwnd, 1, 0, VK_F6);

其中 myHwnd 是您窗口的 HWND(如果您希望在消息循环中处理 WM_HOTKEY 消息,则可以选择 nullptr) ,1 是热键的标识符,可以是您喜欢的任何 int,0 指定没有修饰键(Ctrl、Alt、Windows 键等),而 VK_F6 是 F6 的虚拟键码。

关于C++ 如何让程序在全局范围内检测我的击键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23327034/

相关文章:

c++ - 在非常大的算术系列中添加数字的最快方法?

c++ - Makefile.am 的 EXTRA_DIST 重复目录名

c++ - LNK2019 构造函数/析构函数使用 C++ Dll

windows - 如何根据操作系统系列具有不同的依赖关系

windows - 如何在退出前等待所有批处理文件完成?

python - Python 的图标覆盖问题

c++ - OpenCV 函数来计算类似于 MATLAB 产品的数组元素的乘积?

c++ - 抛出静态类型的理由?

windows - 我应该使用哪个版本的 MSXML?

c++ - 模板和继承 : "cannot convert" in initialization