1

この質問では、マウスホイールの傾きを検出する方法が投稿され、必要なコードを示す回答が受け入れられます。

そのコードをアプリケーションの既存のWndProcメソッド (トラップする必要がある他のメッセージに対して機能している) に実装しましたが、機能していません。私がチェックしたところ、マウスホイールを傾けたときWndProcの値を持つメッセージは言うまでもなく、メッセージをまったく受け取っていないようです。0x020E

.NET 3.5 SP1 がインストールされた Windows XP SP3 (完全にパッチが適用された) で Microsoft Wireless Laser 5000 を使用しています。

Intellipoint ドライバーを 2009 年 8 月 5 日付のバージョン 7.0.258.0 に更新しました。

他のアプリケーション (Visual Studio、Word、paint.NET など) は、マウス ホイールを傾けたときに動作するため、私のアプリケーションに違いありませんが、何が間違っているのかわかりません。

完全を期すために、ここに私のコードがあります:

    protected override void WndProc(ref Message m)
    {
        Trace.WriteLine(string.Format("0x{0:X4}", m.Msg));
        switch(m.Msg)
        {
            case WM_EXITSIZEMOVE:
                Opacity = 1.0;
                break;
            case WM_SYSCOMMAND:
                int command = m.WParam.ToInt32() & 0xfff0;
                if (command == SC_MINIMIZE && this.minimizeToTray)
                {
                    MinimizeToTray();
                }
                break;
            case WM_MOUSEHWHEEL:
                // Handle tilting here
                break;
        }
        base.WndProc(ref m);
    }

このTrace.WriteLine呼び出しは、傾斜メッセージが通過しているかどうかを確認する試みです。他のメッセージWM_EXITSIZEMOVEWM_SYSCOMMAND受信中です。メッセージは次のように定義されます。

    private const int WM_EXITSIZEMOVE = 0x0232;
    private const int WM_SYSCOMMAND = 0x0112;
    private const int SC_MINIMIZE = 0xF020;
    private const int WM_MOUSEHWHEEL = 0x020E;

[ハードウェア] タグを削除しました。他のアプリケーションがメッセージを受信して​​いるため、ハードウェアに問題があるわけではないと 99% 確信しているためです。

アップデート

スクロールバーを備えた複数行のテキスト ボックスをアプリケーションに追加し、マウス ホイールの傾きメッセージを受信して​​処理します。だから私がする必要があるのは、そのためのコードを見つけることだけです;)

アップデート

SuperUser に関するこの質問は、これに関係している可能性があります。そこでの回答に注目します。

4

1 に答える 1

2

Spy ++を使用して、受信しているメッセージを確認します。

編集:WndProcメソッドでm.ToString()を呼び出して、受信したメッセージの名前(!)を取得することもできます。(これは、の巨大なswitchステートメントによって行われますSyetm.Windows.Forms.MessageDecoder.MsgToString

メッセージは、フォーム自体ではなく、フォーカスのあるコントロールにのみ送信される可能性があることに注意してください。その場合は、メッセージフィルターを使用することをお勧めします

また、マウスが異なれば、マウスホイールメッセージも異なります。左スクロールの場合は負、右スクロールの場合は正のを送信0x20EするLogitechマウスがあります。WParam


編集(コメントに応じて)

水平スクロールは垂直スクロールのずっと後に追加され、古いプログラムではサポートされていないことに注意してください。したがって、マウスドライバは、水平スクロールバーを探して、それらを明示的にスクロールしている可能性があります。フォームに水平スクロールバーを追加して、ユーザーに表示されないように負の位置に配置して、それによって何かが変わるかどうかを確認してください。

于 2009-07-07T15:15:23.207 に答える