2013-02-21 129 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); 
    }`