Cómo reproducir, pausar, saltar a previa y siguiente canción en C# Winforms (válido para todos los reproductores de música)

Cómo reproducir, pausar, saltar a previa y siguiente canción en C# Winforms (válido para todos los reproductores de música)

En este artículo te mostraremos como ejecutar las tareas básicas de un reproductor de música usando C#. Pero en este caso no nos referimos a crear un reproductor musical en winforms y manipularlo con C#, esta vez aprendaras como ejecutar esas tareas en todo Windows.

Si, windows entero, esto incluye todos los reproductores de música conocidos como iTunes, Spotify, VLC etc. Esta tarea será llevada a cabo mediante la simulación de un evento keypress del sistema usando la DLL user32.dll y la función keybd_event, de la misma manera en la que lo ejecutan los botones en tu teclado.

Implementación

Para comenzar, no olvides incluir el siguiente namespace en tu clase que nos permitira importar la DLL más tarde:

using System.Runtime.InteropServices;

Luego importa la DLL user32 en tu proyecto usando DLLImport, esta API te permitira usar el método keybd_event que usaremos para simular el evento keypress de algunas teclas en el sistema. Inmediatamente create tambien el método para tener una referencia en nuestro proyecto:

[DllImport("user32.dll")]
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);

Con esta función podras simular cualquier evento de tecla en tu sistema usando el código equivalente. Ahora necesitas declarar algunas variables con los códigos de las teclas que queremos simular (en este caso las que reproducen, pausan etc). Simplemente declara las siguientes variables en tu clase (cuida que estas sean accesibles por todos los métodos que las usan para prevenir errores):

public const int KEYEVENTF_EXTENTEDKEY = 1;
public const int KEYEVENTF_KEYUP = 0;
public const int VK_MEDIA_NEXT_TRACK = 0xB0;// Saltar a siguiente canción
public const int VK_MEDIA_PLAY_PAUSE = 0xB3;// Reproducir o pausar canción
public const int VK_MEDIA_PREV_TRACK = 0xB1;// Saltar a canción anterior

Y ya está , para simular eventos puedes usar los siguiente métodos para llevar a cabo cada una de las acciones (con el código correspondiente), por ejemplo:

// Canción anterior
keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
// Reproducir o pausar
keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
// Siguiente canción
keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);

La función keybd_event espera como primer argument el código de la tecla que será simulada. Ahora simplemente tienes que agregar un par de botones a tu formulario y agregar los eventos correspondientes (por ejemplo un click).

Cuando lo logres, la implementación deberia funcionar correctamente ! el siguiente gif muestra como funciona la simulación de eventos usando la aplicación de escritorio de Spotify. Como has leido, esta aplicación no tiene nada de código de spotify o algo parecido, simplemente se simulará un evento de tecla en tu sistema, por lo tanto esta implementación funcionará en cualquier reproductor de música para windows.

Spotify desktop pausar reproducir c#

Clase completa

Tu clase finalmente, debería lucir similar a la siguiente (incluyendo eventos clicks etc):

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);
        }
    }
}

Que te diviertas!

Esto podría ser de tu interes

Conviertete en un programador más sociable