SetWinEventHook 事件钩子(有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等)good
相信消息钩子大家听的比较多,消息钩子能够在应用程序处理系统消息之前将其截获,提前处理并可以决定是否继续将消息往下传送,有些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 接口技术,有空再看看具体情况。^_^
事件钩子也有进程内和进程外事件钩子,相比消息钩子不同的是你收到一个事件发生的消息后,并不能控制拦截该事件不再传递事件。
代码说明:
- ……
- void CSetWinEventHookDlg::OnOK()
- {
- if (NULL == m_hHook)
- {
- m_hHook = ::SetWinEventHook(
- EVENT_MIN,
- EVENT_MAX,
- NULL,
- WinEventsProc, 0, 0,
- WINEVENT_OUTOFCONTEXT);
- }
- }
- void CSetWinEventHookDlg::OnCancel()
- {
- if (m_hHook)
- {
- ::UnhookWinEvent(m_hHook);
- m_hHook = NULL;
- }
- }
- ……
- VOID CALLBACK WinEventsProc(HWINEVENTHOOK hWinEventHook, DWORD dwEvent, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime )
- {
- switch(dwEvent)
- {
- case EVENT_SYSTEM_SWITCHSTART:
- CSetWinEventHookDlg::ChangUI(_T("Alt+Tab Start"));
- break;
- case EVENT_SYSTEM_SWITCHEND:
- CSetWinEventHookDlg::ChangUI(_T("Alt+Tab End"));
- break;
- case EVENT_SYSTEM_MENUPOPUPSTART:
- CSetWinEventHookDlg::ChangUI(_T("PopMenu Start"));
- break;
- case EVENT_SYSTEM_MENUPOPUPEND:
- CSetWinEventHookDlg::ChangUI(_T("PopMenu End"));
- break;
- }
- }
SetWinEventHook 事件钩子(有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等)good的更多相关文章
- outlook 2016 for windows 每次刷新发送接收邮件会弹出登陆界面
Q: outlook2016 for windows 每次刷新发送接收邮件会弹出登陆界面,office365 ProPlus 都是正常激活了,Word 和Excel都不存在此类问题 A: 排除用户的o ...
- Windows下Java调用BAT批处理不弹出cmd窗口
常规Windows下Java调用BAT方式肯定会弹出cmd窗口 Runtime.getRuntime().exec("cmd.exe /C start D:\\test.bat") ...
- 关于windows 下每次打开IE 8都弹出欢迎使用Internet Explorer 8 弹窗的关闭方法
今天笔者在安装完windows 操作系统后,发现了一个问题,即每次打开IE 8浏览器,都会弹出一个欢迎界面: 弹窗标题为:设置windows Internet Explorer,具体内容如下图所示: ...
- windows git pull或者push代码时弹出安全框解决办法
目录 1.打开控制面板->凭据管理器>删除已有的git凭证 2.新增一个凭证 @ 如果报如下错误: 1.打开控制面板->凭据管理器>删除已有的git凭证 2.新增一个凭证 网络 ...
- javaScript事件(二)事件处理程序
一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 前面提到,事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.响应 ...
- Android 另类方法监听软键盘的弹出收起事件
http://www.cnblogs.com/csonezp/p/5065624.html 最近做的项目碰到个问题,a界面是fragment+recyclerview,b界面带个edittext,并且 ...
- 第二十七课:滚轮事件,mouseenter与mouseleave事件的修复
滚轮事件 jQuery核心库没有对mousewheel事件的差异性进行处理,但作为一个常用的事件,本文讲解一下. mousewheel事件只有火狐浏览器不支持.mousewheel用于取得滚动距离的属 ...
- Jquery EasyUI中treegrid的中右键菜单和一般按钮同时绑定事件时的怪异事件
做个项目使用jquery easyui来做前端,也许是对此不是很熟悉,总是发现一些不可理解的事件. 主要源代码如下: <script type="text/javascript&qu ...
- JS中事件绑定函数,事件捕获,事件冒泡
1 事件绑定:事件与函数绑定以及怎么取消绑定 1.1 元素.onclick这种形式,如下: <div id="div1">aaa</div> <scr ...
随机推荐
- 常见的面试C#技术题目
遍历查询窗体界面的textbox为空值 ? foreach (System.Windows.Forms.Control control in this.Controls) { ...
- Jdbc连接MySQL 8时报错“MySQLNonTransientConnectionException: Public Key Retrieval is not allowed”
一.问题 因停电检修,今天重启服务器后,再启动jboss就报错"MySQLNonTransientConnectionException: Public Key Retrieval is n ...
- 看看是不是你想要的:pycharm永久激活!!!
pycharm是很强大的开发工具,但是每次注册着实让人头疼.网络上很多注册码.注册服务器等等.但都只是一年或者不能用:为次有如下解决方案.亲测有效!!! 如果想让pycharm永久被激活,比如截止日到 ...
- padding百分百值是相对谁的百分比
先看代码 <head> <meta charset="UTF-8"> <title>Document</title> <sty ...
- Bridge 、 Adapter 和 Facade 的区别
Bridge和Adapter是没有关系的,而和Facade比较象,但在我的经验中更多的时候是会混淆Bridge和adapter而不是Facade,这里详细的列出三个模式的比较. 一. 定义: 1.Fa ...
- ASP.NET Page执行顺序(ASP.NET生命周期)
此部分说明的生命周期只有部分: ---引用MSDN 阶段 说明 页请求 页请求发生在页生命周期开始之前.用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在 ...
- 各种工具的使用 tricks
1. 搜狗搜索引擎 因为搜狗与腾讯的合作关系,搜狗搜索引擎提供了"微信"的搜索选项,可直接定位到相关文章,或者公众号. weixin.sougou.com 2. PyCharm P ...
- WPF-- 合并资源字典
原文:WPF-- 合并资源字典 1. 合并多个外部资源字典成为本地字典 语言 XAML 示例代码 <Page.Resources> <ResourceDicti ...
- Opencv中K均值算法(K-Means)及其在图像分割中的应用
K均值(K-Means)算法是一种无监督的聚类学习算法,他尝试找到样本数据的自然类别,分类是K由用户自己定义,K均值在不需要任何其他先验知识的情况下,依据算法的迭代规则,把样本划分为K类.K均值是最常 ...
- A Byte of Python (for Python 3.0) 下载
在线阅读:http://www.swaroopch.org/notes/Python_en:Table_of_Contents 英文版 下载地址1:http://files.swaroopch.com ...