Изменяем размер иконок рабочего стола


[DllImport("user32.dll")]
public static extern long SendMessageTimeout(
    int hWnd,
    int Msg,
    int wParam,
    string lParam,
    int fuFlags,
    int uTimeout,
    out int lpdwResult);

private const int HWND_BROADCAST = 0xffff;
private const int WM_SETTINGCHANGE = 0x001A;
private const int SPI_SETNONCLIENTMETRICS = 0x0002;

public bool ResizeDesktopIcons(int size)
{
    //ключ отвечающий за размер иконок
    string key = @"Control Panel\Desktop\WindowMetrics";
    RegistryKey desktop = null;
    int res = 0;
    try
    {
        //открываем ключ реестра
        desktop = Registry.CurrentUser.OpenSubKey(key, true);
        //устанавливаем новый размер иконок
        desktop.SetValue("Shell Icon Size", size, RegistryValueKind.String);
        desktop.Flush();
        //очистка кеша иконок
        SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, string.Empty, SPI_SETNONCLIENTMETRICS, 5000, out res);
        return true;
    }
    catch (Win32Exception ex)
    {
        MessageBox.Show(ex.ToString()); ;
        return false;
    }
    finally
    {
        // Если ключ остается открытым то закрываем его его
        if (desktop != null)
            desktop.Close();
    }
}
Для работы вам понадобится подключить следующие пространства имен:
using System.ComponentModel;
using System.Runtime.InteropServices;
Внимание!
Что бы изменения вступили в силу, необходимо перезагрузить ПК!

Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!