要以編程方式點擊警告框,我們可以使用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