LoginSignup
0
0

More than 1 year has passed since last update.

C#のWebBrowserコントロールでマウスの戻る・進むボタンに対応する

Last updated at Posted at 2021-06-16

はじめに

Windows Forms上でウェブページを表示するためのコントロールとしてSystem.Windows.Forms.WebBrowserクラスが標準で用意されています。
しかし、なぜか5ボタンマウスに付いている「戻るボタン」「進むボタン」を押してもページが切り替わりません。
WebBrowserコントロールでマウスの戻る・進むボタンに対応させる方法を紹介します。

対処方法

WebBrowserクラスは、MouseDownイベントによるイベントハンドリングができない。そのためMouseEventArgsのButtonプロパティの値がMouseButtons.XButton1とMouseButtons.XButton2であるかどうかで判定する方法は使えない。その代わりにウィンドウメッセージを捕捉することにする。

WebBrowser上でマウスの「戻るボタン」「進むボタン」が押されるとWM_APPCOMMANDメッセージが発生する。そこでWebBrowserクラスを継承し、WndProcメソッドをオーバーライドしてWM_APPCOMMANDメッセージを捕捉することで「戻るボタン」「進むボタン」が押されたことを検知できる。

さらに押されたボタンの種類を調べるためにm.LParamからGET_APPCOMMAND_LPARAMメソッドによって押されたボタンの種類を演算して求める。

    public class WebBrowserEx : System.Windows.Forms.WebBrowser
    {
        const short BROWSER_BACKWARD = 1;
        const short BROWSER_FORWARD = 2;
        const int WM_APPCOMMAND = 793;
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_APPCOMMAND)
            {
                switch (GET_APPCOMMAND_LPARAM(m.LParam))
                {
                    case BROWSER_BACKWARD:
                        GoBack();
                        return;
                    case BROWSER_FORWARD:
                        GoForward();
                        return;
                }
            }
            base.WndProc(ref m);
        }
        private int GET_APPCOMMAND_LPARAM(IntPtr lParam)
        {
            return (int)(lParam.ToInt64() >> 16) & 0xFFF;
        }
    }

あとは、WebBrowserクラスをWebBrowserExクラスに置き換えてインスタンスを作成すれば、戻る・進むボタンの操作に応じてウェブブラウザ内のページが切り替わる。

WebView2では標準で対応

新しいEdgeに準拠したWebView2では、「戻るボタン」「進むボタン」に対応しているので、最新のWeb標準にも準拠しているWebView2を今後は使うべきだと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0