【发布时间】:2022-01-09 07:20:05
【问题描述】:
我将首先描述我究竟需要什么以及为什么。
我正在库 (dll) 中制作游戏内界面,我需要能够接收和删除消息(阻止目标进程接收它们),具体取决于代码中的不同条件。
除了来自鼠标和键盘的消息,我不需要其他任何东西。为此,有两种方法。找一种可以让我从鼠标和键盘接收消息的钩子,或者在鼠标和键盘上放置两个单独的钩子,但代码会比一个钩子多得多。
我决定采用第一种方式,并在创建窗口的线程的消息上放置一个WH_GETMESSAGE 挂钩。但是,我阻止该消息的尝试失败了。
LRESULT CALLBACK messageHandler(int nCode, WPARAM wParam, LPARAM lParam)
{
return -1; // This works fine with WH_MOUSE or WH_KEYBOARD, but for some reason, with the WH_GETMESSAGE hook, the process still receives a message
}
DWORD WINAPI messageDispatcher(LPVOID thread)
{
hookHandle = SetWindowsHookEx(WH_GETMESSAGE, messageHandler, GetModuleHandle(nullptr), *reinterpret_cast<DWORD*>(thread));
if (!hookHandle)
{
return GetLastError();
}
MSG message{};
while (GetMessage(&message, 0, 0, 0) > 0)
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return 0;
}
我不确定WH_GETMESSAGE 是否适合我。也许更有经验的程序员会告诉我,最好使用两个钩子,例如WH_MOUSE 和WH_KEYBOARD,而不是使用WH_GETMESSAGE。
但是,如果,尽管如此,使用WH_GETMESSAGE 不是一个坏主意,那么请帮我制作它,以便我可以控制进程对某些消息的接收(不允许它们被进程看到) .
【问题讨论】:
-
请帮帮我。我在另一个论坛上已经在 stackoverflow 上问过这个问题两次和三次。
-
"我在另一个论坛上已经在 stackoverflow 上问过这个问题两次和三次" - 如果你没有得到你需要的答案,这可能是一个很好的迹象你可能问错了问题,或者问的方式不对。
-
@500-InternalServerError 鼠标/键盘活动通过线程的消息队列。当从队列中调度时,它们将被转发到一个窗口。
标签: c++ c winapi setwindowshookex