十二 发表于 2010-12-7 14:41:28

Windows 消息机制

本帖最后由 十二 于 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 来骗过程序的消息子程。   使程序以为该窗口是在激活状态中

眠羽 发表于 2010-12-7 14:52:11

好复杂,看不懂
这个可以用来干什么呢?

十二 发表于 2010-12-7 14:54:30

亮点在最后一句

真PKS同志 发表于 2010-12-7 15:00:51

我要说的话在评分处= =

清水星 发表于 2010-12-7 15:02:29

这个可以衍生出其他有用的功能的说(大概)

十二 发表于 2010-12-7 15:04:05

似乎有些游戏 如果失去窗口焦点就会暂停。   录像或者切换别的窗口时。游戏便会暂停。这时候给窗口一个SendMessage WM_ACTIVATE似乎可以很有效的改善这种情况。

紅魔の月時計 发表于 2010-12-7 15:07:59

原來如此,難怪有些遊戲TAB後有些不能暫停有些能
不過好複雜,看不懂額

红色不夜城 发表于 2010-12-7 15:12:05

改善游戏的暂停功能,这样?
可以拿来做修改游戏的一部分吧...要说方便倒也是XD

十二 发表于 2010-12-7 15:14:30

回复 8# 红色不夜城


    不一定Windows的消息甚多。

十二 发表于 2010-12-7 15:17:13

和setwindowshookex配合可以更甚
页: [1] 2
查看完整版本: Windows 消息机制