本文概述
你可以使用此代码段停止Windows音乐, 是的, 如果使用以下代码, 你将能够停止(或跳至下一首和上一首曲目)Windows音乐。这意味着我们将对任何活动的音乐播放器做出响应。这可以归功于使用user32.dll和keybd_event函数对系统的按键进行模拟。
实施中
首先, 我们需要在项目的主类中包含以下名称空间。
using System.Runtime.InteropServices;
然后, 我们将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 track
public const int VK_MEDIA_PLAY_PAUSE = 0xB3;// code to play or pause a song
public const int VK_MEDIA_PREV_TRACK = 0xB1;// code to jump to prev track
要模拟事件, 请使用以下代码行(每行的功能有所不同, 队长很明显):
// Jump to previous track
keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
// Play or Pause music
keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
// Jump to next track
keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
keybd_event函数期望将要模拟的密钥代码作为第一个参数。现在, 你只需要在表单中添加几个按钮, 并将这些功能附加到单击按钮的事件上即可。
最终的实现方式应该像超级按钮一样工作, 以下gif显示了该应用程序与Spotify音乐配合使用。你可能知道此应用程序没有任何Spotify代码或其他任何内容, 它只会在系统上模拟键盘事件。因此, 此功能适用于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);
}
}
}
玩得开心 !
评论前必须登录!
注册