首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# WebBrowser 控制項捕獲滑鼠點擊事件 (DOM 注入法)

     編輯:關於C語言

WebBrowser 控制項 (IE 內核) 預設不暴露網頁內部的滑鼠事件給 C#。透過向 DOM 注入 JavaScript,攔截事件並導航至自訂協定 URI (cmd://...),再在 Navigating 事件中攔截並取消導航,即可實現 C# 捕獲網頁點擊。

核心三步驟

  1. 注入 JS:頁面載入完成後,執行 document.onmousedown = function() { window.location = 'cmd://onmousedown'; }。
  2. 攔截導航:在 WebBrowser.Navigating 檢查 e.Url 是否為自訂協定,若是則 e.Cancel = true 並處理邏輯。
  3. 取得 ActiveX 實例:需轉型為 SHDocVw.WebBrowser 掛接 NavigateComplete2 確保每次頁面載入都重新注入 JS。

完整程式碼


using System;
using System.Windows.Forms;
using mshtml;
using SHDocVw;

namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.Navigating += WebBrowser1_Navigating;
            webBrowser1.Navigate("https://www.google.com");

            var ax = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
            ax.NavigateComplete2 += Ax_NavigateComplete2;
        }

        private void WebBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            if (e.Url.ToString().ToLower().Trim('/') == "cmd://onmousedown")
            {
                MessageBox.Show("捕獲到滑鼠按下!");
                e.Cancel = true;
            }
        }

        private void Ax_NavigateComplete2(object pDisp, ref object URL)
        {
            var doc = (IHTMLDocument2)((SHDocVw.WebBrowser)webBrowser1.ActiveXInstance).Document;
            doc.parentWindow.execScript("document.onmousedown=function(){window.location='cmd://onmousedown'}", "JavaScript");
        }
    }
}

關鍵細節

  • 引用需求:專案需加入 Microsoft.mshtml (mshtml.dll) 與 Microsoft Internet Controls (SHDocVw.dll) COM 參考。
  • 自訂協定:cmd:// 非標準協定,不會觸發真實導航,僅作為訊號。
  • 框架/跨域:若頁面含 `