在Windows媒体中心c#之外使用远程控制输入
本文关键字:远程控制 输入 Windows 媒体 | 更新日期: 2023-09-27 18:01:33
我想做一个非常简单的c# windows窗体应用程序(或WPF),可以由计算机自带的媒体中心远程控制控制。这是一个非常简单的应用程序,它有一个事件侦听器,用于接收来自远程的消息并调用适当的函数。我找到了这篇文章,解释了如何做到这一点,但我无法跟进:http://msdn.microsoft.com/en-us/library/windows/desktop/bb417079.aspx这篇文章我读了很多遍,但我不知道如何执行它。在HID编程方面,我是个新手,所以请尽可能的清晰和详细。一个完整的例子将是赞赏。谢谢你
谢谢你Corey,你的回答很有帮助,我把它和我发现的另一个代码混合在一起:http://discuss.mediacentersandbox.com/forums/thread/8549.aspx它成功了我没有媒体中心遥控器来测试,但从我能找到的…
按MC遥控器上的按钮将导致三种类型的消息之一被发送到您的应用程序:WM_APPCOMMAND, WM_KEYDOWN或WM_INPUT。前两个非常简单——只是合成键盘交互。第三个比较难。
首先,您需要使用RAWINPUTDEVICE
结构数组调用RegisterRawInputDevices
,这些结构数组指示应用程序感兴趣的数据。在这种情况下,您至少需要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);
}
还有更多,但这是要点。您需要找到各种命名常量的值。