窗口消息"可靠"吗?

Meh*_*dad 5 windows winapi window-messages

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

Window消息"可靠"吗?

例如(这些只是例子):

  • 你能一定是一个WM_MOUSEMOVE光标进入你的屏幕前,会怎样呢?

  • 如果插入设备,您能确定会收到WM_DEVICECHANGE消息吗?

  • 如果你的窗户失去焦点,你能确定你会收到一条WM_KILLFOCUS消息吗?

或者,换句话说:你能否确定你会在适当的时候得到适当的信息,或者你是否总是必须采取防御性的方式进行编码,以防某些情况下你可能因为没有明显记录的原因而错过了一条信息?


例:

  • 这是保证(据我所知)一个文件系统过滤驱动程序不会"小姐"文件操作或更改通知.

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

注意:

不是在谈论针对对手的情况(例如有人劫持你的窗口程序或安装钩子/过滤器); 这几乎会使任何保证无效.我只是询问可能真正发生的模糊情况,即使没有人意味着任何有意义的错误,例如一些随机缓冲区溢出,如果有人使用SendInput等等,假设您已经控制了自己的代码.

Jar*_*Par 3

不,您无法确定给定的消息是否会按特定的顺序传递。以下是不这样做的几个原因

  • 消息可以以编程方式发送,这可以用于模拟“不可能”的场景,例如WM_KEYUP后面跟着WM_KEYDOWN.
  • 另一个例程可以对您的窗口进行子类化并有选择地拦截消息而不将它们发送到您的窗口WNDPROC

最好围绕顺序很重要的任何场景进行防御性编码