【发布时间】:2018-01-19 18:06:34
【问题描述】:
我对 Hook-Stuff 很陌生,我正在努力学习如何使用它。当我学习新东西时,我通常会从 Internet 上复制代码并查看它是否有效——如果可以,我会详细介绍并搜索所有内容。因此,对于我尝试过的所有代码,我都有同样的问题。他们停止在GetMessage() 函数上工作。我正在使用 Visual Studio - 我对其进行了调试,当它到达函数时,它什么也不做,只是停留在它上面。
我尝试了几个代码 - 例如这个:
HMODULE lib = LoadLibrary("C:\\Users\\A\\Desktop\\Dll1.dll");
if (lib) {
HOOKPROC procedure = (HOOKPROC)GetProcAddress(lib, "_procedure@12");
if (procedure)
hook = SetWindowsHookEx(WH_CALLWNDPROC, procedure, lib, 0);
else
printf("Can't find function in dll!\n");
}
else
printf("Can't find dll!\n");
if (hook)
printf("Hook installed properly!\n\n");
MSG message;
while (GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
FreeLibrary(lib);
UnhookWindowsHookEx(hook);
它打印“钩子安装正确!”什么都不做!代码来自http://www.rohitab.com/discuss/topic/41238-global-hooks-to-intercept-windows-messages/
【问题讨论】:
-
GetMessage是一个阻塞调用。为什么你没想到它会阻止? -
他们停止在 GetMessage() 函数上工作。 - 你在这个下面是什么意思?
-
致反对者:是的,这个问题有点凌乱,代码可能不是很简单,但从根本上说,这似乎是一个真实的、可以回答的问题。一个好的答案会说 GetMessage 是一个阻塞调用,解释这意味着什么,并描述如何发送一些可能解除阻塞的消息。这似乎对未来的读者有用。