3

我有一个多线程应用程序,它可能会显示一个 MessageBox 以供用户交互。在用户从应用程序的系统托盘图标中选择上下文菜单命令后,消息框本身会从工作线程中显示,因此从技术上讲,用户可以在显示消息框时继续使用该应用程序。这很有效,直到用户发出“退出”命令,此时我需要找到一种方法来关闭任何打开的消息框。

我做了功课,并且能够获得消息框的主(对话框)窗口的 HWND 句柄(使用此方法。)我使用 Spy++ 检查了 HWND 是否正确,因此 HWND 本身不是问题。发生的情况是,当我PostMessage(hMsgBoxWnd, WM_CLOSE, 0, 0);从另一个线程到消息框时,它只是忽略此消息并且不会关闭。

知道如何通过窗口句柄关闭消息框吗?

4

2 回答 2

1

MessageBox()根本不会WM_CLOSE在所有位置处理:

SendMessage/PostMessage WM_CLOSE 到 MessageBox 窗口并不总是有效

于 2012-12-14T22:24:54.637 回答
0

您应该使用 PostThreadMessage 发布到线程特定的消息队列

于 2012-12-14T04:37:55.617 回答