テストする 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);
}
他にもありますが、要点は以上です。さまざまな名前付き定数の値を見つける必要があります。