Запись значений в реестре в 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; }