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

如何为Windows控制台应用注册系统声音事件?

可研究的方向

1. 调用Windows原生音频API

Windows提供了专门用于播放系统事件声音的原生接口,你可以通过C#的P/Invoke直接调用:

  • PlaySound函数:这是最直接的方案,支持播放系统注册的事件声音别名(而非具体文件路径)。示例代码如下:

    using System.Runtime.InteropServices;
    
    class SystemSoundPlayer
    {
        [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)]
        private static extern bool PlaySound(string szSound, IntPtr hMod, uint fdwSound);
    
        // 播放系统默认通知声音
        public static void PlayNotificationSound()
        {
            // SND_ALIAS标志表示传入的是系统声音别名
            PlaySound("Notification.Default", IntPtr.Zero, 0x00010000);
        }
    }
    

    这里的核心是要匹配控制面板中Program Events对应的别名名称,比如"SystemAsterisk"(星号提示音)、"SystemExit"(退出提示音)等。

  • Windows Runtime API:如果你的应用基于.NET Core/.NET 5+,可以使用Windows.Media.SoundPlayer或Windows.Media.Playback.MediaPlayer,不过需要注意控制台应用启用WinRT API的相关配置。

2. 读取注册表获取系统事件声音配置

所有Program Events的关联音频文件路径都存储在系统注册表中,你可以直接读取后播放:

  • 注册表路径:HKEY_CURRENT_USER\AppEvents\Schemes\Apps
    • 默认系统事件在.Default子项下方,每个子项对应一个Program Event
    • 用Microsoft.Win32.Registry类读取对应事件的默认声音路径,再通过System.Media.SoundPlayer播放即可。

3. 为应用注册自定义Program Event

如果想让用户在控制面板的声音设置里看到你的应用专属事件(类似Visual Studio的配置项),可以在注册表中添加自定义项:

  • 在HKEY_CURRENT_USER\AppEvents\Schemes\Apps下创建以你应用名称命名的子项,再添加自定义事件子项。用户就能在控制面板中为这些事件配置声音,你的应用后续可通过PlaySound调用自定义别名播放。

4. 使用第三方音频库简化开发

若不想直接处理P/Invoke和注册表操作,可以使用封装好的.NET音频库,比如NAudio——它提供了更简洁的API来查找、播放系统事件声音,同时支持多种音频格式的播放。

内容的提问来源于stack exchange,提问作者Igor Popov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:05:32