【问题标题】:Prevent component from opening a pop-up window in own .NET application防止组件在自己的 .NET 应用程序中打开弹出窗口
【发布时间】:2025-12-14 00:55:02
【问题描述】:

在我的应用程序中,我有一个组件,它会打开一个弹出窗口(保存对话框)。没有禁用该对话框的合法方法。用计时器杀死它不是可靠的方法。 有什么准确的方法可以防止对话框打开吗?

【问题讨论】:

    标签: .net windows api dialog


    【解决方案1】:

    也许是一些WndProcWM_CHILDACTIVATE 的爱。 (当然我假设所说的对话框会触发这个。)如果您需要替换现有的(但相同的进程)或应用程序级消息泵,您可能需要直接跳转到 Win32 WndProc API - 请参阅SetWindowLong .

    YMMV。玩得开心。

    【讨论】:

      【解决方案2】:

      这闻起来很糟糕。为什么您的应用程序的一部分试图妨碍另一部分?如果打开对话框的组件不是面向用户的组件,并且您试图扼杀 UI 中的弹出窗口,那么您需要进行一些返工以确保组件通知 UI 它需要文件名UI可以选择如何获取它。如果您在内部使用一个组件并且它令人讨厌地打开一个对话框,那么听起来您需要调整该组件,以便该对话框取决于它被用户而不是服务使用。

      像大多数 winapi 问题一样,有一种方法可以破解它,监控您的应用程序焦点,捕获 WM_CHILDACTIVATE 或轮询*窗口可能都可以工作,但它们都是解决您的应用程序不存在的事实的黑客。 t 在它的设计上是一致的。如果您可以修复设计,您最终会得到一个更可靠的解决方案,您的同事不会畏缩。

      【讨论】: