2013-05-30 68 views
4

根據要求,我需要在網頁中取消內容。爲了實現這個,我創建了一個Windows應用程序,並在主窗體中添加了一個Web瀏覽器控件。這樣我可以查看報廢過程。我可以登錄到網頁並導航到所需的網頁。此外,我可以雙擊編程的網格單元格。但目前的問題是,當以編程方式雙擊網格單元並且如果期望的數據不可用時我收到一條警告消息enter image description here在報廢時防止警報消息

因此,自然的拆解過程正在中斷,而我們需要手動點擊「確定」按鈕繼續刮過程。 如何避免報廢時報警消息的到達? 任何幫助將是可觀的。 謝謝

+0

可能重複:http://stackoverflow.com/questions/77659/blocking-dialogs-in-net-webbrowser-control – Giedrius

+0

我已經使用警告overloading.But不幸的是它不工作 – Ranish

+0

所以可能是它來自某種插件?或者它是JavaScript錯誤,在這種情況下,你可以用'webBrowser.ScriptErrorsSuppressed = true'來禁用它們。另一個問題是,你真的需要網絡瀏覽器控制報廢,因爲這種方法比手動請求更慢嗎? – Giedrius

回答

5

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