簡體   English   中英

如何禁用c#消息框嗶聲?

[英]How do I disable the c# message box beep?

每當觸發我的C#程序中使用的消息框時,我的計算機都會發出非常煩人的嗶嗶聲。 如何使用C#代碼禁用此蜂鳴聲。

我使用的代碼非常簡單。

MessageBox.show("text");

從搜索到我已經完成它看起來像蜂鳴聲硬連線到Win32消息框功能:

因此,您需要編寫自己的方法或停止硬件中的蜂鳴聲。 前者適合所有人,后者適合你。

這就是我解決這個小問題的方法。

將這個簡單的類添加到您的項目中。 它現在是我個人圖書館的一部分,但您可以直接在項目中添加該類

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);
        }
    }
}

現在在調用MessageBox和Volume.On()之后調用Volume.Off()

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

我更喜歡這種方法,因為我不必對Windows進行修改,我可以為MessageBoxes選擇任何我想要的圖標。

謝謝你,再見

在您嘗試之前,這聽起來很奇怪。 打開命令提示符,鍵入:

net stop beep

我做了一個快速的谷歌,並找到了4個其他方式:

  1. 本地機器:sc停止beep && sc config beep start = disabled
  2. 遠程機器:sc \\ remoteMachine停止蜂鳴&& sc \\ remoteMachine配置beep start = disabled
  3. 需要重啟:設備管理器 - >查看 - >顯示隱藏設備 - >非即插即用 - >蜂鳴聲 - >禁用
  4. 使用TweakUI:常規>設置 - >取消選中錯誤上的蜂鳴聲

(從這里)

嘗試使用VisualBasic MsgBox類而不是MessageBox。 我無法解釋原因,但在我的計算機上,VisualBasic不會發出嗶嗶聲。

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

所以代替:

MessageBox.Show("text")

做:

MsgBox("text")

您必須從Microsoft.VisualBasic導入MsgBox函數,而不是從System.Windows.Forms導入MessageBox。 但那應該不是問題; 它是.NET API的一部分。

編輯:好的,現在我可以解釋一下。 缺少聲音是因為默認情況下,MessageBox的VB版本未修飾(即,它不是信息,問題等)。 我假設畢竟沒有真正需要使用VB MsgBox類 - 可能如果你使常規的舊MessageBox未修飾,它也不會發出任何聲音。 :)

您應該將它留給最終用戶來決定他想要的聲音。 他可以為系統事件配置/禁用聲音,例如控制面板/聲音和音頻設備/聲音/節目事件中的消息框。

停止蜂鳴聲服務需要管理權限,而不是通常只為一個應用程序執行的操作。

如果您確實要使用自定義對話框來替換MessageBox,請記住實現CTL-C(將消息框內容復制到剪貼板)。

盡管這個問題很老,但我遇到了同樣的問題但能夠以一種非常簡單的方式解決它。

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

通過將MessageBoxIcon設置為None ,系統不會產生聲音。 但是,盒子上沒有圖標。 這樣的東西。

根據您使用MessageBox(圖標等)的程度,您可以隨時進行自定義對話。 特別是如果它是一個你想要顯示的簡單信息,這將不困難或耗時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM