要以编程方式点击警告框,我们可以使用Windows API FindWindow,FindWindowEx和SendMessage,这个想法是当一个警告框出现时,主机WebBrowser控件将失去焦点的形式,此时,我们将能够使用FindWindow检索警报框的窗口句柄,最后我们可以发送一个单击消息到“确定”按钮来点击它。
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
private void Form1_Deactivate(object sender, EventArgs e)
{
IntPtr hwnd = FindWindow(null, "Message from webpage");
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Button", "OK");
uint message = 0xf5;
SendMessage(hwnd, message, IntPtr.Zero, IntPtr.Zero);
}
可能重复:http://stackoverflow.com/questions/77659/blocking-dialogs-in-net-webbrowser-control – Giedrius
我已经使用警告overloading.But不幸的是它不工作 – Ranish
所以可能是它来自某种插件?或者它是JavaScript错误,在这种情况下,你可以用'webBrowser.ScriptErrorsSuppressed = true'来禁用它们。另一个问题是,你真的需要网络浏览器控制报废,因为这种方法比手动请求更慢吗? – Giedrius