本帖最后由 十二 于 2010-12-7 14:53 编辑
Windows消息绝大多数windows事件都会产生消息,比如关闭一个窗口,点击一个窗口,最小化,一个窗口失去焦点的时候(窗口未被激活),都会产生message(消息)
依旧拿出FXTZ来说。
F9使其运行,Alt+V W可以看到
所有的窗口句柄。
findwindow函数也可以帮你找到指定窗口的HWND句柄
我来用
句柄=000205EC
标题=搶曽旕憐揤懃 乣 挻淲媺僊僯儑儖偺撲傪捛偊 Ver1.10
来测试消息
右键句柄=000205EC选择在ClassProc上设置消息断点
选择WM_CLOSE消息。这个消息会在程序结束前寄送到该线程窗口。
选择确定,回到FXTZ点击右上角的X,这时OD帮我们断下来。
看堆栈窗口,可以看到消息被压入堆栈。我们修改消息为
WM_ACTIVATE=0x0000006
修该0012F628 00000000 |WA_INACTIVE Minimized = 0 为0x0000002 意思是发送一个激活对话框的消息取代WM_CLOSE。
取消掉007FAD40 的消息断点。F9执行你会发现FXTZ依旧在运行。
很幸运的是windows下的SendMessage函数能用来给任意一个窗口句柄发送一个消息。而findwindow函数正好能获取一个窗口的句柄。
眼明的人能看出来。
这样就能给一个程序发送一个伪消息,来改变消息对程序的控制,有点像hook
比如你往往有些时候没激活窗口 但是可以SendMessage WM_ACTIVATE 来骗过程序的消息子程。 使程序以为该窗口是在激活状态中
|