特定のウィンドウが閉じないように「保護」したかったのです。そこで、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 を返す
- LPARAM として NULL を指定して CallNextHookEx を呼び出すか、msg->message を 0 に編集する
また、WH_GETMESSAGE をフックしても、メッセージ ループが「ブロック」されないことに気付きました。ただし、WH_CALLWNDPROC をフックすることでこれを行います。これは、msg->message が WM_CLOSE の場合にメッセージ ボックスを表示することで発見しました。
よろしくお願いします。