我想'保護'某個窗口關閉。所以我想掛鉤WM_CLOSE,WM_DESTOY或WM_QUIT。而這正是我試圖這樣做的:鉤窗口消息循環WM_CLOSE
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
- 調用CallNextHookEx方法用NULL作爲LPARAM或 編輯MSG->消息爲0
另外我注意到,如果我鉤住WH_GETMESSAGE它不'阻止'消息循環。但它通過掛鉤WH_CALLWNDPROC來實現。當msg->消息等於WM_CLOSE時,我通過提示消息框發現了這一點。
在此先感謝, 此致敬禮。
因此,如果Windows發送您的應用程序的消息關閉它,你會忽略它嗎? – ZippyV
@ZippyV是的,我在「保護」一個特定的hWnd。我想保護一個窗口不點擊關閉按鈕。我不知道我需要阻止WM_QUIT和WM_DESTROY。但我只是試了一下。 – joell
'WM_DESTROY'只是通知你窗口即將被銷燬('DestroyWindow()'已被調用),沒有辦法阻止它。 'WM_QUIT'通知當前的消息循環將被退出,通常不會發送到窗口,而是發送到線程(通常使用'PostQuitMessage()')。不過:當用戶單擊_close_按鈕(或按下Alt-F4)時會調用它,而默認實現只調用DestroyWindow()。 – rodrigo