DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WebBrowser1のクリック音を消す方法

環境/言語:[/Windows XP /VB2005 /.NET Framework2.0]
分類:[.NET]

WebBrowserで、自動でリンクを伝って何カ所か回り、HPを保存するプログラムを作っています。

その時に出るカチカチ音が気になって仕方ありません。

通常ですと、WebBrowser1のプロパティで、visible=Falseでクリック音も消えるはずなのですが、音が鳴ってしまいます。

以下のようにコードで指定しても鳴ってしまいます。

WebBrowser1.Visible = False
WebBrowser1.Navigate "http://www.yahoo.com/"
WebBrowser1.Visible = True

この場合、原因は何が考えられるでしょうか?
■No27560に返信(ザナドゥさんの記事)
> 通常ですと、WebBrowser1のプロパティで、visible=Falseで
> クリック音も消えるはずなのですが、音が鳴ってしまいます。

クリックではなく、ナビゲーションの音です。
IE のページ遷移やエクスプローラでフォルダを開く際に鳴ります。


コントロールパネルのサウンドとオーディオのプロパティから、
プログラムイベントの「ナビゲーション開始」で鳴らないようにもできます。

なお、この設定はレジストリの下記の場所に保存されています。
HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer\Navigating\.Default 


> 以下のようにコードで指定しても鳴ってしまいます。
> WebBrowser1.Visible = False
> WebBrowser1.Navigate "http://www.yahoo.com/"
> WebBrowser1.Visible = True
これは本当に VB2005 のコードですか?
文法的には VB6 のコードに見えますが…。


> この場合、原因は何が考えられるでしょうか?
スクリプトによる遷移など、表示された後で遷移した場合には
Navigating 音が再生されます。完全に消してしまいたい場合には、
urlmon.dll の CoInternetSetFeatureEnabled API で
FEATURE_DISABLE_NAVIGATION_SOUNDS を指定してみてください。

Private Declare Unicode Function CoInternetSetFeatureEnabled Lib "urlmon" _
    (ByVal FeatureEntry As Integer, _
     ByVal dwFlags As Integer, _
     <MarshalAs(UnmanagedType.Bool)> ByVal fEnable As Boolean) As Integer

Public Shared Sub DisableNavigationSound(ByVal Enabled As Boolean)
    Const FEATURE_DISABLE_NAVIGATION_SOUNDS As Integer = 21
    Const SET_FEATURE_ON_PROCESS As Integer = &H2
    CoInternetSetFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS, SET_FEATURE_ON_PROCESS, Enabled)
End Sub
■No27561に返信(魔界の仮面弁士の記事)
> urlmon.dll の CoInternetSetFeatureEnabled API で
> FEATURE_DISABLE_NAVIGATION_SOUNDS を指定してみてください。

なお、CoInternetSetFeatureEnabled は IE6 (XP SP2以降)からの機能、
FEATURE_DISABLE_NAVIGATION_SOUNDS 指定は IE7 からの機能です。

それ以前のバージョンを使っている場合は、先述のレジストリ設定で
on/off する事になります。ただし FEATURE_DISABLE_NAVIGATION_SOUNDS とは
違って、システム全体の設定が変更される事になりますので注意してください。
■No27560に返信(ザナドゥさんの記事)
> WebBrowser1.Navigate "http://www.yahoo.com/"
> WebBrowser1.Visible = True

このタイミングで True では Navigate が終了していないのでは?
魔界の仮面弁士さん、有り難うございます。
がしかし、

MarshalAsの定義の為、Imports System.Runtime.InteropServicesとして、教えて頂いたコードを入れてみたのですが、まだ音が鳴ってしまい、上手くいかないようです。


出来る限り自分で調べてと思い、いろいろ調べてみたのですが、分かりませんでした。
初心者的な質問で、申し訳ありませんが、他に定義するものがありますでしょうか?
■No27590に返信(ザナドゥさんの記事)
> 教えて頂いたコードを入れてみたのですが、まだ音が鳴ってしまい、

・IE のバージョンは何ですか? XP の Service Pack はどうなっていますか?
 (FEATURE_DISABLE_NAVIGATION_SOUNDS 未対応のバージョンではありませんか?)

・音が鳴ってしまうのは、"http://www.yahoo.com/" だけなのでしょうか?

・Visible = True に戻さず、False のままでも音は鳴りますか?

・ページ内容の書き換えあるいはリダイレクトを伴うようなソフトを
 導入していますか?
 (プロキシ、フィルタ、アクセス監視、キャッシュ支援ソフト等)
魔界の仮面弁士さん、返信有り難うございます。

先程、もしかしたらOSが悪いのではないかと思い、VISTA、7でも試したところ、移動するたびにカチっと音が鳴ってしまいますね。


> ・IE のバージョンは何ですか? XP の Service Pack はどうなっていますか?

XPsp3、IE8です。


> ・音が鳴ってしまうのは、"http://www.yahoo.com/" だけなのでしょうか?

いえ、毎日新聞「http://mainichi.jp/」や他でも鳴ってしまいます。


>
> ・Visible = True に戻さず、False のままでも音は鳴りますか?

はい、鳴ります。
>
> ・ページ内容の書き換えあるいはリダイレクトを伴うようなソフトを
>  導入していますか?

