如何使用C#(.NET)播放Windows硬件插入与移除提示音?
在C#控制台应用中播放Windows硬件插拔提示音
SystemSounds仅封装了基础系统提示音(如感叹、警告音),无法直接触发硬件插入/移除这类特定系统事件的声音。要实现需求,需调用Windows原生的PlaySound API来播放对应系统事件的声音。
实现步骤
- 导入Win32的
PlaySound函数,通过DllImport实现跨平台调用(仅Windows有效)。 - 定义系统事件对应的声音名称(硬件插入为
DeviceConnect,移除为DeviceDisconnect)。 - 调用
PlaySound并传入对应参数触发声音播放。
完整代码示例
using System; using System.Runtime.InteropServices; using System.Threading; class HardwareSoundPlayer { [DllImport("winmm.dll", CharSet = CharSet.Unicode)] private static extern bool PlaySound(string soundName, IntPtr moduleHandle, uint soundFlags); // 播放系统事件声音的标志位 private const uint SND_SYSTEM = 0x00010000; private const uint SND_ASYNC = 0x0001; // 异步播放,不阻塞主线程 /// <summary> /// 播放硬件插入提示音 /// </summary> public static void PlayDeviceConnected() { PlaySound("DeviceConnect", IntPtr.Zero, SND_SYSTEM | SND_ASYNC); } /// <summary> /// 播放硬件移除提示音 /// </summary> public static void PlayDeviceDisconnected() { PlaySound("DeviceDisconnect", IntPtr.Zero, SND_SYSTEM | SND_ASYNC); } } class Program { static void Main(string[] args) { HardwareSoundPlayer.PlayDeviceConnected(); Thread.Sleep(2000); // 延迟2秒后播放移除声音 HardwareSoundPlayer.PlayDeviceDisconnected(); Console.WriteLine("声音播放完成"); Console.ReadKey(); } }
说明
SND_SYSTEM标志确保播放的是当前用户系统声音方案中配置的硬件插拔声音,而非固定音频文件。SND_ASYNC让声音异步播放,避免阻塞控制台程序的执行流程。- 事件名称
DeviceConnect和DeviceDisconnect是Windows系统预定义的,对应注册表HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default下的事件项。 - 若使用.NET Core/.NET 5+,需确保项目目标平台为Windows(可在项目文件中设置
<TargetFramework>net6.0-windows</TargetFramework>)。
内容的提问来源于stack exchange,提问作者Jodo
相关产品推荐
相关产品推荐

