
How do you display a dialog from a hidden window application?我开发了一个 COM 组件 (dll),它实现了一个显示 WTL 模式对话框的 Edit() 方法。 这个 COM 组件的完整接口对应于化学过程工业中使用的软件标准 (CAPE-OPEN),因此这个 COM 组件应该可以被我不知道的一系列第 3 方可执行文件使用控制。 我的组件在许多这些 EXE 中都按预期工作,但特别是其中一个 Edit() 方法只是挂起而没有出现对话框。 但是,如果我在 我怀疑问题可能与这个作为"隐藏窗口应用程序"运行的特定 EXE 有关。 我尝试使用 NULL 和 对话框本身是一个 ATL/WTL CPropertySheetImpl。 有问题的父应用程序 (EXE) 不受我的控制,因为它是由(轻度敌对的)第 3 方开发的。 我知道我可以成功地调用 谁能建议我如何在不先显示不必要的 MessageBox 的情况下让它显示对话框?我知道这是可能的,因为我已经看到这个 EXE 显示来自其他 COM 组件对应于同一接口的对话框。 原来我错了:
所以现在我只需要找出如何将我的对话放在前面。 感谢您的回答;-) 这不应该是可靠的 - 但尝试 ::GetDesktopWindow() 作为父级(它返回一个 HWND)。 请注意 - 如果您的应用程序崩溃,它会导致桌面崩溃。但我很想看看它是否有效。 根据"隐藏窗口"应用程序的工作方式,它可能无法显示窗口。例如,服务没有"主消息循环",因此无法在进程中处理发送到窗口的消息。即,显示窗口的应用程序应具有以下内容:
在 WinMain 中。 您是否为对话框使用父级?例如
如果是,请尝试删除父级。特别是如果父级是桌面窗口。 无论您做什么,都不要将桌面窗口用作模态对话框的父窗口。 解释见这里:http://blogs.msdn.com/b/oldnewthing/archive/2004/02/24/79212.aspx 引用理由:
|