0

コンピューターに付属の Media Center Remote Control で制御できる、非常に単純な C# Windows フォーム アプリケーション (または WPF) を作成したいと考えています。これは、リモートからメッセージを受信して​​適切な関数を呼び出すイベント リスナーを持つ非常に単純なアプリです。その方法を説明しているこの記事を見つけましたが、フォローアップできませんでした: http://msdn.microsoft.com/en-us/library/windows/desktop/bb417079.aspx この記事を何度も読みましたまだ私はそれを実行する方法がわかりません。HID プログラミングに関しては初心者なので、できるだけ明確かつ詳細に説明してください。完全な例をいただければ幸いです。ありがとうございました

コーリーありがとうあなたの答えは非常に役に立ちました.私はそれを私が見つけた別のコードと混ぜました: http://discuss.mediacentersandbox.com/forums/thread/8549.aspx そしてそれはうまくいきました

4

1 に答える 1

1

テストする Media Center Remote はありませんが、見つけたものから...

MC リモコンのボタンを押すと、WM_APPCOMMAND、WM_KEYDOWN、または WM_INPUT の 3 種類のメッセージのいずれかがアプリケーションに送信されます。最初の 2 つはかなり単純で、合成キーボードの操作だけです。難しいのは3つ目です。

まず、アプリケーションが対象とするデータを示す構造体RegisterRawInputDevicesの配列を使用して呼び出す必要がありRAWINPUTDEVICEます。この場合、ボタンの大部分を取得するには、少なくとも Page 0x000C コレクション 0x01 と Page 0xFFBC コレクション 0x88 が必要です。スタンバイ ボタンを処理する場合は、ページ 0x0001 コレクション 0x80 も必要です。

その呼び出しの後、各ボタンの WM_INPUT メッセージを取得します。複数のイベントのデータを含むことができるという事実を超えて、HIDRAW 構造の内容の適切な説明を見つけられなかったので、これは現時点で私ができる限りです。ボタン使用 ID 列から、適切なコードを見つけられるかどうかを確認することをお勧めします。


編集: メッセージの処理

WM_APPCOMMAND メッセージを処理するにWndProcは、フォームのメソッドをオーバーライドする必要があります。

// Some of the named constants:
const int WM_APPCOMMAND = 0x0319;
const int APPCOMMAND_BROWSER_BACK = 1;
const int APPCOMMAND_MEDIA_CHANNEL_DOWN = 52;
const int APPCOMMAND_MEDIA_CHANNEL_UP = 51;
const int APPCOMMAND_MEDIA_FAST_FORWARD = 49;
const int APPCOMMAND_VOLUME_MUTE = 8;
const int APPCOMMAND_MEDIA_PAUSE = 14;

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_APPCOMMAND)
    {
        int lParam = unchecked ((int)m.LParam);
        int cmd = unchecked ((short)((uint)lParam>>16));
        switch (cmd)
        {
            case APPCOMMAND_BROWSER_BACK:
                // process 'back' button
                break;

            case APPCOMMAND_MEDIA_CHANNEL_DOWN:
                // process 'channel down' command
                break;
        }
    }
    base.WndProc(ref m);
}

他にもありますが、要点は以上です。さまざまな名前付き定数の値を見つける必要があります。

于 2014-05-04T21:38:06.690 に答える