我可以使用“user32.dll”的“GetForegroundWindow”获取Window句柄,并通过将其类名与“#32770”匹配,我可以检查它是否为对话框.
现在我的问题是我怎么知道这个对话框是警报,确认还是提示对话?
请注意我使用VB.Net在Internet Explorer进程之外工作.
有很多可能的对话框.标准的是MessageBox和
shell对话框,如OpenFileDialog,PrintDialog,ColorDialog等.很多很多非标准的程序员,使用本机代码编写
Windows程序的程序员使用资源编辑器创建.由DialogBox()winapi函数显示.
您需要了解有关对话框窗口的更多信息,请使用Spy++ utility.如果它是一个通用对话框,那么您将看到窗口上的每个控件都有一个ID.您可以通过调整GetDlgItem()来在运行时找到它们.如果它们嵌套在另一个子窗口中,则可能需要EnumChildWindows().如果函数失败,则返回IntPtr.Zero,然后您知道您没有要查找的对话框.您还应该调用GetClassName()来仔细检查它是否是您希望找到的控件.
请注意,它永远不会100%准确,程序员倾向于选择非常常见的ID.就像简单地连续编号一样,从1开始.在正确的时间执行此操作,非常有可能显示特定的对话框,这非常重要.
请注意,Microsoft可以轻松破解您的代码.他们不承诺在下一版本的Internet Explorer中保持对话框不变.
并且要注意,最后但并非最不重要的是,程序员往往对此感兴趣,因为他们想要修改文件下载确认提示.选择路径名称并自动单击“确定”按钮.当然,恶意软件是一个非常有吸引力的目标,他们已经采取了应对措施来打败这个简单的目标.在以后的IE版本中启用的增强保护模式是另一个反击措施,它会给你带来悸动的头痛.