2013-02-21 114 views
2

有什么方法可以将多媒体控制命令发送到操作系统,如下一首歌曲,暂停,播放,启动等等? 按下时发送的命令Fn +某些映射..key。 我正在制作PC的遥控器,并发送这些命令是至关重要的。发送多媒体命令

+1

类[的SendKeys(http://msdn.microsoft.com/ en-us/library/system.windows.forms.sendkeys.aspx)将发送命令给现有程序。 – 2013-02-21 22:40:51

+1

请参阅http://stackoverflow.com/questions/8986417/codes-of-multimedia-keys?rq=1 – 2013-02-21 22:41:50

+0

是的,但这并不奏效。当我使用SendKeys.Send(“{MediaNextTrack}”);我收到错误“关键字”MediaNextTrack“无效”。正确使用{}方括号? – Milan 2013-02-21 22:59:07

回答

0

不幸的是,在大多数情况下,密钥Fn无法使用Windows API发送,因此 - 使用.NET类。这取决于制造商如何完成此功能。可能是由额外的驱动程序支持,甚至超过操作系统。

您可以检查是否有可能通过尝试使用Windows API code或类似AutoHotKey一些应用程序挂接他们从代码发送FN命令。例如,在我的笔记本电脑上,我无法挂接多媒体命令。

否则,如果你很幸运,请使用SendKeys,如评论中所述。

+0

是的,这只是我的问题,我不能发送Fn +的组合,我猜Fn键没有直接连接到操作系统,但它更多的是一个硬件键,挂钩到键盘控制器,改变键码这将被发送到操作系统。无论如何,我的主要想法不是发送键盘组合,而是导致系统音量升高或降低的事件(或任何它)。 – Milan 2013-02-22 08:59:01

+0

@米兰,这样的事件是非常可靠的设备制造商。你需要以某种方式重用驱动程序。我不相信有任何文件。 – 2013-02-22 10:08:58

1

您可以使用keybd_event模拟按键按下,你必须模拟键不放,然后以键以正确识别

[DllImport("user32.dll", SetLastError = true)] 
    public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo); 
    public const int VK_MEDIA_NEXT_TRACK = 0xB0; 
    public const int VK_MEDIA_PLAY_PAUSE = 0xB3; 
    public const int VK_MEDIA_PREV_TRACK = 0xB1; 
    public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag 
    public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag 

    private void ButtonClick(object sender, EventArgs e) 
     keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); 
     keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_KEYUP, IntPtr.Zero); 
    }`