Запись значений в реестре в C#
Пример показывают, как считывать значения из реестра. В этом примере показано, как записывать значения в реестр и использует эту возможность обновлять значки на рабочем столе, когда они перепутались.
Следующий SetRegistryValue метод в классе RegistryTools записывает значение в реестр.
// Задайте значение реестра.
public static void SetRegistryValue(RegistryKey hive,
string subkey_name, string value_name, object value)
{
RegistryKey subkey = hive.OpenSubKey(subkey_name, true);
subkey.SetValue(value_name, value);
subkey.Close();
}
Параметр hive указывает часть реестра для поиска. Это должно быть что-то вроде Registry.ClassesRoot, Registry.CurrentConfig, Registry.CurrentUser, Registry.DynData, Registry.LocalMachine, или Registry.PerformanceData.
Метод создает объект RegistryKey для работы с подразделением внутри улья. Второй параметр в OpenSubKey указывает, что для этого метода нужен доступ на запись в подраздел.
Затем метод использует метод SetValue дочернего ключа для установки нового значения и затем закрывает подраздел.
Следующий код показывает, как пример программы обновляет значки на рабочем столе.
private void btnRefreshIcons_Click(object sender, EventArgs e)
{
Cursor = Cursors.WaitCursor;
btnRefreshIcons.Enabled = false;
Refresh();
// Получить текущий размер значка.
object icon_size_string = RegistryTools.GetRegistryValue(
Registry.CurrentUser,
@"Control Panel\Desktop\WindowMetrics",
"Shell Icon Size", 32);
int icon_size = int.Parse(icon_size_string.ToString());
// Добавить 1 и установить новый размер.
icon_size++;
RegistryTools.SetRegistryValue(
Registry.CurrentUser,
@"Control Panel\Desktop\WindowMetrics",
"Shell Icon Size", icon_size);
// Отправляем HWND_BROADCAST для обновления значков.
IntPtr result;
SendMessageTimeout(
HWND_BROADCAST, WM_SETTINGCHANGE,
SPI_SETNONCLIENTMETRICS, 0,
SendMessageTimeoutFlags.SMTO_ABORTIFHUNG,
10000, out result);
// Восстановить исходное значение.
icon_size--;
RegistryTools.SetRegistryValue(
Registry.CurrentUser,
@"Control Panel\Desktop\WindowMetrics",
"Shell Icon Size", icon_size);
// Отправить HWND_BROADCAST, чтобы снова обновить значки.
SendMessageTimeout(
HWND_BROADCAST, WM_SETTINGCHANGE,
SPI_SETNONCLIENTMETRICS, 0,
SendMessageTimeoutFlags.SMTO_ABORTIFHUNG,
10000, out result);
Cursor = Cursors.Default;
btnRefreshIcons.Enabled = true;
}
