You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#(.NET)播放Windows硬件插入与移除提示音?

在C#控制台应用中播放Windows硬件插拔提示音

SystemSounds仅封装了基础系统提示音(如感叹、警告音),无法直接触发硬件插入/移除这类特定系统事件的声音。要实现需求,需调用Windows原生的PlaySound API来播放对应系统事件的声音。

实现步骤

  1. 导入Win32的PlaySound函数,通过DllImport实现跨平台调用(仅Windows有效)。
  2. 定义系统事件对应的声音名称(硬件插入为DeviceConnect,移除为DeviceDisconnect)。
  3. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:21:03