2009-03-05 22 views
5

に私は、そのコンテンツ、私はプログラム的にロード、私のDelphiのアプリでTWebbrowserコンポーネントを使用しています:すべての負荷に迷惑なクリック音TWebbrowser

(aWebBrowser.Document as IPersistStreamInit). 
           Load(TStreamAdapter.Create(aMemoryStream)) 

は、コンポーネントが迷惑なクリック音を生成します。これは無効にすることはできますか?
TIA

答えて

18

hereと記載されているURLMON.DLLのCoInternetSetFeatureEnabledプロシージャを見てください。あなたのアプリにFEATURE_DISABLE_NAVIGATION_SOUNDSを有効にすることで、必要なことが実現します。

1

これはWindows標準の「ナビゲーションの開始」サウンド(「コントロールパネル」 - 「サウンドとオーディオデバイス」を参照)である可能性はありますか?

7

これはwindows settingです。私はあなたのアプリケーションがその設定を変更する必要があるとは思わない。

+0

これは私が探していたものです – Cletrix

2

OK、ここで私が試したものです:

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    Application.OnActivate := AppActivate; 
    Application.OnDeactivate := AppDeactivate; 
end; 

procedure TForm1.AppActivate(Sender: TObject); 
begin 
    with TRegistry.Create do 
    try 
    RootKey := HKEY_CURRENT_USER; 
    OpenKey('AppEvents\Schemes\Apps\Explorer\Navigating\.Current', False); 
    if ReadString('') <> '' then 
     RememberSoundFile := ReadString(''); 
    WriteString('', ''); 
    finally 
    Free; 
    end; 
end; 

procedure TForm1.AppDeactivate(Sender: TObject); 
begin 
    with TRegistry.Create do 
    try 
    RootKey := HKEY_CURRENT_USER; 
    OpenKey('AppEvents\Schemes\Apps\Explorer\Navigating\.Current', False); 
    WriteString('', RememberSoundFile); 
    finally 
    Free; 
    end; 
end; 

それは非常に醜いですが、それは動作します。 :-) 私はDavyと基本的に同意しますが、このソリューションは少なくとも他のアプリケーションに影響を与えないという利点があります。
クリックを無効にするユーザーオプションとして追加することもできますが、個人的には本当に消えたかったのです!

+0

"他のアプリケーションは影響を受けません"というのは、あなたのアプリケーションが他のすべてのアプリケーションを実行している間は影響を受けます。あなたのアプリケーションがクラッシュしたり、設定がまったく復元されなかったりする場合は、実際には言及しないでください(app.dprのtry catchブロックでこれを少し強固にするため) –

+0

これは、 IEは設定を制御するために使用します。それはすべてのアプリケーションに影響します。あなたのアプリにフォーカスがある間、他のアプリは音を出させません。記載されているCoInternetSetFeatureEnabledを使用して、あなたのアプリだけに設定してください。あなたのアプリが得意になり、フォーカスを失うと、それを切り替える必要はありません。 –

+1

私はニックの答えを受け入れました。他のアプリに関しては、私にとって、彼らが焦点を当てていない間は静かにしておく方が良いです。デービー、あなたはクラッシュ状況について正しいですが、アプリケーションがクラッシュすることはありません(ええ、そうです:-)) – stevenvh

関連する問題