如何使用C#从Windows播放,暂停音乐或转到下一首和上一首曲目(适用于所有Windows音乐播放器)

本文概述

  • 实施中
  • 完成课程
你可以使用此代码段停止Windows音乐, 是的, 如果使用以下代码, 你将能够停止(或跳至下一首和上一首曲目)Windows音乐。这意味着我们将对任何活动的音乐播放器做出响应。这可以归功于使用user32.dll和keybd_event函数对系统的按键进行模拟。
实施中 首先, 我们需要在项目的主类中包含以下名称空间。
using System.Runtime.InteropServices;

【如何使用C#从Windows播放,暂停音乐或转到下一首和上一首曲目(适用于所有Windows音乐播放器)】然后, 我们将user32.dll导入到我们的项目中, 此api将允许我们获取keybd_event函数的访问权限, 该函数将用于模拟系统中的几次按键操作。立即也使用以下方法创建方法:
[DllImport("user32.dll")]public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);

现在, 我们可以模拟播放暂停JumpToNextTrack或JumpToPreviousTrack所需的按键事件, 但是我们也需要在in变量中声明要模拟的按键代码。只需在类中添加以下变量(请注意, 所有方法都必须使用它们):
public const int KEYEVENTF_EXTENTEDKEY = 1; public const int KEYEVENTF_KEYUP = 0; public const int VK_MEDIA_NEXT_TRACK = 0xB0; // code to jump to next trackpublic const int VK_MEDIA_PLAY_PAUSE = 0xB3; // code to play or pause a songpublic const int VK_MEDIA_PREV_TRACK = 0xB1; // code to jump to prev track

要模拟事件, 请使用以下代码行(每行的功能有所不同, 队长很明显):
// Jump to previous trackkeybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero); // Play or Pause musickeybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero); // Jump to next trackkeybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);

keybd_event函数期望将要模拟的密钥代码作为第一个参数。现在, 你只需要在表单中添加几个按钮, 并将这些功能附加到单击按钮的事件上即可。
最终的实现方式应该像超级按钮一样工作, 以下gif显示了该应用程序与Spotify音乐配合使用。你可能知道此应用程序没有任何Spotify代码或其他任何内容, 它只会在系统上模拟键盘事件。因此, 此功能适用于Windows的任何音乐播放器。
如何使用C#从Windows播放,暂停音乐或转到下一首和上一首曲目(适用于所有Windows音乐播放器)

文章图片
完成课程 添加按钮时, 你的班级应如下所示:
using System; using System.Windows.Forms; using System.Runtime.InteropServices; namespace UniversalSandbox{public partial class Form1 : Form{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 Form1(){InitializeComponent(); }private void Form1_Load(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero); }private void button2_Click(object sender, EventArgs e){keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero); }private void button3_Click(object sender, EventArgs e){keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero); }}}

玩得开心 !

    推荐阅读