Delphi 如何将Windows.Beep替换为现代的哔哔声

Delphi 如何将Windows.Beep替换为现代的哔哔声,delphi,Delphi,如何将Windows.Beep替换为音量可调的扬声器发出的现代嘟嘟声?试试这个 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: TObjec

如何将Windows.Beep替换为音量可调的扬声器发出的现代嘟嘟声?

试试这个

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;

有趣的是你应该问。我刚才在读有关windows哔哔声的历史记录。《美国残疾人法案》已经迫使Beep API在过去20多年中保持不变

对于Windows7,我们解决了这个问题 完全-我们移动了所有的 以前的功能 包含在Beep.Sys中并输入用户 模式系统声音代理–现在何时开始 调用Beep()API而不是 操纵8254芯片,呼叫正在进行 重新路由到用户模式代理,其中 实际上播放声音

因此,简单的答案是:使用Windows7。 一个较长的答案是:不要使用beep api。获取蜂鸣音并像播放任何其他噪音一样播放。

如果要在显示MessageBox时使用Windows使用的“标准”蜂鸣音,可以调用
Windows。MessageBeep(MessageID)
其中MessageID映射到与MessageBox图标ID相同的值(MB_OK,MB_ERROR等)


一个问题是,用户可以将任何声音或没有声音映射到特定的ID。

您可以用执行ET beep来代替beep调用,ET beep有一个针对各种外来声音的编辑器


我喜欢这个sndPlaySound('ding.wav',SND_ASYNC);请确保编写自己的函数“AppBeep”,不要在整个应用程序中分散对sndPlaySound(硬编码FileName)的调用!人们关掉声音不是问题!当然不应该。您的用户界面不应依赖声音。有些人听不到声音,即使Windows仍然配置为发出声音…@Marjan确实不应该这样-应该完全由计算机用户决定。使用MessageBeep使程序工作起来更像Windows本身,这通常是一件好事。你不认为操作系统升级对于想要更改哔哔声来说是过分的吗?嗯,@Ken,如果你想专门调用
Beep
,并且想要不同的声音,那么更新的操作系统是你唯一的选择,因此不会过分。嗯@Rob,如果您特别想使用Beep(),而宁愿更改操作系统,也不愿更改代码以使用其他东西,那么我怀疑您在某个地方出了问题。;-)问题基本上是,“我想让Beep()与众不同。”这很奇怪。我希望很多windows API都有所不同。对此我无能为力。但如果有人真的因为某种原因不得不使用Beep(),并希望它通过常规的声音硬件播放,那么到目前为止,这里还没有人提出不同的解决方案。网站不可用。。。