发送多媒体命令

时间:2013-02-21 22:38:28

标签: c#

有没有办法可以向操作系统发送下一首歌,暂停,播放,加注等多媒体控制命令? 按 Fn +某些映射 ..键时发送的命令。 我正在为PC制作遥控器,发送这些命令至关重要。

3 个答案:

答案 0 :(得分: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);
    }`

答案 1 :(得分:0)

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

您可以通过尝试使用Windows API code或某些应用程序(如AutoHotKey)挂钩来检查是否可以从代码中发送 Fn 命令。例如,在我的笔记本电脑上,我无法挂钩多媒体命令。

否则,如果您幸运,请使用评论中提到的SendKeys

答案 2 :(得分:0)

实际上,dxramax的答案给了我不稳定的行为。我发布的答案可以使我保持一致的行为,并提供更多详细信息。

要发送多媒体键,包括播放/暂停 NextTrack PrevTrack 等,您可以使用keybd_event:< / p>

public class Program
{
    public const int KEYEVENTF_EXTENTEDKEY = 1;
    public const int KEYEVENTF_KEYUP = 0;
    public const int VK_MEDIA_NEXT_TRACK = 0xB0;
    public const int VK_MEDIA_PLAY_PAUSE = 0xB3;
    public const int VK_MEDIA_PREV_TRACK = 0xB1;

    [DllImport("user32.dll")]
    public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);

    public static void Main(string[] args)
    {
        keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);    // Play/Pause

        //keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);  // PrevTrack
        //keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);  // NextTrack
    }

以下是此Windows API可以处理的受支持的键代码的列表:
https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

SendKeys类非常好,但是它也受到限制。上面的方法将key命令直接发送到Windows操作系统。