首页 > 解决方案 > 如果特定的 Windows 窗体打开,如何停止媒体播放器?视觉工作室 C#

问题描述

我正在为学校作业制作游戏。带有使用 WMP 的背景音乐,其中一项规范是关闭背景音乐。进入其中一种游戏模式时。游戏的编码方式是它为特定打开一个新窗口。游戏模式。但我无法暂停/停止音乐窗口特定的窗口已打开根据我的编程基本知识,它可能是使用 IF 语句。特定窗口打开,音乐停止。这是我最好的主意

标签: c#

解决方案


static class MediaMixer
{

  static public void StopPlaying()
  {
    var input = new NativeMethods.INPUT { Type = 1 };
    input.Data.Keyboard = new NativeMethods.KEYBDINPUT
    {
      Vk = 0xB2,
      Scan = 0,
      Flags = 0,
      Time = 0,
      ExtraInfo = IntPtr.Zero
    };
    var inputs = new NativeMethods.INPUT[] { input };
    NativeMethods.SendInput(1, inputs, Marshal.SizeOf(typeof(NativeMethods.INPUT)));
  }

  static public void MuteVolume(IntPtr handle)
  {
    NativeMethods.SendMessageW(handle.Value,
                               NativeMethods.WM_APPCOMMAND,
                               handle.Value,
                               (IntPtr)NativeMethods.APPCOMMAND_VOLUME_MUTE);
  }


}
static class NativeMethods
{

  public const int WM_APPCOMMAND = 0x319;
  public const int APPCOMMAND_VOLUME_MUTE = 0x80000;

  [StructLayout(LayoutKind.Sequential)]
  public struct INPUT
  {
    public uint Type;
    public MOUSEKEYBDHARDWAREINPUT Data;
  }

  [StructLayout(LayoutKind.Sequential)]
  public struct KEYBDINPUT
  {
    public ushort Vk;
    public ushort Scan;
    public uint Flags;
    public uint Time;
    public IntPtr ExtraInfo;
  }

  [DllImport("user32.dll", SetLastError = true)]
  static public extern uint SendInput(uint numberOfInputs, 
                                      INPUT[] inputs,
                                      int sizeOfInputStructure);

}

推荐阅读