2009-11-15 72 views
11

无论何时触发我的C#程序中使用的消息框,我的计算机都会发出非常烦人的嘟嘟声。如何使用C#代码禁用此嘟嘟声。如何禁用c#消息框嘟嘟声?

我使用的代码非常简单。

MessageBox.show("text"); 
+0

我相信没有办法控制这个单独的消息框;这是一个窗口设置。这是否使这个问题属于superuser.com? – dtb 2009-11-15 22:00:34

+2

我在问是否有任何C#代码可以写入,以使哔声离开我的程序。我并没有要求只针对我的系统进行设置。我会澄清我的问题。 – 2009-11-15 22:05:33

回答

15

从我做它看起来像蜂鸣硬连线到搜索在Win32消息框功能:

因此,您需要编写自己的方法或停止硬件中的嘟嘟声。前者将为每个人工作,后者只为你。

+4

用于编写自己的对话框方法/类的+1。 – TrueWill 2009-11-15 22:03:54

+0

这里的另一篇文章为那些谁觉得给自己创造自己的MessageBox替换:http://www.codeproject.com/Articles/19711/Creating-A-Custom-Message-Box-Part – RenniePet 2016-09-07 20:34:35

5

这听起来很奇怪,直到你尝试过它。打开命令提示符下,键入:

net stop beep 

我做了一个快速谷歌和发现了其他4种方式:

  1. 本地机器:SC停止哔& & sc配置嘟开始=禁用
  2. 远程机器:sc \ remoteMachine stop beep & & sc \ remoteMachine config beep start = disabled
  3. 需要重启:设备管理器 - >查看 - >显示隐藏设备 - >非插件和播放 - >嘟 - >禁用
  4. 使用的TweakUI:常规>设置 - >取消选中哔声错误

(from here)

+0

+1也许有点笨重,这取决于需要。 – kenny 2009-11-16 00:34:33

2

根据您利用MessageBox(图标等)的多少,您始终可以创建自定义对话框。特别是如果它是一个简单的消息,你想要显示,这并不困难或耗时。

3

你应该让它给最终用户来决定他想要什么声音。 他可以配置/禁用系统事件的声音,例如控制面板/声音和音频设备/声音/程序事件中的消息框。

停止哔声服务需要管理权限,而且通常不会为一个应用程序执行某些操作。

如果您确实需要自定义对话框来替换MessageBox,请记得执行CTL-C(复制邮箱内容到剪贴板)。

4

尝试使用VisualBasic MsgBox类而不是MessageBox。我无法解释为什么,但在我的电脑上,VisualBasic没有发出哔声。

http://msdn.microsoft.com/en-us/library/sfw6660x%28VS.85%29.aspx

所以不是:

MessageBox.Show("text") 

做:

MsgBox("text") 

你必须从Microsoft.VisualBasic程序导入MsgBox函数,而不是从系统导入的MessageBox。 Windows.Forms的。但这不应该是一个问题;它是.NET api的一部分。

编辑:阿好,现在我可以解释它。缺乏声音是因为默认情况下,MessageBox的VB版本是未修饰的(即它不是信息性的,问题等)。我假设根本没有必要使用VB MsgBox类 - 可能如果您将常规的旧MessageBox装饰成未修饰的,它也不会发出任何声音。 :)

4

下面是我如何解决这个小问题。

添加这个简单的类项目。这是我的个人库的一部分,但现在你可以直接在项目中添加类

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace MyCSharpLibrary 
{ 
    public class Volume 
    { 
     [DllImport("winmm.dll")] 
     public static extern int waveOutGetVolume(IntPtr h, out uint dwVolume); 

     [DllImport("winmm.dll")] 
     public static extern int waveOutSetVolume(IntPtr h, uint dwVolume); 

     private static uint _savedVolumeLevel; 
     private static Boolean VolumeLevelSaved = false; 

     // ---------------------------------------------------------------------------- 
     public static void On() 
     { 
      if (VolumeLevelSaved) 
      { 
       waveOutSetVolume(IntPtr.Zero, _savedVolumeLevel); 
      } 
     } 

     // ---------------------------------------------------------------------------- 
     public static void Off() 
     { 
      waveOutGetVolume(IntPtr.Zero, out _savedVolumeLevel); 
      VolumeLevelSaved = true; 

      waveOutSetVolume(IntPtr.Zero, 0); 
     } 
    } 
} 

现在,经过

Volume.Off(); 
MessageBox.Show("\n Information \n", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); 
Volume.On(); 

调用的MessageBox和Volume.On()之前调用Volume.Off()我喜欢这种方法,因为我不必对Windows进行修改,我可以选择任何我想要用于我的MessageBox的图标。

谢谢,再见

+0

使用方法将导致整个窗口音量静音,如果用户正在听音乐怎么办?他会静一会儿 – advapi 2017-07-26 06:22:12

1

尽管这个问题是老我有同样的问题,但能够解决它的一个非常简单的方法。

MessageBox.Show("Your text here", "Information", MessageBoxButtons.OK, MessageBoxIcon.None); 

通过将MessageBoxIcon设置为None,系统不会产生声音。但是,盒子上没有图标。类似于this