如何更换Windows.Beep与现代的哔哔声

Tom*_*Tom 5 delphi

如何更换Windows.Beep与可调节音量的扬声器发出的现代哔声?

Spi*_*ike 9

有趣的你应该问.我刚刚读到了关于窗口蜂鸣声的历史.美国残疾人法案已经迫使Beep API在过去的20年里没有改变.

http://blogs.msdn.com/b/larryosterman/archive/2010/01/04/what-s-up-with-the-beep-driver-in-windows-7.aspx

对于Windows 7,我们完全解决了这个问题 - 我们将以前包含在Beep.Sys中的所有功能都移到了用户模式系统声音代理中 - 现在当你调用Beep()API而不是操作8254芯片时,调用是重新路由到实际播放声音的用户模式代理.

所以简短的回答是:获取Windows 7.更长的答案是:不要使用beep api.发出哔哔声并像播放任何其他噪音一样播放.


Ger*_*oll 9

如果你想使用时,会显示一个消息Windows上使用的"标准"的蜂鸣声,你可以调用Windows.MessageBeep(MessageID)其中的MessageID映射到相同的值图标IDS的的MessageBox(MB_OK,MB_ERROR等).

这方面的一个问题是用户可以将任何声音映射到特定ID.

  • 人们关闭声音不是问题!当然不应该.您的用户界面不应该依赖声音.有些人听不到声音,即使Windows仍被配置为制作它们...... (3认同)

Bha*_*rat 8

试试这个吧

uses MMSystem;

procedure TForm1.Button1Click(Sender: TObject);
begin
  sndPlaySound('C:\Windows\Media\sound.wav',
    SND_NODEFAULT Or SND_ASYNC Or SND_LOOP);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  sndPlaySound(nil, 0); // Stops the sound
end;
Run Code Online (Sandbox Code Playgroud)

  • 一定要编写自己的"AppBeep"函数,不要在整个应用程序中分散对sndPlaySound(hardcodedFilenameHere)的调用! (4认同)