窗口消息“可靠”吗?

问题描述

| 这是有关Windows编程的一个普遍问题: 窗口消息“可靠”吗? 例如(这些只是示例): 您是否可以确定在光标进入屏幕之前会出现“ 0”? 您是否可以确定插入设备会收到“ 1”消息? 您是否可以确定如果窗口失去焦点,您将收到
WM_KILLFOCUS
消息? 或者,换句话说:您是否可以确定会在适当的时间收到适当的消息,还是始终必须进行防御性编码,以防万一您可能出于某种没有明显记载的原因错过了一条消息? 例: 确保(AFAIK)文件系统过滤器驱动程序不会“丢失”文件操作或更改通知。 相反,不能保证ReadDirectoryChangesW不会丢失通知。实际上,如果缓冲区溢出,它可能会丢失很多。 注意: 我不是在谈论针对对手的情况(例如有人劫持了您的窗口程序或安装了挂钩/过滤器);那几乎会使任何保证失效。我只是想问一问即使没有人有意地表示任何不良后果,也可能真正发生的晦涩情况,例如是否有一些随机缓冲区溢出,是否有人使用some3等,并假设您可以控制自己的代码。     

解决方法

不,您不能确定给定的消息将按特定的顺序发送。以下是一些为什么不这样做的原因 消息可以通过编程方式发送,并且可以用于模拟“不可能”的情况,例如“ 4”之后是“ 5”。 另一个例程可以子类化您的窗口并选择性地拦截消息,而不将其发送到您的“ 6” 最好在需要排序的任何情况下进行防御性编码