如何使用 VB.Net Winform App 知道对话框是警告还是确认或提示?

Posted

技术标签:

【中文标题】如何使用 VB.Net Winform App 知道对话框是警告还是确认或提示?【英文标题】:How to know that a dialog box is an alert or confirm or prompt using VB.Net Winform App? 【发布时间】:2014-11-01 08:54:48 【问题描述】:

我可以使用“user32.dll”的“GetForegroundWindow”获取窗口句柄,并通过将其类名与“#32770”匹配,我可以检查它是否是一个对话框。

现在我的问题是我怎么知道这个对话框是警告、确认还是提示对话框?

请注意,我正在使用 VB.Net 在 Internet Explorer 进程之外工作。

【问题讨论】:

【参考方案1】:

有很多可能的对话框。标准的是 MessageBox 和 shell 对话框,如 OpenFileDialog、PrintDialog、ColorDialog 等。很多很多非标准的,使用本机代码编写Windows程序的程序员使用资源编辑器创建的那种。由 DialogBox() winapi 函数显示。

您需要了解有关对话窗口的更多信息,请使用Spy++ utility。如果它是一个普通对话框,那么您会看到窗口上的每个控件都有一个 ID。您可以在运行时通过调用 GetDlgItem() 找到这些。如果它们嵌套在另一个子窗口中,则可能需要 EnumChildWindows()。如果函数失败,返回 IntPtr.Zero,那么你就知道你没有你正在寻找的对话框。您还应该调用 GetClassName() 以仔细检查它是否是您希望找到的那种控件。

请注意,它永远不可能 100% 准确,程序员倾向于选择非常常见的 ID。就像简单地对它们进行连续编号一样,从 1 开始。在正确的时间执行此操作,当很可能显示 特定 对话框时,这一点非常重要。

请注意,Microsoft 很容易破坏您的代码。他们不承诺在下一版本的 Internet Explorer 中保持对话框不变。

请注意,最后但并非最不重要的一点是,程序员往往对此感兴趣,因为他们想修改文件下载确认提示。戳路径名并自动单击“确定”按钮。当然,这是一个非常非常有吸引力的恶意软件目标,他们已经内置了反措施来击败这个简单的目标。在更高版本的 IE 中启用的增强保护模式是另一种让您头疼的对策。

【讨论】:

【参考方案2】:

您可以使用 EnumChildWindow 枚举窗口元素,并计算按钮和打开的按钮,以及检查图标。假设它是一个标准的消息框,有 6 个按钮配置和 9 个不同的图标。

【讨论】:

以上是关于如何使用 VB.Net Winform App 知道对话框是警告还是确认或提示?的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET如何在winform中“刷新”数据DbContext

如何在未安装 office 的情况下从 winform vb.net 2008 导出到 excel?

如何在 IconButton VB .NET WinForm 中处理 MouseHover 和 MouseLeave 事件

在 VB .NET 2008 Winform Listview 中禁用复选框选择

VB.NET Winform的一些功能实现

VB.NET WinForm获取运行程序用户名