有什么方法可以向操作系统发送多媒体控制命令,例如下一首歌曲、暂停、播放、音量提高等?Fn按下+ some mapped时发送的命令..key。我正在为 PC 制作遥控器,发送这些命令是必不可少的。
问问题
2142 次
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/Pause、NextTrack、PrevTrack等,您可以使用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 回答