c# - 如果特定的 Windows 窗体打开,如何停止媒体播放器?视觉工作室 C#
问题描述
我正在为学校作业制作游戏。带有使用 WMP 的背景音乐,其中一项规范是关闭背景音乐。进入其中一种游戏模式时。游戏的编码方式是它为特定打开一个新窗口。游戏模式。但我无法暂停/停止音乐窗口特定的窗口已打开根据我的编程基本知识,它可能是使用 IF 语句。特定窗口打开,音乐停止。这是我最好的主意
解决方案
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);
}
推荐阅读
- python - 从列表列表中删除重复项
- php - PHP重新排序包含重复项目的数组以在重复项目之间建立/保持距离
- mysql - 无法添加外键约束 errno: 1215 sequlize/mysql
- memory-management - vmalloc_init() 函数中的 for_each_possible_cpu 宏,代码是否仅在一个 cpu 中运行?还是在每个 CPU 中?
- c# - 无法通过查询定位 upsert :: 无法提取确切的分片键
- node.js - RemixD 未连接到文件夹
- c++ - 在 std::map 中,如何编写分配器来接受键作为值的构造函数参数?
- laravel - 我们如何在 where 子句中使用自定义方法?
- arrays - XSLT:如何在 for-each 中对 XML 结果进行分组
- mysql - 在 Spring Data JPA 中构建 FULLTEXT 搜索 SQL Native Query