这里的每个人都知道从WinXP到user32.dll出现了MessageBoxTimeout API。
但是现在它不是关于使用未记录的MessageBoxTimeout,而是使用记录的MessageBox:
所以这是巧合,从WinXP到任何MessageBox - PostMessage(WM_TIMER,0,0)等同于PostMessage(WM_CLOSE,0,0)。
内部人士提问:这是一个错误还是一个功能?
答案 0 :(得分:3)
这不是巧合。事实证明,MessageBox
是通过调用MessageBoxTimeout
来实现的,该0xFFFFFFFF
传递超时值MessageBoxTimeout
。使用调试器识别这一点很简单。事实证明,WM_TIMER
对话框通过关闭对话框来响应MessageBoxTimeout
消息。这就是WM_TIMER
实现超时的方式。
因此,如果您将MessageBox
消息发布到MessageBoxTimeout
对话框,您实际上是将其发布到MessageBox
对话框,因此您确实会将其关闭。
这肯定不是一个错误,因为WM_TIMER
根本没有承诺它将如何响应接收MessageBox
消息。它不是一个功能,因为它没有记录。这只是当前{{1}}实施的一个奇怪的副作用。
当然,所有这些都是实施细节,可能会有变化等等。