0

我想制作一个非常简单的 C# windows 窗体应用程序(或 WPF),可以通过计算机附带的 Media Center Remote Control 进行控制。这是一个非常简单的应用程序,它有一个事件侦听器,用于接收来自远程的消息并调用适当的函数。我发现这篇文章解释了如何做到这一点,但我无法跟进:http: //msdn.microsoft.com/en-us/library/windows/desktop/bb417079.aspx 我已经多次阅读这篇文章但我不知道如何执行它。我是 HID 编程的新手,所以请尽量做到清晰和详细。一个完整的例子将不胜感激。谢谢你

谢谢Corey,您的回答非常有帮助,我将它与我发现的另一个代码混合在一起:http: //discuss.mediacentersandbox.com/forums/thread/8549.aspx 它有效

4

1 回答 1

1

我没有要测试的媒体中心遥控器,但从我能找到的...

按下 MC 遥控器上的按钮将导致三种类型的消息之一发送到您的应用程序:WM_APPCOMMAND、WM_KEYDOWN 或 WM_INPUT。前两个相当简单——只是合成键盘交互。三是难度较大。

首先,您需要使用指示应用程序感兴趣的数据RegisterRawInputDevices的结构数组进行调用RAWINPUTDEVICE。在这种情况下,您至少需要 Page 0x000C Collection 0x01 和 Page 0xFFBC Collection 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 回答