程序运行没有任何问题,除了非客户区域的消息,其他的都能捕捉到,WM_LBUTTONDOWN也可以在其他窗口的标题栏上捕捉到。
但现在我想判断鼠标是否在标题栏上点击而不是随意的点击,怎么都捕捉不到WM_NCLBUTTONDOWN消息。MSDN上说这个消息会被所在窗口的进程所捕获,没看明白怎么回事。望指点一下。MouseHookProcedure = new HookProc(MouseHookProc);
IntPtr pInstance = Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().ManifestModule);
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, (HookProc)MouseHookProcedure, pInstance, 0);
if (hMouseHook == 0)
{
MessageBox.Show("SetWindowsHookEx(Mouse) Failed");
return;
}
这里有个过去的帖子,里面的问题和我一样,虽然问题解决了却没有答案,郁闷死。
http://topic.csdn.net/t/20010722/15/204237.html#r_1299772
但现在我想判断鼠标是否在标题栏上点击而不是随意的点击,怎么都捕捉不到WM_NCLBUTTONDOWN消息。MSDN上说这个消息会被所在窗口的进程所捕获,没看明白怎么回事。望指点一下。MouseHookProcedure = new HookProc(MouseHookProc);
IntPtr pInstance = Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().ManifestModule);
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, (HookProc)MouseHookProcedure, pInstance, 0);
if (hMouseHook == 0)
{
MessageBox.Show("SetWindowsHookEx(Mouse) Failed");
return;
}
这里有个过去的帖子,里面的问题和我一样,虽然问题解决了却没有答案,郁闷死。
http://topic.csdn.net/t/20010722/15/204237.html#r_1299772
switch(wParam)
{
case WM_NCLBUTTONDOWN:
}
public int MouseHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
if (nCode < 0)
{
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
} //MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
//MyMouseHookStruct.pt.x;
//MyMouseHookStruct.pt.y;
//MyMouseHookStruct.mouseData
switch (wParam)
{
case WM_LBUTTONDOWN:
break;
case WM_LBUTTONUP:
break;
case WM_MOUSEMOVE:
break;
default: break;
}
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}
MessageBox.Show("Done!");
break;