通过SetWindowsHookEx实现跨进程子类化
这些相关的东西,起源于工作中遇到的一个简单的问题:如何在一个对话框,通过程序,按下另一个对话框(另一个程序)上的当前焦点的按钮。
假设控制的对话框叫DlgA,被控制的对话框叫DlgB。
1、原先的设想:
(1)在DlgA里,用FindWindow(NULL,"DlgB"),得到DigB的hWnd;
(2)用CWnd *pWnd = FromHandle(hWnd),得到DlgB的CWnd指针;
(3)pWnd->GetFocus(),得到焦点按键的hWnd;
(4)PostMessage(hWnd,BM_CLICK,0,0);
但是在调试中发现,(3)中,得到的hWnd为0,查到的原因是,在WIN32中,所有的程序所处的内 存空间都是独立的,由于DlgA,DlgB不在同一个空间内,所以这么调用是得不到预想的结果的。
2、解决方法:
查了一些资料,觉得可以用SetWindowsHookEx挂钩子和所谓的跨进程子类化的方法解决。
(1)SetWindowsHookEx:可以将钩子过程和安装钩子程序做在一个动态链接库里,然后SetWindowsHookEx可以将该DLL注入到DlgB的进程空间里。
(2)这样在钩子过程里就可以调用第1点的(2)(3)(4)步,完成预想的功能了。当然也可以用SetWindowLong这些方法来做一些特别的消息响应,只是我要实现的功能比较单一,所以这里并没有这么做。
一些注意的地方:
(1)用VS2005调试,估计由于调试的DLL注入了另一个进程空间,所以在DLL程序里设置断点并不会被触发。
(2)子类化的意思我感觉是:用程序方法,改变一个对象的某些特点,响应等,使对象与原先的定义有所变化。
(3)在DlgB被注入后,用一些进程查看工具,可以看到钩子DLL已被注入到该进程中。我是用CProcess.exe看的,好像很多工具都有类似功能。
(4)在WINCE下,微软不推荐用该函数,但实际上也可以用。
转载于:https://www.cnblogs.com/Salior/archive/2012/09/28/2706705.html
通过SetWindowsHookEx实现跨进程子类化相关推荐
- 用跨进程子类化技术实现对其它进程消息的拦载
大家都知道每个窗口都有默认的窗口函数来进行对窗口消息的处理. 而子类化技术就是替换窗口的窗口函数为自己定义的函数的技术.例如下面的代码: var Form1: TForm1; OldWnd ...
- Android组件化跨进程通信框架Andromeda解析
关于组件化 随着项目结构越来越庞大,模块与模块间的边界逐渐变得不清晰,代码维护越来越困难,甚至编译速度都成为影响开发效率的瓶颈. 组件化拆分是比较常见的解决方案,一方面解决模块间的耦合关系.将通用模块 ...
- 爱奇艺开源的组件化跨进程通信解决方案
/ 今日科技快讯 / 近日,特斯拉首席执行官埃隆·马斯克来到中国上海,亲自向客户交付中国制造的Model 3,并透露了有关Model Y的更多信息,特斯拉股价继续保持着近三个月来的飙涨势头,目 ...
- 关于如何换肤、子类化的解决方案
对于应用程序的换肤及子类化.下面是我尝试过一些方法,以在CAboutDlg中子类化其中的Button为例: 第一种:直接用现成的类 1.自己写一个类class CButtonXP : public C ...
- 跨进程通信,到底用长连接还是短连接
一个完整的软件系统大多数情况下是由多个进程共同协作进行的,哪怕它们在同一台服务器上.所以,进程之间如何进行高效的通信至关重要. 单个应用程序+单个数据库这套基础开发套餐我相信每个人都经历过,甚至在初期 ...
- Android 跨进程通信基础
2019独角兽企业重金招聘Python工程师标准>>> Android跨进程通信基础--Binder, BinderProxy, parcel, parcelable, Stub, ...
- Android的跨进程通信
Android系统的跨进程简介 为什么不能直接跨进程通信? 为了安全考虑,应用之间的内存是无法互相访问的,各自的数据都存在于自身的内存区域内. 如何跨进程通信? 要想跨进程通信,就要找到一个大家都能访 ...
- 跨进程访问(AIDL服务)
我们都知道Service的主要的作用是后台运行和跨进程访问. 关于Service后台运行请查看鄙人的另外一篇文章Service基础 本篇博文主要探讨的是跨进程访问~ 什么是AIDL Android系统 ...
- VB 子类化技术详解
1. 何谓子类化(subclassing) 众所周知,Windows是一个基于消息的系统,消息在Windows的对象之间进行着传递.子类化和Windows的钩子机制存在于消息系统之中,我们可以利用这些 ...
最新文章
- 成都Uber优步司机奖励政策(4月12日)
- moveit!功能包安装问题
- win7服务器端口被占用,高手亲自帮您win7端口被占用的详尽处理要领
- 和lua的效率对比测试_N99 KF94 KN95 真假口罩及 KN90 KN95面罩滤棉过滤效率对比测试...
- 怎么去掉ECSHOP的Powered by ECShop版权信息
- 《SSM框架实战》 整合 Freemarker
- 关于php调用.net的web service 踩过的坑
- EasyUI-在iframe里获取现阶段选中的tab的标题
- linux安装json
- mysql 事务不生效_@Transactional事务不生效的几种解决方案
- u8系统怎么连接服务器,u8客户端连接服务器流程
- 【深度解读】电动自行车新国标对锂电池行业的影响分析
- Excel随机数生成
- 用.NET做动态域名解析
- LC152---乘积最大子数组
- AVD安装XPOSED环境
- input框不允许输入负数
- 人事考试网上报名系统
- maven仓库中的.LastUpdated文件
- 怎么理解VGG-16结构图中的block
热门文章
- 对话混沌创新商学院6期校友:“朋克养生”背后的产业密码
- win10U盘重装无法进行,一直转圈加载,不进入安装界面超过半小时
- 英汉互译 php,美丽的英文诗(英汉互译)
- 时序分析基本概念介绍--Timing Arc
- 启动IDEA时出现error launching idea failed to create jvm的解决办法
- 提高系统开发效率的“银弹”——X-series可视化大规模应用开发工具集
- 图数据库|如何从零到一构建一个企业股权图谱系统
- 桌面上的计算机图片怎么复制,怎么把一张普通的图片复制到EXCEL表格中
- 跨平台应用即将消亡!
- 在WIN2012R2和WIN2016服务器打开网站慢的解决方法