いえ、思い当たるのはありません。
しいていうなら、セキュリティーソフトの」「ウイルスセキュリティーZERO」ぐらいでしょうか。


全OSを、Visible = Falseにしても、音が鳴るので、OSのせいではないというのは確認できました。
2010/11/18(Thu) 06:59:05 編集(投稿者)
2010/11/18(Thu) 06:58:55 編集(投稿者)

> MarshalAsの定義の為、Imports System.Runtime.InteropServicesとして、教えて頂いたコードを入れてみたのですが、まだ音が鳴ってしまい、上手くいかないようです。

どのイベントで呼んでいますか?
下記でもクリック音が消えませんか?
Private Sub WebBrowser1_Navigated(ByVal sender As Object, _
      ByVal e As System.Windows.Forms.WebBrowserNavigatedEventArgs) Handles WebBrowser1.Navigated
  DisableNavigationSound(True)
End Sub
■No27595に返信(ザナドゥさんの記事)
>>・IE のバージョンは何ですか? XP の Service Pack はどうなっていますか?
> XPsp3、IE8です。

当方も同じ環境ですが、以下のコードで切り替えられています。
何が違うのかな…。


Imports System.Runtime.InteropServices
Public Class Form1
  Private WebBrowser1 As New WebBrowser()
  Private TextBox1 As New TextBox() With {.Text = "http://mainichi.jp/"}
  Private WithEvents Button1 As New Button() With {.Text = "Go"}
  Private WithEvents CheckBox1 As New CheckBox() With {.Text = "ナビ音あり"}
  Private Declare Unicode Function CoInternetSetFeatureEnabled Lib "urlmon" _
   (ByVal FeatureEntry As Integer, _
    ByVal dwFlags As Integer, _
    <MarshalAs(UnmanagedType.Bool)> ByVal fEnable As Boolean) As Integer
  Private Declare Unicode Function CoInternetIsFeatureEnabled Lib "urlmon" _
   (ByVal FeatureEntry As Integer, _
    ByVal dwFlags As Integer) As Integer
  Private Const FEATURE_DISABLE_NAVIGATION_SOUNDS As Integer = 21
  Private Const SET_FEATURE_ON_PROCESS As Integer = &H2
  Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Controls.Clear()
    CheckBox1.Dock = DockStyle.Top
    CheckBox1.Padding = New Padding(2)
    Controls.Add(CheckBox1)
    TextBox1.Location = New Point(2, CheckBox1.Bottom + 2)
    TextBox1.Width = ClientSize.Width - Button1.Width - 6
    TextBox1.Anchor = AnchorStyles.Left Or AnchorStyles.Top Or AnchorStyles.Right
    Controls.Add(TextBox1)
    Button1.Location = New Point(TextBox1.Right + 2, CheckBox1.Bottom + 2)
    Button1.Anchor = AnchorStyles.Top Or AnchorStyles.Right
    Controls.Add(Button1)
    WebBrowser1.Location = New Point(2, Math.Max(TextBox1.Bottom, Button1.Bottom) + 2)
    WebBrowser1.Size = New Size(ClientSize.Width - 4, _
                                ClientSize.Height - WebBrowser1.Top - 4)
    WebBrowser1.Anchor = AnchorStyles.Left Or AnchorStyles.Right _
                      Or AnchorStyles.Top Or AnchorStyles.Bottom
    Controls.Add(WebBrowser1)
    CheckBox1.Checked = NavigationSoundEnabled
    AddHandler CheckBox1.CheckedChanged, AddressOf CheckBox1_CheckedChanged
  End Sub
  Private Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
    NavigationSoundEnabled = CheckBox1.Checked
  End Sub
  Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    WebBrowser1.Navigate(TextBox1.Text)
  End Sub
  Friend Property NavigationSoundEnabled() As Boolean
    Get
      Select Case CoInternetIsFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS, _
                                             SET_FEATURE_ON_PROCESS)
        Case 0 : Return False
        Case 1 : Return True
        Case Else : Throw New NotSupportedException()
      End Select
    End Get
    Set(ByVal value As Boolean)
      CoInternetSetFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS, _
                                  SET_FEATURE_ON_PROCESS, Not value)
    End Set
  End Property
End Class
2010/11/18(Thu) 13:19:06 編集(投稿者)

> どのイベントで呼んでいますか?
> 下記でもクリック音が消えませんか?
> Private Sub WebBrowser1_Navigated(ByVal sender As Object, _
>       ByVal e As System.Windows.Forms.WebBrowserNavigatedEventArgs) Handles WebBrowser1.Navigated
>   DisableNavigationSound(True)
> End Sub


すみません、上手くいきました。

関数を呼んでいませんでした・・・

花ちゃんさん、有難うございました。
2010/11/18(Thu) 13:18:22 編集(投稿者)



■No27598に返信(魔界の仮面弁士さんの記事)
> ■No27595に返信(ザナドゥさんの記事)
> >>・IE のバージョンは何ですか? XP の Service Pack はどうなっていますか?
>>XPsp3、IE8です。
>
> 当方も同じ環境ですが、以下のコードで切り替えられています。
> 何が違うのかな…。
>


魔界の仮面弁士さん、すみませんでした。

教えていただいたコードで上手くいきました。
本当に有難うございました。

上手くいかなかったのは、ただの私のミスでした。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板