我想“保护”某个窗口不被关闭。所以我想挂钩 WM_CLOSE、WM_DESTOY 或 WM_QUIT。这就是我试图这样做的:
LRESULT CALLBACK WindowHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
MSG* msg = (MSG*)lParam;
//if (msg->hwnd == GetForegroundWindow())
{
if (msg->message == WM_CLOSE || msg->message == WM_QUIT || msg->message == WM_DESTROY)
{
//MessageBox(0, "TEST", "", 0);
msg->message = 0;
CallNextHookEx(hMsg, nCode, (WPARAM)NULL, (LPARAM)NULL);
return TRUE;
}
}
}
CallNextHookEx(hMsg, nCode, wParam, lParam);
}
我试过:
- 返回 TRUE 或 FALSE
- 使用 NULL 作为 LPARAM 调用 CallNextHookEx 或将 msg->message 编辑为 0
另外我注意到,如果我挂钩 WH_GETMESSAGE 它不会“阻止”消息循环。但它通过挂钩 WH_CALLWNDPROC 来实现。当 msg->message 等于 WM_CLOSE 时,我通过提示消息框发现了这一点。
预先感谢,问候。