1

我希望你们能帮助我。我有一个用 C# 编写的小型 Windows 应用程序,它本质上是一个服务器,用于侦听来自 Android 设备的 HTTP 调用。该应用程序基本上充当遥控器 - 如果它听到静音,它将静音计算机的音量,依此类推。我的问题是我在暂停前台应用程序时遇到了一些问题。我特别想模仿这些天你在这么多键盘上看到的播放/暂停按钮。我这样做的方法是使用 Windows 输入模拟器项目(http://inputsimulator.codeplex.com/) 来模拟播放/暂停键。不幸的是,我没有得到任何类型的可辨别的反应——没有什么特别的事情发生。害怕我的设置,我将 VirtualKeyCode.MEDIA_PLAY_PAUSE 标志切换为静音键标志并成功地将我的机器静音。请注意,我使用的是 Windows Media Player,因此我确信它正在监听呼叫。

我想知道的是,在暂停当前正在播放的任何媒体之前,我需要做任何额外的设置吗?除了模拟按键之外,还有其他方法可以实现我的目标吗?任何帮助将不胜感激!

4

1 回答 1

4

要模拟媒体播放/暂停按钮的按下,您需要使用 SendMessage 传递 WM_APPCOMMAND 消息。

[DllImport("user32.dll")]
extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
int WM_APPCOMMAND = 0x0319;

然后当你想模拟按下暂停按钮的时候。

void AppCommand(AppComandCode commandCode)
{
    var windowInteropHelper = new WindowInteropHelper(this);

    int CommandID = (int)commandCode << 16;
    SendMessageW(windowInteropHelper.Handle, WM_APPCOMMAND, windowInteropHelper.Handle, (IntPtr)CommandID);
}

如果您的应用程序不是 WPF 应用程序,请尝试使用此功能

void AppCommand(AppComandCode commandCode)
{
    int CommandID = (int)commandCode << 16;
    SendMessageW(Process.GetCurrentProcess().MainWindowHandle, WM_APPCOMMAND, Process.GetCurrentProcess().MainWindowHandle, (IntPtr)CommandID);
}

其中命令代码是以下之一:

public enum AppComandCode : uint
{
    BASS_BOOST = 20,
    BASS_DOWN = 19,
    BASS_UP = 21,
    BROWSER_BACKWARD = 1,
    BROWSER_FAVORITES = 6,
    BROWSER_FORWARD = 2,
    BROWSER_HOME = 7,
    BROWSER_REFRESH = 3,
    BROWSER_SEARCH = 5,
    BROWSER_STOP = 4,
    LAUNCH_APP1 = 17,
    LAUNCH_APP2 = 18,
    LAUNCH_MAIL = 15,
    LAUNCH_MEDIA_SELECT = 16,
    MEDIA_NEXTTRACK = 11,
    MEDIA_PLAY_PAUSE = 14,
    MEDIA_PREVIOUSTRACK = 12,
    MEDIA_STOP = 13,
    TREBLE_DOWN = 22,
    TREBLE_UP = 23,
    VOLUME_DOWN = 9,
    VOLUME_MUTE = 8,
    VOLUME_UP = 10,
    MICROPHONE_VOLUME_MUTE = 24,
    MICROPHONE_VOLUME_DOWN = 25,
    MICROPHONE_VOLUME_UP = 26,
    CLOSE = 31,
    COPY = 36,
    CORRECTION_LIST = 45,
    CUT = 37,
    DICTATE_OR_COMMAND_CONTROL_TOGGLE = 43,
    FIND = 28,
    FORWARD_MAIL = 40,
    HELP = 27,
    MEDIA_CHANNEL_DOWN = 52,
    MEDIA_CHANNEL_UP = 51,
    MEDIA_FASTFORWARD = 49,
    MEDIA_PAUSE = 47,
    MEDIA_PLAY = 46,
    MEDIA_RECORD = 48,
    MEDIA_REWIND = 50,
    MIC_ON_OFF_TOGGLE = 44,
    NEW = 29,
    OPEN = 30,
    PASTE = 38,
    PRINT = 33,
    REDO = 35,
    REPLY_TO_MAIL = 39,
    SAVE = 32,
    SEND_MAIL = 41,
    SPELL_CHECK = 42,
    UNDO = 34,
    DELETE = 53,
    DWM_FLIP3D = 54
}
于 2013-11-20T04:55:18.937 回答