我的钩子不起作用
My hooking doesn't work
我在我的GUI应用程序中设置了一个钩子。我想用WH_CBT钩子捕获WM_DESTROY消息,但它似乎不起作用。
...
HWND ghWnd = NULL;
HHOOK ghHook = NULL;
...
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
...
SetHook();
....
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
...
}
...
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
...
case WM_DESTROY:
UnHook();
PostQuitMessage(0);
break;
...
}
LRESULT WINAPI HookProc(int Id, DWORD wParam, DWORD lParam)
{
if ( Id == WM_DESTROY )
{
MessageBoxA(NULL, "I got it", NULL, 0);
}
return CallNextHookEx(ghHook, Id, wParam, lParam);
}
void SetHook()
{
ghHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)HookProc, hInst, GetCurrentThreadId());
if ( ghHook != NULL )
MessageBox(ghWnd, L"Hooked", L"Hook!", 0 );
else
MessageBox(ghWnd, L"Unable to hook", L"Hook!", 0 );
}
void UnHook()
{
if ( ghHook != NULL )
{
UnhookWindowsHookEx(ghHook);
MessageBoxA(ghWnd, "Unhooked", NULL, 0);
}
}
当我运行应用程序时,当我点击X按钮(窗口右上角的X符号)时,我看到消息"钩上"answers"未钩上"。
但是我错过了HookProc函数中的消息。
谁能给我解释一下为什么?
阅读文档。WH_CBT
钩子回调中的Id
永远不会是WM_DESTROY
。当一个窗口即将被破坏时,Id
将改为HCBT_DESTROYWND
。
如果想捕获实际的WM_DESTROY
消息,请使用WH_CALLWNDPROC
钩子代替。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 编译在我的 Mac 上工作,但在集群 (Linux) 上不起作用
- 为什么我的数组双精度函数不起作用?
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- C++ - 块不移动,我的数组不起作用
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- EOF有更安全的替代方案吗?它在我的情况下不起作用
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- binary_search() 函数在我的函数体中不起作用
- 为什么我的打印功能不起作用?链表
- 为什么我的 arduino 按钮在 0 和 1 以外的端口上不起作用?
- 为什么我的数组或函数不起作用?
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- 我有一个应该打印数组的函数,但由于某种原因它不起作用
- 当我的阵列达到一定大小时,Qt 不起作用
- 包括不起作用C 的文件
- 我的加载图像不起作用 - 我需要知道为什么