这是一个关于Windows编程的一般问题:
是窗口消息";可靠的";?
对于示例(这些只是实例):
-
您能否确定在光标进入屏幕之前会发生
WM_MOUSEMOVE
? -
如果插入设备,您是否可以确定是否会收到
WM_DEVICECHANGE
消息? -
如果您的窗口失去焦点,您能否确定您将收到
WM_KILLFOCUS
消息?
或者,换言之:你能不能确信你会在适当的时间收到适当的消息,或者你总是必须进行防御编码,以防不知何故,你可能会因为没有明显记录的原因而错过消息?
示例:
-
保证(AFAIK)一个文件系统过滤器驱动程序不会"失效";错过";文件操作或更改通知。
-
相比之下,不能保证ReadDirectoryChangesW不会错过通知。事实上,如果缓冲区溢出,它可能会错过很多。
注:
我不是在谈论针对对手的情况(例如,有人劫持了你的窗口程序或安装了挂钩/过滤器);这几乎会使任何担保失效。我只是问一些模糊的情况,即使没有人故意说什么不好的话,也可能真的发生,比如一些随机缓冲区溢出,如果有人使用SendInput
等,假设你可以控制自己的代码。
否,您不能确定给定的消息将以特定的顺序传递。以下是为什么不的几个原因
- 消息可以按程序发送,这可以用于模拟"不可能"的场景,如
WM_KEYUP
和WM_KEYDOWN
- 另一个例程可以对您的窗口进行子类,并选择性地拦截消息,而不将其发送到
WNDPROC
最好围绕订购很重要的任何场景进行防御编码。