这些相关的东西,起源于工作中遇到的一个简单的问题:如何在一个对话框,通过程序,按下另一个对话框(另一个程序)上的当前焦点的按钮。

  假设控制的对话框叫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实现跨进程子类化相关推荐

  1. 用跨进程子类化技术实现对其它进程消息的拦载

    大家都知道每个窗口都有默认的窗口函数来进行对窗口消息的处理.   而子类化技术就是替换窗口的窗口函数为自己定义的函数的技术.例如下面的代码: var   Form1: TForm1;   OldWnd ...

  2. Android组件化跨进程通信框架Andromeda解析

    关于组件化 随着项目结构越来越庞大,模块与模块间的边界逐渐变得不清晰,代码维护越来越困难,甚至编译速度都成为影响开发效率的瓶颈. 组件化拆分是比较常见的解决方案,一方面解决模块间的耦合关系.将通用模块 ...

  3. 爱奇艺开源的组件化跨进程通信解决方案

    /   今日科技快讯   / 近日,特斯拉首席执行官埃隆·马斯克来到中国上海,亲自向客户交付中国制造的Model 3,并透露了有关Model Y的更多信息,特斯拉股价继续保持着近三个月来的飙涨势头,目 ...

  4. 关于如何换肤、子类化的解决方案

    对于应用程序的换肤及子类化.下面是我尝试过一些方法,以在CAboutDlg中子类化其中的Button为例: 第一种:直接用现成的类 1.自己写一个类class CButtonXP : public C ...

  5. 跨进程通信,到底用长连接还是短连接

    一个完整的软件系统大多数情况下是由多个进程共同协作进行的,哪怕它们在同一台服务器上.所以,进程之间如何进行高效的通信至关重要. 单个应用程序+单个数据库这套基础开发套餐我相信每个人都经历过,甚至在初期 ...

  6. Android 跨进程通信基础

    2019独角兽企业重金招聘Python工程师标准>>> Android跨进程通信基础--Binder, BinderProxy, parcel, parcelable, Stub, ...

  7. Android的跨进程通信

    Android系统的跨进程简介 为什么不能直接跨进程通信? 为了安全考虑,应用之间的内存是无法互相访问的,各自的数据都存在于自身的内存区域内. 如何跨进程通信? 要想跨进程通信,就要找到一个大家都能访 ...

  8. 跨进程访问(AIDL服务)

    我们都知道Service的主要的作用是后台运行和跨进程访问. 关于Service后台运行请查看鄙人的另外一篇文章Service基础 本篇博文主要探讨的是跨进程访问~ 什么是AIDL Android系统 ...

  9. VB 子类化技术详解

    1. 何谓子类化(subclassing) 众所周知,Windows是一个基于消息的系统,消息在Windows的对象之间进行着传递.子类化和Windows的钩子机制存在于消息系统之中,我们可以利用这些 ...

最新文章

  1. 成都Uber优步司机奖励政策(4月12日)
  2. moveit!功能包安装问题
  3. win7服务器端口被占用,高手亲自帮您win7端口被占用的详尽处理要领
  4. 和lua的效率对比测试_N99 KF94 KN95 真假口罩及 KN90 KN95面罩滤棉过滤效率对比测试...
  5. 怎么去掉ECSHOP的Powered by ECShop版权信息
  6. 《SSM框架实战》 整合 Freemarker
  7. 关于php调用.net的web service 踩过的坑
  8. EasyUI-在iframe里获取现阶段选中的tab的标题
  9. linux安装json
  10. mysql 事务不生效_@Transactional事务不生效的几种解决方案
  11. u8系统怎么连接服务器,u8客户端连接服务器流程
  12. 【深度解读】电动自行车新国标对锂电池行业的影响分析
  13. Excel随机数生成
  14. 用.NET做动态域名解析
  15. LC152---乘积最大子数组
  16. AVD安装XPOSED环境
  17. input框不允许输入负数
  18. 人事考试网上报名系统
  19. maven仓库中的.LastUpdated文件
  20. 怎么理解VGG-16结构图中的block

热门文章

  1. 对话混沌创新商学院6期校友:“朋克养生”背后的产业密码
  2. win10U盘重装无法进行,一直转圈加载,不进入安装界面超过半小时
  3. 英汉互译 php,美丽的英文诗(英汉互译)
  4. 时序分析基本概念介绍--Timing Arc
  5. 启动IDEA时出现error launching idea failed to create jvm的解决办法
  6. 提高系统开发效率的“银弹”——X-series可视化大规模应用开发工具集
  7. 图数据库|如何从零到一构建一个企业股权图谱系统
  8. 桌面上的计算机图片怎么复制,怎么把一张普通的图片复制到EXCEL表格中
  9. 跨平台应用即将消亡!
  10. 在WIN2012R2和WIN2016服务器打开网站慢的解决方法