|
|
|
|
|
|
|
|
e ...... 换句话说,当系统需要将消息发送到指定窗口的WndProc时,要查看它的地址,然后直接调用WndProc。在本例中,系统发现MySubclassProc函数的地址与窗口相关联,因此就直接调用MySubclassProc函数。 为另一个进程创建的窗口建立子类时遇到的问题是,建立子类的过程位于另一个地址空间中。下面举个例子,说明窗口过程是如何接受消息的。进程A正在运行,并且已经创建了一个窗口。文件User32.dll被映射到进程A的地址空间中。 对User32.dll文件的映射是为了接收和发送在进程A中运行的任何线程创建的任何窗口中发送和显示的消息。当User32.dll的映像发现一个消息时,它首先要确定窗口的WndProc的地址,然后调用该地址,传递窗口的句柄、消息和wParam和lParam值。当WndProc处理该消息后,User32.dll便循环运行,并等待另一个窗口消息被处理。 进程B中的线程试图为进程A中的线程创建的窗口建立子类现在假设你的进程是进程B,你想为进程A中的线程创建的窗口建立子类。你在进程B中的代码必须首先确定你想要建立子类的窗口的句柄。这个操作使用的方法很多。上面的例子只是调用FindWindow函数来获得需要的窗口。接着,进程B中的线程调用SetWindowLongPtr函数,试图改变窗口的WndProc的地址。请注意我说的“试图”二字。这个函数调用⒉进行什么操作,它只是返回NULL。SetWindowLongPtr函数中的代码要查看是否有一个进程正在试图改变另一个进程创建的窗口的WndProc地址,然后将忽略这个函数的调用。 如果SetWindowLongPtr函数能够改变窗口的WndProc,那将出现什么情况呢页码:[1] [2] [3] [4] [5] [6] [7] 第3页、共7页 |
|
|
|
|
设为首页 | 加入收藏 | 广告服务 | 友情链接 | 版权申明
Copyriht 2007 - 2008 © 科普之友 All right reserved |