The 'suara klik' di pertanyaan sebenarnya adalah sebuah sistem yang luas preferensi, jadi saya hanya ingin menjadi cacat ketika aplikasi saya memiliki fokus dan kemudian mengaktifkan kembali ketika aplikasi ditutup/kehilangan fokus.
Awalnya, saya ingin mengajukan pertanyaan ini di sini di stackoverflow, tapi aku tidak lagi dalam versi beta. Jadi, setelah googling untuk menjawab dan menemukan hanya sedikit informasi tentang itu saya datang dengan berikut ini dan memutuskan untuk posting di sini sekarang bahwa saya'm di beta.
using System;
using Microsoft.Win32;
namespace HowTo
{
class WebClickSound
{
/// <summary>
/// Enables or disables the web browser navigating click sound.
/// </summary>
public static bool Enabled
{
get
{
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\Explorer\Navigating\.Current");
string keyValue = (string)key.GetValue(null);
return String.IsNullOrEmpty(keyValue) == false && keyValue != "\"\"";
}
set
{
string keyValue;
if (value)
{
keyValue = "%SystemRoot%\\Media\\";
if (Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor > 0)
{
// XP
keyValue += "Windows XP Start.wav";
}
else if (Environment.OSVersion.Version.Major == 6)
{
// Vista
keyValue += "Windows Navigation Start.wav";
}
else
{
// Don't know the file name so I won't be able to re-enable it
return;
}
}
else
{
keyValue = "\"\"";
}
// Open and set the key that points to the file
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\Explorer\Navigating\.Current", true);
key.SetValue(null, keyValue, RegistryValueKind.ExpandString);
isEnabled = value;
}
}
}
}
Kemudian di bentuk utama yang kami gunakan kode di atas dalam 3 acara:
private void Form1_Activated(object sender, EventArgs e) { // Menonaktifkan suara ketika program ini memiliki fokus WebClickSound.Enabled = false; }
private void Form1_Deactivate(object sender, EventArgs e) { // Mengaktifkan suara ketika program tidak fokus WebClickSound.Enabled = true; }
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Mengaktifkan suara pada aplikasi keluar WebClickSound.Enabled = true; }
Salah satu masalah yang saya lihat saat ini adalah jika program crash mereka tidak't memiliki suara klik sampai mereka kembali meluncurkan aplikasi saya, tapi mereka tidak't tahu apa yang harus dilakukan.
Apa yang kalian pikirkan? Ini adalah solusi yang baik? Perbaikan apa yang dapat dibuat?
const int FEATURE_DISABLE_NAVIGATION_SOUNDS = 21;
const int SET_FEATURE_ON_PROCESS = 0x00000002;
[DllImport("urlmon.dll")]
[PreserveSig]
[return: MarshalAs(UnmanagedType.Error)]
static extern int CoInternetSetFeatureEnabled(int FeatureEntry,
[MarshalAs(UnmanagedType.U4)] int dwFlags,
bool fEnable);
static void DisableClickSounds()
{
CoInternetSetFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS,
SET_FEATURE_ON_PROCESS,
true);
}
I'telah memperhatikan bahwa jika anda menggunakan browser web.Dokumen.Menulis bukan browser web.DocumentText kemudian klik suara doesn't terjadi.
Jadi, bukannya ini:
webBrowser1.DocumentText = "<h1>Hello, world!</h1>";
coba ini:
webBrowser1.Document.OpenNew(true);
webBrowser1.Document.Write("<h1>Hello, world!</h1>");
Anda menonaktifkannya dengan mengubah Internet Explorer nilai registri navigasi suara untuk "NULL":
Registry.SetValue("HKEY_CURRENT_USER\\AppEvents\\Schemes\\Apps\\Explorer\\Navigating\\.Current","","NULL");
Dan mengaktifkannya dengan mengubah Internet Explorer nilai registri navigasi suara untuk "C:\Windows\Media\Cityscape\Windows Navigasi Mulai.wav":
Registry.SetValue("HKEY_CURRENT_USER\\AppEvents\\Schemes\\Apps\\Explorer\\Navigating\\.Current","","C:\Windows\Media\Cityscape\Windows Navigation Start.wav");
Pasti terasa seperti hack, tapi setelah melakukan beberapa penelitian tentang hal ini beberapa waktu yang lalu dan tidak menemukan solusi lain, mungkin adalah taruhan terbaik anda.
Lebih baik lagi akan merancang aplikasi anda, sehingga tidak't membutuhkan banyak mengganggu ulang halaman.. misalnya, jika anda're menyegarkan iframe untuk memeriksa pembaruan pada server, menggunakan XMLHttpRequest sebaliknya. (Anda dapat memberitahu bahwa aku sedang berhadapan dengan masalah ini kembali pada hari-hari sebelum istilah "AJAX" diciptakan?)
Jika anda ingin menggunakan mengganti Windows Registry, gunakan ini:
// backup value
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\Explorer\Navigating\.Current");
string BACKUP_keyValue = (string)key.GetValue(null);
// write nothing
key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\Explorer\Navigating\.Current", true);
key.SetValue(null, "", RegistryValueKind.ExpandString);
// do navigation ...
// write backup key
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\Explorer\Navigating\.Current", true);
key.SetValue(null, BACKUP_keyValue, RegistryValueKind.ExpandString);