鼠标钩子(关于鼠标钩子使用入门[通俗易懂])

发布时间:2025-12-10 19:13:15 浏览次数:5

关于鼠标钩子使用入门[通俗易懂]-鼠标钩子能不能检测出来

关于鼠标钩子使用入门[通俗易懂]1.MOUSEHOOKSTRUCT鼠标钩子结构体当WH_MOUSE钩子处理的鼠标事件时,该结构包含鼠标信息。typedefstruct{POINTpt;HWNDhwnd;UINTwHitTestCode;ULONG_PTRdwExtraInfo;}MOUSEHOOKS

1. MOUSEHOOKSTRUCT 鼠标钩子结构体
  当WH_MOUSE钩子处理的鼠标事件时,该结构包含鼠标信息。
  typedef struct {
  POINT pt;
  HWND hwnd;
  UINT wHitTestCode;
  ULONG_PTR dwExtraInfo;
  } MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT;

参数:
  pt : POINT结构对象,保存鼠标在屏幕上的x,y坐标
  hwnd: 接收到鼠标消息的窗口的句柄
  wHitTestCode: hit-test值,详细描述参见WM_NCHITTEST消息
  dwExtraInfo: 指定与本消息联系的额外消息

2. WM_NCHITTEST 消息
The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released.
WM_NCHITTEST消息当鼠标移动、按下、松开都会被发送。如果鼠标不被捕获,消息在窗体得到光标之后发出。否则,消息发送到捕获到鼠标的窗体。
xPos = LOWORD(lParam); // 光标的水平位置(X)
yPos = HIWORD(lParam); // 光标的垂直位置(Y)

3. 鼠标消息的关系理解
无标题窗口拖动,我们一般是采用:
响应WM_NCHITTEST消息,返回HTCAPTION来实现。
但是,如果在这同时还要处理鼠标的消息,如WM_LBUTTONDOWN、WM_LBUTTONUP、WM_RBUTTONUP、WM_MOUSEMOVE,你会发现,这些消息都收不到了。

因为你在WM_NCHITTEST中处理了鼠标消息,把他定位成HTCAPTION,也就是鼠标在标题栏上,而标题栏属于非客户区(NC);
非客户区的事件消息都是以WM_NC开头的。也就是说,当你的WM_NCHITTEST返回HTCAPTION时,原来可以用WM_LBUTTONUP处理的消息,你只能用WM_NCLBUTTONUP来处理。
自然是同时处理WM_NCHITTEST和WM_NCRBUTTONUP,而不处理WM_RBUTTONUP

4. 鼠标钩子的使用

5. 参考资料
MOUSEHOOKSTRUCT
http://baike.baidu.com/view/2764699.htm
WM_NCHITTEST消息说明
http://blog.csdn.net/zhuzhubin/archive/2009/07/17/4356825.aspx
WM_NCHITTEST后鼠标消息收不到
http://blog.csdn.net/debehe/archive/2009/08/05/4412959.aspx

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477