如题!

解决方案 »

  1.   

    据说
    在windows的system32/drivers/的目录下有个beep.sys的文件,把它删掉
    就可以了
      

  2.   

    你可以用SystemParametersInfo 输入参数SPI_SETBEEP 来完成这个操作Private  Declare Function SystemParametersInfo Lib "user32.dll" Alias  _
    "SystemParametersInfoA" (ByVal uAction As Long, ByVal uiParam As Long, _
      pvParam As Any, ByVal fWinIni As Long) As Long
    Private Const SPI_GETBEEP = 1
    Private Const SPI_SETBEEP = 2
    Private Const SPIF_SENDWININICHANGE = &H2
    Private Const SPIF_UPDATEINIFILE = &H1Private Function SetSysBeep(ByVal New_SysBeep As Boolean)
        SystemParametersInfo SPI_SETBEEP, CLng(New_SysBeep), 0&, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE
    End Function
    传如true,false来开关
      

  3.   

    to :ch21st(风尘鸟.shannon)谢谢,我试试先
      

  4.   

    SystemParametersInfo ?用在2000下可能无效
      

  5.   

    各位:我的系统是2000,当我在文本框中做有效性检查时,当有错误时弹出msgbox时
    有声音,怎样把弹出msgbox时的声音屏蔽掉?谢谢各位!!!
      

  6.   

    我就是在2000下测试的:
    我又加了一个get信息来验证是否修改成功Option Explicit
    Private Declare Function SystemParametersInfo Lib "user32.dll" Alias _
    "SystemParametersInfoA" (ByVal uAction As Long, ByVal uiParam As Long, _
      pvParam As Any, ByVal fWinIni As Long) As Long
    Private Const SPI_GETBEEP = 1
    Private Const SPI_SETBEEP = 2
    Private Const SPIF_SENDWININICHANGE = &H2
    Private Const SPIF_UPDATEINIFILE = &H1
    Private Function SetSysBeep(ByVal New_SysBeep As Boolean)
        SystemParametersInfo SPI_SETBEEP, CLng(New_SysBeep), 0&, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE
    End Function
    Private Sub Command1_Click()
      If GetSysBeep Then
         SetSysBeep False
      Else
         SetSysBeep True
      End If
    End SubPrivate Function GetSysBeep() As Boolean
      Dim ret As Long
      SystemParametersInfo SPI_GETBEEP, 0, ret, 0
      GetSysBeep = CBool(ret)
    End Function
      

  7.   

    对于SystemParametersInfo  api
    仅使用95 98的入口参数:
    SPI_GETANIMATION = 72
    SPI_GETDEFAULTINPUTLANG = 89
    SPI_GETHIGHCONTRAST = 66
    SPI_GETICONMETRICS = 45
    SPI_GETKEYBOARDPREF = 68
    SPI_GETLOWPOWERACTIVE = 83
    SPI_GETLOWPOWERTIMEOUT = 79
    SPI_GETMINIMIZEDMETRICS = 43
    SPI_GETMOUSETRAILS = 94
    SPI_GETNONCLIENTMETRICS = 41
    SPI_GETPOWEROFFACTIVE = 84
    SPI_GETPOWEROFFTIMEOUT = 80
    SPI_GETSCREENREADER = 70
    SPI_GETSERIALKEYS = 62
    SPI_GETWINDOWSEXTENSION = 92
    SPI_GETWORKAREA = 48
    SPI_LANGDRIVER = 12
    SPI_SETANIMATION = 73
    SPI_SETDEFAULTINPUTLANG = 90
    SPI_SETDRAGWIDTH = 76
    SPI_SETHIGHCONTRAST = 67
    SPI_SETICONMETRICS = 46
    SPI_SETKEYBOARDPREF = 69
    SPI_SETLANGTOGGLE = 91
    SPI_SETLOWPOWERACTIVE = 85
    SPI_SETLOWPOWERTIMEOUT = 81
    SPI_SETMINIMIZEDMETRICS = 44
    SPI_SETMOUSETRAILS = 93
    SPI_SETNONCLIENTMETRICS = 42
    SPI_SETPENWINDOWS = 49
    SPI_SETPOWEROFFACTIVE = 86
    SPI_SETPOWEROFFTIMEOUT = 82
    SPI_SETSCREENREADER = 71
    SPI_SETSERIALKEYS = 63
    SPI_SETWORKAREA = 47
    我的不完全统计,仅供参考。如果发现遗漏或错误,请执行到msdn查证
      

  8.   

    to ch21st(风尘鸟.shannon):
    谢谢你的帮忙,上面的代码我刚才测试过了,确实可以屏蔽掉beep的声音,不过还存在如下问题:
    在系统2000下,在文本框中做有效性检查时,即使beep时没有声音,但弹出msgbox时仍然
    有声音,怎样把弹出msgbox时的声音屏蔽掉?
    非常感谢。
      

  9.   

    这个beep其实用两种,vbA中的beep函数当你安装声卡,会变成从喇叭发生
    而api的beep是从pc喇叭
    msgbx的beep应该和api的MessageBeep保持一致,从声卡发声。你可以在2000做这样那个测试
    1
    Private Declare Function MessageBeep Lib "user32" (ByVal wType As Long) As Long
    Private Sub Form_Load()    Dim Cnt As Byte
        'Beep 5 times
        For Cnt = 1 To 5
            MessageBeep 0
        Next Cnt
    End Sub
    2
    Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
    Private Sub Form_Activate()    Dim Cnt As Long
        For Cnt = 0 To 5000 Step 10
            Beep Cnt, 50
            Me.Caption = Cnt
            DoEvents
        Next Cnt
    End Sub第二个beep可以用pc喇叭演奏音乐,你看有什么不同,我上边说的设置方法其实禁止的是api beep,不是MessageBeep 至于怎样禁止MessageBeep 让我在研究一下
      

  10.   

    你还记得windows的控制面版的声音设置中,有设置各种情况播放的声音吧,
    MessageBeep就是从注册表读取这个设定值,然后发生,同样vb的magbox就是这样干的相当于
    MessageBeep传入MB_OK参数
    (1 Simple beep. If the sound card is not available, the sound is generated using the speaker. 
    MB_ICONASTERISK SystemAsterisk 
    MB_ICONEXCLAMATION SystemExclamation 
    MB_ICONHAND SystemHand 
    MB_ICONQUESTION SystemQuestion 
    MB_OK SystemDefault 

    如果没有声卡它自动调用beep用pc喇叭发音。(vb中的beep函数不等价api的beep)
    说了这么多你应该知道想禁止msgbox的声音怎么做了
      

  11.   

    声明一下,以上分析都是我个人作出的,也许和事实有出入我的想法就是取消掉windows系统的声音设置至于有没有更好的办法,我星期一来了再说
      

  12.   

    to:ch21st(风尘鸟.shannon)十分感谢你,我恭候你的佳音!!!