在我的应用程序中,我有一个组件,它会打开一个弹出窗口(保存对话框)。没有合法的方法来禁用该对话框。通过定时器杀死它不是可靠的方法。 有什么准确的方法可以防止对话框打开吗?
也许有一些 WndProc 和 WM_CHILDACTIVATE 的爱。 (当然,我假设所述对话框将触发此操作。)如果您需要替换现有(但相同进程)或应用程序级消息泵,您可能需要直接跳到 Win32 WndProc API - 请参阅SetWindowLong .
YMMV。玩得开心。
这味道很难闻。为什么应用程序的一部分试图妨碍另一部分?如果打开对话框的组件不是面向用户的组件,并且您试图阻止 UI 中的弹出窗口,那么您需要进行一些返工以确保该组件通知 UI 它需要文件名UI可以选择如何获取它。如果您在内部使用某个组件,并且它令人烦恼地打开一个对话框,那么听起来您需要调整该组件,以便该对话框取决于用户而不是服务使用它。
像大多数 winapi 问题一样,有一种方法可以破解它,监视您的应用程序焦点,捕获 WM_CHILDACTIVATE 或轮询顶级窗口可能都有效,但它们都是绕过您的应用程序不一致这一事实的 hacks在它的设计中。如果您可以修复设计,您最终会得到一个更可靠的解决方案,您的同事不会畏缩。