首页
社区
课程
招聘
[求助]郁闷
发表于: 2011-7-3 17:19 5676

[求助]郁闷

2011-7-3 17:19
5676
我遇到一个很奇怪的问题

一个窗口,是个不可视窗口,没有自己的窗口过程,只有它的类(static类)的默认窗口过程,这种窗口居然能处理自定义消息~ 这是其中的代码

WM_USER = 0x400 ,它这里获取和派发的都是 0x5D3 == WM_USER + 0x1D3
我换了两个spy++,它窗口过程都是NULL  
求解释吖~

PS:为了避免对号入座,我把标题擦了,见谅哈







mov     edx, [esi+0F8h]
mov     ecx, 6
xor     eax, eax
lea     edi, [esp+0A8h+WSAData.szSystemStatus+3Bh]
mov     dword ptr [esp+0A8h+WSAData.szSystemStatus+37h], ebx
push    1               ; wRemoveMsg
rep stosd
mov     edi, ds:PeekMessageA
push    5D3h            ; wMsgFilterMax
push    5D3h            ; wMsgFilterMin
lea     eax, [esp+0B4h+WSAData.szSystemStatus+37h]
push    edx             ; hWnd
push    eax             ; lpMsg
call    edi ; PeekMessageA
test    eax, eax
jz      short loc_1027550F ;消息队列为空则跳,否则循环抽空消息队列

mov     ebx, ds:TranslateMessage
mov     ebp, ds:DispatchMessageA

loc_102754DD:
lea     ecx, [esp+0A8h+WSAData.szSystemStatus+37h]
push    ecx             ; lpMsg
call    ebx ; TranslateMessage
lea     edx, [esp+0A8h+WSAData.szSystemStatus+37h]
push    edx             ; lpMsg
call    ebp ; DispatchMessageA
mov     eax, [esi+0F8h]
push    1               ; wRemoveMsg
push    5D3h            ; wMsgFilterMax
push    5D3h            ; wMsgFilterMin
lea     ecx, [esp+0B4h+WSAData.szSystemStatus+37h]
push    eax             ; hWnd
push    ecx             ; lpMsg
call    edi ; PeekMessageA
test    eax, eax
jnz     short loc_102754DD  ;循环

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 67
活跃值: (91)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
顶上去……表沉下去
2011-7-3 18:42
0
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
可以上图的 楼主再试试呢 不行看帮助
2011-7-3 20:44
0
雪    币: 67
活跃值: (91)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
嗯,插图了,谢了哈
2011-7-3 23:13
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不可能没有窗口过程的窗口,我看了一下你的图,你的图上有哪里写明窗口过程是NULL了?
2011-7-4 08:30
0
雪    币: 67
活跃值: (91)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6
窗口过程在spy++写成 窗口进程 这东西
2011-7-4 13:12
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
窗口进程不是窗口过程。不要搞混了。spy++的消息地址在右键菜单的[消息]命令里看。
2011-7-4 13:43
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
窗口进程是代表着窗口进程的ID值,不是窗口过程地址。而static是作为user32.dll的子类的窗口,是没有窗口进程ID值的,所以窗口进程ID值是NULL。
2011-7-4 13:46
0
雪    币: 67
活跃值: (91)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
9
没搞错吧? 我指的是WndProc这个东东的地址啊~ 下面有图,spy++的help doc



上传的附件:
2011-7-4 14:52
0
雪    币: 67
活跃值: (91)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
10
哥们,的确不是你说的那样,可能你没注意我指的啥吧
我已经搞到了它的WndProc地址了,反汇编出来的,它用CreateWindowEx创建后,再用SetWindowLong来设置WndProc,这应该是spy++显示NULL的原因吧,挺YD的
2011-7-4 15:17
0
游客
登录 | 注册 方可回帖
返回
//