«Звук щелчка», о котором идет речь, на самом деле является общесистемным предпочтением, поэтому я хочу, чтобы он отключался только тогда, когда мое приложение имеет фокус, а затем снова включался, когда приложение закрывало / теряло фокус.
Первоначально я хотел задать этот вопрос здесь на stackoverflow, но я еще не был в бета-версии. Итак, после поиска ответа и поиска лишь небольшой информации о нем, я пришел к следующему и решил опубликовать его здесь, сейчас, когда я в бета-версии.
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;
}
}
}
}
Затем в основной форме мы используем вышеуказанный код в этих 3 событиях:
- Активировано
- Деактивировано
FormClosing
private void Form1_Activated(object sender, EventArgs e)
{
// Disable the sound when the program has focus
WebClickSound.Enabled = false;
}
private void Form1_Deactivate(object sender, EventArgs e)
{
// Enable the sound when the program is out of focus
WebClickSound.Enabled = true;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// Enable the sound on app exit
WebClickSound.Enabled = true;
}
Единственная проблема, которую я вижу в настоящее время, заключается в том, что при сбое программы у них не будет звука щелчка, пока они не перезапустят мое приложение, но они не будут знать, как это сделать.
Что вы, ребята, думаете? Это хорошее решение? Какие улучшения можно сделать?