5

有什么方法可以向操作系统发送多媒体控制命令,例如下一首歌曲、暂停、播放、音量提高等?Fn按下+ some mapped时发送的命令..key。我正在为 PC 制作遥控器,发送这些命令是必不可少的。

4

3 回答 3

3

您可以使用 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);
    }`
于 2017-01-08T16:18:34.830 回答
2

实际上,答案dxramax给了我不稳定的行为。我发布了这个答案,它给了我一致的行为,并且还有一些更多的细节。

要发送多媒体键,包括Play/PauseNextTrackPrevTrack等,您可以使用keybd_event

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课程很好,但也很有限。上述方法将按键命令直接发送到 Windows 操作系统。

于 2020-10-22T19:51:49.237 回答
0

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

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

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

于 2013-02-22T00:52:30.660 回答