SetWinEventHook 事件钩子

      相信消息钩子大家听的比较多,消息钩子能够在应用程序处理系统消息之前将其截获,提前处理并可以决定是否继续将消息往下传送,有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等等,要截获这些事件可以使用SetWinEventHook,它的原型如下:

HWINEVENTHOOK WINAPI SetWinEventHook(
  __in  UINT eventMin,
  __in  UINT eventMax,
  __in  HMODULE hmodWinEventProc,
  __in  WINEVENTPROC lpfnWinEventProc,
  __in  DWORD idProcess,
  __in  DWORD idThread,
  __in  UINT dwflags
);

    详细说明见MSDN:http://msdn.microsoft.com/en-us/library/dd373640(VS.85).aspx,其中第四个参数类似消息钩子一样是一个回调函数,说明见:http://msdn.microsoft.com/en-us/library/dd373885(VS.85).aspx

    SetWinEventHook的第1,2个参数可以标识一个范围,表示截获哪个范围类的事件,因为实际上在win32里面这些事件的ID都是直接用defined直接从小到大定义的,有两个宏分别表示最小的事件ID和最大的事件ID(EVENT_MIN和EVENT_MAX),如果你分别传这两个参数给eventMin和eventMax则可以截获所有的事件,具体可以截获的事件可以去MSDN查询:http://msdn.microsoft.com/en-us/library/dd318066(VS.85).aspx

    要停止HOOK,请调用UnhookWinEvent,原型为:

BOOL WINAPI UnhookWinEvent(
  __in  HWINEVENTHOOK hWinEventHook
);

    观察回调函数的参数,可以使用API AccessibleObjectFromEvent来使用微软的MS Active Accessibility 接口技术,获得IAccessible 接口,可以使用一些比较有趣的功能,通过程序来访问UI元素等等,不过我也是刚刚了解到这个Accessibility 接口技术,有空再看看具体情况。^_^

    事件钩子也有进程内和进程外事件钩子,相比消息钩子不同的是你收到一个事件发生的消息后,并不能控制拦截该事件不再传递事件。

    代码说明:

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SetWinEventHook是一个Windows API函数,可以用来监听系统窗口事件。要使用它来捕获鼠标事件,需要按照以下步骤操作: 1. 定义一个回调函数,用来处理鼠标事件。这个回调函数需要满足一定的格式。 2. 使用SetWinEventHook函数注册回调函数,并设置要监听的事件类型(如鼠标按下、鼠标移动等)。 3. 在主程序中,调用GetMessage或者PeekMessage函数来等待并处理鼠标事件。 4. 在程序结束时,使用UnhookWinEvent函数来取消注册的回调函数。 需要注意的是,使用SetWinEventHook需要在程序中加入user32.dll,还需要在程序中加入事件处理函数,并且需要调用GetMessage或者PeekMessage函数来等待并处理鼠标事件. ### 回答2: SetWinEventHook函数是Windows系统提供的一个函数,可以用于在程序中捕获和处理各种事件,包括鼠标事件。可以按照以下步骤来使用SetWinEventHook函数来捕获鼠标事件: 1. 首先,需要导入Windows API库文件,包括user32.dll。 2. 声明SetWinEventHook函数的原型,可以在Windows API文档中找到相应的函数声明。 3. 创建一个回调函数,用于处理鼠标事件的回调函数。回调函数的原型由SetWinEventHook函数的参数所决定,具体可以参考Windows API文档。 4. 调用SetWinEventHook函数来注册鼠标事件钩子。在SetWinEventHook函数中,需要指定需要捕获的事件类型和回调函数。 5. 当鼠标事件发生时,回调函数会被触发。在回调函数中,可以根据鼠标事件的类型进行相应的处理,比如获取鼠标的位置、点击的按钮等信息。 需要注意的是,使用SetWinEventHook函数来捕获鼠标事件需要具备较高的权限,因此在使用时需要以管理员权限运行程序。 以上就是使用SetWinEventHook函数来捕获鼠标事件的大致步骤。具体实现时需要根据实际情况进行相应的调整和处理。 ### 回答3: SetWinEventHook函数可以被用来捕获鼠标事件。以下是具体的步骤: 首先,需要使用SetWinEventHook函数来注册事件。该函数的第一个参数是事件类型,可以设置为EVENT_OBJECT_FOCUS或EVENT_OBJECT_STATECHANGE,具体取决于需要捕获的鼠标事件。第二个参数是事件发生时的回调函数,该回调函数将在事件发生时被触发。第三个参数是监视的进程ID,可以设置为0以监视所有进程。第四个参数是监视的线程ID,可以设置为0以监视所有线程。最后一个参数是传递给回调函数的回调数据。 然后,当回调函数被触发时,可以在回调函数中获取有关鼠标事件的信息。可以使用GetCursorPos函数获取鼠标的屏幕坐标,使用GetAsyncKeyState函数获取鼠标的按键状态。 最后,为了确保不再监视事件,必须调用UnhookWinEvent函数来取消注册事件。该函数的参数是之前注册事件时返回的钩子句柄。 总结起来,通过在SetWinEventHook函数中注册鼠标事件类型和回调函数,然后在回调函数中获取鼠标事件的信息,最后通过UnhookWinEvent函数取消事件的注册,我们可以成功地捕获鼠标事件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值