代码如下:
hHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseHookProc, GetModeleHandle(NULL), GetCurrentThreadId());
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
switch (wParam)
{
case WM_NCLBUTTONDOWN:
{
}
break;
case WM_LBUTTONUP:
{
}
break;
case WM_NCHITTEST:
{
}
break;
default:
break;
}
} return CallNextHookEx(hHook, nCode, wParam, lParam);
}WM_NCLBUTTONDOWN、WM_LBUTTONUP这二个消息收得到,为什么WM_NCHITTEST确收不到呢?这是啥原因,应该怎么做?
hHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseHookProc, GetModeleHandle(NULL), GetCurrentThreadId());
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
switch (wParam)
{
case WM_NCLBUTTONDOWN:
{
}
break;
case WM_LBUTTONUP:
{
}
break;
case WM_NCHITTEST:
{
}
break;
default:
break;
}
} return CallNextHookEx(hHook, nCode, wParam, lParam);
}WM_NCLBUTTONDOWN、WM_LBUTTONUP这二个消息收得到,为什么WM_NCHITTEST确收不到呢?这是啥原因,应该怎么做?
这种消息能被Hook吗?
WM_NCHITTEST是直接调用 消息处理过程的
能具体讲一下么?
消息处理过程? 意思是指不能被Hook截取么?
但我试了使用WH_CALLWNDPROC 拖动窗口标题拦时,没有收到任何鼠标消息及WM_NCHITTEST消息。
WNDPROC oldProc;LRESULT CALLBACK HookWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
LRESULT rc = CallWindowProc(oldProc, hWnd, uMsg, wParam, lParam );
if (uMsg == WM_NCHITTEST)
{
OutputDebugString("Hook到消息\n");
} if (uMsg == WM_NCDESTROY)
UnhookWindowsHookEx(m_hHook); return rc;
}LRESULT CALLBACK SetHook(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode == HC_ACTION)//Checks if an action is beeing active
{ CWPSTRUCT* pwp = (CWPSTRUCT*)lParam;
if (pwp->message == WM_INITDIALOG)
oldProc=(WNDPROC)SetWindowLong(pwp->hwnd,GWL_WNDPROC,(LONG)HookWndProc);
}
return CallNextHookEx(m_hHook,nCode,wParam,lParam);
}//安装钩子
m_hHook = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)SetHook,NULL,GetCurrentThreadId());
不过,绑定了HookWndProc, 我想取消这个消息回调函数该怎么做。
Return Value
If the function succeeds, the return value is the previous value of the specified 32-bit integer.