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