如何获取其它进程中窗口的窗口过程
helloworld 发表于:2008-9-29 14:52:00 阅读数:9
如何获取其它进程中窗口的窗口过程
作者:耿海增
下载源代码
开发环境: Windows XP + VC6+Platform SDK 或者 VS.NET 2003+
测试环境: Windows XP
曾经以为获取一个窗口的窗口过程很简单,不就是GetWindowLong一下吗,看spyxx获取的多么顺利。后来才发现原来不是这么简单。获取本进程内窗口的窗口过程确实很简单 ,直接调用GetWindowLong(hWnd,GWL_WNDPROC)就可以了(注意,根据窗口是否是Unicode的,你要判断是调用GetWindowLongA,还是GetWindowLongW,可以用IsWindowUnicode来判断), 但是GetWindowLong这个函数内部会检查调用进程和该窗口句柄是否属于同一进程,如果不是,就简单的返回0了。
既然这样,我们又不能去修改GetWindowLong,那就只有想办法让它认为我们和那个窗口是在一个进程里了。回想起Windows核心编程里讲过,通过创建远程线程的方式 ,可以在其它进程内创建一个新的线程,并且可以指定这个线程的线程函数 。因为Windows的进程之间的地址相互之间是不可