首页
社区
课程
招聘
[原创]在WM6下实现对电话进程通话状态窗口的截获以及Subclass Hook
发表于: 2009-4-5 23:23 12769

[原创]在WM6下实现对电话进程通话状态窗口的截获以及Subclass Hook

2009-4-5 23:23
12769

首先感谢加百力和Yonsm对我前一个帖子的解答,没有他俩我现在大概还没思绪呢。

以及感谢今天下午MobileSide开发群里的山夕兄的帮助。

(如果可以,给我帖子加个精华吧@@ *^_^*)

解决的关键如下图所示,这是微软搞的一个小陷阱,偷懒一点不抓完控件都不知道你该找那个窗口的Handle……


分别对应关系:
1.拨号


2.通话中(本文主角)


3.通话结束


这3个窗口里的类名控件名全都一样,唯一不同的就是那些按钮的文本名,还有通话状态窗口和通话结束窗口是动态切换的,也就是平时状态下你只能看到通话结束窗口,而通话的时候通话结束窗口是被干掉了一堆MS_PHONE_BUTTON按钮控件的。

“打开扬声器”按钮的标识是IDC_SPEAKER(分析CProg就知道),用GetDlgCtrlID可以获得其ID为23016

#define IDC_SPEAKER 23016

然后我们要获得发往这个窗口和指定按钮的消息,所以要对其Subclass子类化,WINCE没有SetWindowsHook等相关函数,只能用SetWindowLong来实现。

不说废话了,还是贴代码省事,今天忙一天又搞Dll Injection又搞回来又搞回去最后发现还是搞回来就行,累死我了……

代码演示了对“打开扬声器”按钮和“打开扬声器”菜单进行控制,代码里的一些ID来自实际分析,非官方标准声明。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
  • 1.jpg (102.11kb,98次下载)
  • 2.jpg (178.57kb,99次下载)
  • 3.jpg (167.81kb,97次下载)
  • 4.jpg (169.72kb,97次下载)
收藏
免费 7
支持
分享
最新回复 (7)
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
2
NETTF小金 总结的很好,图文并茂,分析详细!一大早来就看到好帖真是心情愉快!
把遇到的问题和大家一起讨论,并将成果发布出来,这种精神很值得提倡!

也欢迎在各个嵌入式平台的学习研究的朋友发布自己的成果、资料和大家一起分享!
2009-4-6 09:10
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
3
我记得:Windows CE下有SetWindowsHookEx()函数,但功能很有限。
2009-4-6 09:29
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
据说那个SetWindowsHookEx经常返回失败~~~~我觉得奇怪的是为啥不需要DLL Inject也能做Subclass,在Win32下应该不可能哇,看过许多教程也是说要注入其他进程才能子类化,难道这一点上WM6又神奇了一把?
2009-4-6 10:18
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
5
WM的内核同桌面Windows内核有很大差异。虽然表面上看,界面相似,API,MFC,.NET都非常接近,但是毕竟是资源受限的嵌入式平台上的OS所以核心部分还是做了很多剪裁。越研究到底层越会发现有很多不同之处。
2009-4-6 10:24
0
雪    币: 104
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
TECHED2008上听微软的Windows CE工程师讲,WindowsCE 6之前的版本,所有的进程是共享同一个进程空间的,所以不需要注入…… 不过,Windows CE6之后就改掉了,所以还是不要依赖这个特性比较好。
2009-5-17 20:59
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
同意楼上的。
2009-11-18 20:21
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
同意楼上的。
2009-12-6 00:25
0
游客
登录 | 注册 方可回帖
返回
//