:: PostMessage为无效的hWnd

时间:2013-06-13 20:08:32

标签: windows winapi

我有一个调用::PostMessage(hWnd, [...]);的线程向主线程发送一条消息,提醒它注意异步操作的结果。

但是,我担心如果线程花费特别长的时间来完成其操作,则hWnd在调用PostMessage时可能不存在(用户可能已关闭窗口)

如果hWnd无效,则MSDN Documentation对结果没有任何说明。

根据经验或其他文档,您是否知道如果hWnd无效,我会发现什么?

2 个答案:

答案 0 :(得分:3)

雷蒙德陈写道:

一些选择摘录:

  

碰巧船载程序(以及#34;船载和#34;是技术术语)包含在窗口被破坏后使用窗口句柄的错误。当重新使用窗口句柄时,该程序将消息发送到它认为仍然存在的窗口,而是将消息发送到完全不相关的窗口。这对于该程序来说并不是一个好兆头,对于错误接收该消息的新窗口来说,这通常不是好兆头。


  

我们上次通过提出向已经销毁的窗口发送消息的程序问题以及如何重复使用窗口句柄来加剧问题,从而中断了我们的故事。虽然这显然是破坏窗口后使用窗口句柄的程序中的一个错误,但问题是如此普遍,以至于Windows NT中的窗口管理器人员决定采取更主动的方法。

答案 1 :(得分:1)

正如其他人所指出的,Ramond Chen解释了如果HWND被新窗口重复使用会发生什么。 PostMessage()会成功,它会走到错误的窗口。但是,如果HWND未被重复使用,PostMessage()将失败并显示ERROR_INVALID_WINDOW_HANDLE(1400)错误代码。