Запись значений в реестре в C#

Пример Чтение реестра значения (чтобы получить размер значка на рабочем столе) в 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;
}

Источник: http://csharphelper.com/blog/2017/09/write-values-in-the-registry-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *