Зацепка в win32 - PullRequest
       4

Зацепка в win32

1 голос
/ 04 мая 2009

Я хочу, чтобы любое окно закрывалось, как только мышь зависла на кнопке закрытия в не клиентской области. Я пытался перехватить wm_ncmousemove, используя WH_GETMESSAGE в SetWindowsHookEx, а затем используя SendMessage для отправки сообщения WM_DESTROY в указанное окно, но окно не закрывается. Любая помощь ????

LRESULT CALLBACK CallWndProc(int code, WPARAM wParam, LPARAM lParam)

{

MSG* msg = (MSG*) lParam;
if(code == HC_ACTION)
{
    if(msg->message == WM_NCMOUSEMOVE)
    {
        if(msg->wParam == HTCLOSE)
        {
            SendMessage(hwndTarget, WM_DESTROY, wParam, lParam);
        }
    }
}

return CallNextHookEx(g_hkMsg, code, wParam, lParam);
}

INT WINAPI InstallW(HWND hwnd, HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow)
{

DWORD dwTarget = 0;
POINT point;

GetCursorPos(&point);

hwndTarget = WindowFromPoint(point);
dwTarget = GetWindowThreadProcessId(hwndTarget, NULL);
g_hkMsg = SetWindowsHookEx(WH_GETMESSAGE, CallWndProc, g_hInstance, 0);
if(g_hkMsg)
{
    MessageBox(NULL, L"Message hook installed, press OK to uninstall.", L"HLHookTest", MB_ICONEXCLAMATION);
    UnhookWindowsHookEx(g_hkMsg);
}
else
    MessageBox(NULL, L"Hook installation failed.", L"HLHookTest", MB_ICONERROR);

return 0;   
 }

1 Ответ

2 голосов
/ 04 мая 2009

Отправьте WM_CLOSE или WM_SYSCOMMAND вместо wParam=SC_CLOSE.

WM_CLOSE и WM_SYSCOMMAND / SC_CLOSE попросите закрыть окно. WM_DESTROY сообщает окну, что оно закрыто. Сказать «Вы были закрыты», чтобы окно не закрыло его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...