winapi - 在 WIN32 中挂接

  显示原文与译文双语对照的内容

只要鼠标在非工作区的关闭按钮上,就会立即关闭窗口。 在SetWindowsHookEx中使用WH_GETMESSAGE捕获 wm_ncmousemove,然后使用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; 
 }

时间: 原作者:

使用 wParam=SC_CLOSE 发送 WM_CLOSE 或者 WM_SYSCOMMAND

WM_CLOSEWM_SYSCOMMAND/SC_CLOSE 要求窗口关闭。 WM_DESTROY 通知窗口它已经关闭。 将"你已经被关闭了"表示为窗口不会使它的关闭。

原作者:
...