怪异的消息传递
首先编译器是2005。我用Createprocess打开了一个外部安装程序,在给其发送例如单击按钮的消息时,怪事来了。
经检验,程序是运行成功的,SendMessage()也成功了,但是消息发送和处理这个过程脆弱的令人发指...
怎么脆弱呢:比如加个断点,或者加句注释,再运行,消息接收不到了(代码没有任何变动)!甚至有时运行一次没反应,重新编译之后 按钮又成功被按下了...不调试运行和调试运行,其结果也不一样,让我十分头疼。
看起来不可思议,但确实如此。
现在我想用循环解决这个问题。具体就是我发送单击消息给一个按钮,比如“下一步&N >”这个按钮。为了防止其脆弱的消息传递,我想用循环,判断这个按钮是否被按下了,没有就一直发送...
那么这个循环怎么写呢?(判断所调用的外部第三方程序的按钮是否被按下,包括单选框是否被选择之类的)
[解决办法]
http://www.autohotkey.com
[解决办法]
SendMessage()有返回值,表示的是消息被处理后的返回值。你在循环里判断这个返回值就可以了。
你可以尝试下用PostMessage()看看效果
[解决办法]
不要仔细看就知道,你的程序有 BUG。
没有出现问题,只是你没有踩到那颗地雷上而已。
[解决办法]
你用spy++看看你那个安装程序的有需要操作按钮的窗口句柄ID是多少,然后再打开你的程序,看看你发送消息过去的窗口句柄是不是和spy++里的一样,如果有时一样,有时不一样,那就是造成你有时成功,有时不成功.
举个例子,你的安装程序刚打开时,窗口句柄是1,你发送消息到1,点击下一步按钮,这时成功,到下一步,这时有可能窗口句柄变成2了,这时你再对1 发送消息,就不会成功了.
我猜测可能有是这样,你可以用spy++跟踪下你那个安装程序的窗口。
如果不是我说的这情况,那就不清楚是什么原因了。