Play/Pause 登录 RDP 时的本地音乐
Play/Pause Local Music While Logged Into RDP
我的大部分工作都是通过远程桌面连接完成的。工作时我会经常在本地机器上听音乐。我知道这是一件小事,但当我需要暂停我的音乐时,我必须首先最小化我的 RDP 会话,以便我的键盘宏将应用于本地机器而不是远程机器。
我尝试创建一个简单的 c# 应用程序,它将模拟 play/pause、下一步、上一步的按键,但这并不能解决我的问题,因为它仍在模拟按键。我的问题是如何在不最小化 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;
}
}
}```
我最终获得了我的计算机桌面的句柄并将其传递到 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;
}
我的大部分工作都是通过远程桌面连接完成的。工作时我会经常在本地机器上听音乐。我知道这是一件小事,但当我需要暂停我的音乐时,我必须首先最小化我的 RDP 会话,以便我的键盘宏将应用于本地机器而不是远程机器。
我尝试创建一个简单的 c# 应用程序,它将模拟 play/pause、下一步、上一步的按键,但这并不能解决我的问题,因为它仍在模拟按键。我的问题是如何在不最小化 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;
}
}
}```
我最终获得了我的计算机桌面的句柄并将其传递到 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;
}