2008-12-05 25 views
3

我想从C#程序与SystemSounds玩不工作

System.Media.SystemSounds.Asterisk.Play(); 

,但没有播放声音播放的Asterisk系统声音。我的系统确实为Asterisk和其他程序(不是由我写的)设置了声音,从而导致播放各种系统声音。

任何人都可以提出任何可能的原因吗?

+0

使用对此代码的修改,是否可以使用其他任何系统声音?例如。使用Exclamation而不是Asterisk。 – RobS 2008-12-05 13:36:13

+0

扬声器是否设置为静音? ;) – shahkalpesh 2008-12-06 05:21:02

回答

4

我忽略了这个问题,直到今天,一些谷歌上搜索发现,这是一个相当普遍的问题,完全无关的.NET玩电话。

发生什么事是,虽然您可以播放/预览控制面板声音和音频设备小程序中的声音,但程序触发声音时它们不会播放。这似乎是程序安装造成的腐败。修复很简单。

HKEY_CURRENT_USER在注册表中的(默认)条目应该是(未设置值)。如果是别的东西(我的OfficeCompleted)删除条目(右键单击并选择删除),它将被重新创建为(未设置值)。然后应该播放系统声音。

1

很抱歉,如果这是拔高了明显...

  1. 确实正在执行这行代码?
  2. RobS建议做任何其他SystemSounds播放?

我看了一下反射器。无论您调用哪个SystemSounds,都会返回一个SystemSound实例,并根据您想要播放的系统声音的类型(例如Asterix的0x40)进行初始化。然后传递给Win32 bool MessageBeep(int type)方法。进口为:

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] 
internal static extern bool MessageBeep(int type); 

的布尔回报不保留以任何方式 - 即你不能让它:(

异常是不可吞食,所以你应该得到任何如果抛出

。希望帮助(尽管可能只是告诉你你已经知道)

1

我只晚了8年,但我刚刚在Windows 7平板电脑上遇到了这个问题。修复它的东西?经典Restart

尝试重新启动设备。