登录RDP时播放/暂停本地音乐



我的大部分工作都是通过远程桌面连接完成的。我经常在工作的时候在我的本地机器上听音乐。我知道这是一件小事,但是当我需要暂停我的音乐时,我必须首先最小化我的RDP会话,以便我的键盘宏将应用于本地机器而不是远程机器。

我尝试创建一个简单的c#应用程序,将模拟按键播放/暂停,下一步,之前,但这并不能解决我的问题,因为它仍然模拟按键。我的问题是如何在不减少RDP会话的情况下控制本地机器上的音乐?

这是我目前使用的代码,也许我需要一个不同的方法?

{
[DllImport("user32.dll")]
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);
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
public const int VK_VOLUME_UP = 0xAF;
public const int VK_VOLUME_DOWN = 0xAE;
public const int VK_VOLUME_MUTE = 0xAD;
static void Main(string[] args)
{

var command = args[0];
switch (command) {
case "previous":
Console.WriteLine($"command = {command}");
// Jump to previous track
keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
break;
case "play/pause":
Console.WriteLine($"command = {command}");
// Play or Pause music
keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
break;
case "next":
Console.WriteLine($"command = {command}");
// Jump to next track
keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
break;
case "up":
Console.WriteLine($"command = {command}");
// Jump to next track
keybd_event(VK_VOLUME_UP, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
break;
case "down":
Console.WriteLine($"command = {command}");
// Jump to next track
keybd_event(VK_VOLUME_DOWN, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
break;
case "mute":
Console.WriteLine($"command = {command}");
// Jump to next track
keybd_event(VK_VOLUME_MUTE, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
break;
default:
Console.WriteLine($"command = NOT RECOGNIZED");
break;
}
}
}```

我最终获得了我的计算机Desktop的句柄,并将其传递到keydb_event中。

class Program
{
[DllImport("user32.dll")]
static extern IntPtr GetDesktopWindow();

[DllImport("user32.dll")]
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);
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
public const int VK_VOLUME_UP = 0xAF;
public const int VK_VOLUME_DOWN = 0xAE;
public const int VK_VOLUME_MUTE = 0xAD;
static void Main(string[] args)
{
var command = args[0];
var handle = GetDesktopWindow();
switch (command) {
case "previous":
Console.WriteLine($"command = {command}");
// Jump to previous track
keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, handle);
break;
case "play/pause":
Console.WriteLine($"command = {command}");
// Play or Pause music
keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, handle);
break;
case "next":
Console.WriteLine($"command = {command}");
// Jump to next track
keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, handle);
break;
case "up":
Console.WriteLine($"command = {command}");
// Jump to next track
keybd_event(VK_VOLUME_UP, 0, KEYEVENTF_EXTENTEDKEY, handle);
break;
case "down":
Console.WriteLine($"command = {command}");
// Jump to next track
keybd_event(VK_VOLUME_DOWN, 0, KEYEVENTF_EXTENTEDKEY, handle);
break;
case "mute":
Console.WriteLine($"command = {command}");
// Jump to next track
keybd_event(VK_VOLUME_MUTE, 0, KEYEVENTF_EXTENTEDKEY, handle);
break;
default:
Console.WriteLine($"command = NOT RECOGNIZED");
break;
}

最新更新