gpt4 book ai didi

c++ - Windows API 全局钩子(Hook)的无限范围

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:51:36 26 4
gpt4 key购买 nike

我正在尝试制作一个 C++ 应用程序来处理 PC 上运行的每个应用程序上的键盘事件(实际上,只是想“捕捉”用户键入的一些短语)。我想要做的事情的基础是:

#define _WIN32_WINNT 0x0500

#include <iostream>
#include <windows.h>
using namespace std;

HHOOK hHook;

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
printf("Activated\n");
return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

现在,这个是全局性的,但当我发现当我运行特定应用程序时它没有“听到”我的键盘输入时,我仍然卡住了。据我发现,问题一定是所需的应用程序与我的应用程序不属于同一个桌面(因为此回调函数对于我的应用程序桌面是全局的)。我试图实现一些桌面切换技巧,但我真的不熟悉 Windows API,我所有的努力很快都失败了。 MSDN 引用不足以作为教程。有什么方法可以让我的应用程序能够从我的计算机上的任何地方捕获键盘输入?

在此先感谢您的帮助/提示!

最佳答案

一个全局钩子(Hook)必须在一个DLL中实现,这样它就可以钩到多个进程中。如果要支持 64 位系统,则必须实现单独的 32 位和 64 位版本。 SetWindowsHookEx() 的文档说明了很多。

不使用全局钩子(Hook),而是尝试使用 Raw Input。使用 RegisterRawInputDevices() 注册对键盘的兴趣,然后处理击键的 WM_INPUT 消息。

关于c++ - Windows API 全局钩子(Hook)的无限范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15454042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com