窗口消息"Reliable"吗?



这是一个关于Windows编程的一般问题:

是窗口消息";可靠的";?

对于示例(这些只是实例):

  • 您能否确定在光标进入屏幕之前会发生WM_MOUSEMOVE

  • 如果插入设备,您是否可以确定是否会收到WM_DEVICECHANGE消息?

  • 如果您的窗口失去焦点,您能否确定您将收到WM_KILLFOCUS消息?

或者,换言之:你能不能确信你会在适当的时间收到适当的消息,或者你总是必须进行防御编码,以防不知何故,你可能会因为没有明显记录的原因而错过消息?


示例:

  • 保证(AFAIK)一个文件系统过滤器驱动程序不会"失效";错过";文件操作或更改通知。

  • 相比之下,不能保证ReadDirectoryChangesW不会错过通知。事实上,如果缓冲区溢出,它可能会错过很多。

注:

我不是在谈论针对对手的情况(例如,有人劫持了你的窗口程序或安装了挂钩/过滤器);这几乎会使任何担保失效。我只是问一些模糊的情况,即使没有人故意说什么不好的话,也可能真的发生,比如一些随机缓冲区溢出,如果有人使用SendInput等,假设你可以控制自己的代码

否,您不能确定给定的消息将以特定的顺序传递。以下是为什么不的几个原因

  • 消息可以按程序发送,这可以用于模拟"不可能"的场景,如WM_KEYUPWM_KEYDOWN
  • 另一个例程可以对您的窗口进行子类,并选择性地拦截消息,而不将其发送到WNDPROC

最好围绕订购很重要的任何场景进行防御编码。

相关内容

  • 没有找到相关文章

最新更新