Как изменить изображения на рабочем столе в Wpf C # - PullRequest
0 голосов
/ 29 ноября 2010

Я новичок в wpf. Скажите, пожалуйста, как изменить обои для рабочего стола по коду.

Я прочитал несколько тем по этому поводу, но, похоже, не могу найти решение в WPF.

Проблема в том, что обои рабочего стола не меняются, когда я вызываю SetWallpaper.

Ниже приведен код марки:

    public static ArrayList images;
    const int SPI_SETDESKWALLPAPER = 20;
    const int SPIF_UPDATEINIFILE = 0x01;
    const int SPIF_SENDWININICHANGE = 0x02;

    public enum StyleS_Wallpaper : int
    {
        Tiled, Centered, Stretched
    }

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern int SystemParametersInfo(
        int uAction, int uParam, string lpvParam, int fuWinIni);

     private void OpenExecuted(object sender, ExecutedRoutedEventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.InitialDirectory = "c:\\";
        ofd.Multiselect = true;
        ofd.Filter = "Image Files (*.jpg)|*.jpg|Image Files (*.png)|*.png|Image File (*.gif)|*.gif|Image File (*.bmp)|*.bmp|Image Files (*.png)|*.png";
        //ofd.RestoreDirectory = true;

        Nullable<bool> result = ofd.ShowDialog();
        if (result == true)
        {
            FileNames = ofd.FileNames;
            if (images == null)
            {
                images = new ArrayList();
                newlist = new List<string>();

            }
            for (int i = 0; i < FileNames.Length; i++)
            {
                BitmapImage bitmap = new BitmapImage();
                bitmap.BeginInit();
                bitmap.CacheOption = BitmapCacheOption.OnLoad; 
                bitmap.UriSource = new Uri(FileNames[i]);                    
                bitmap.EndInit();

                images.Add(bitmap);
                newlist.Add(FileNames[i]);
                NextCount++;
            }
          }
       }
      public void SetWallpaper(string path,StyleS_Wallpaper selected)
    {
        RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
        if (selected == StyleS_Wallpaper.Stretched)
        {
            key.SetValue(@"WallpaperStyle", 2.ToString());
            key.SetValue(@"TileWallpaper", 0.ToString());
        }

        if (selected == StyleS_Wallpaper.Centered)
        {
            key.SetValue(@"WallpaperStyle", 1.ToString());
            key.SetValue(@"TileWallpaper", 0.ToString());
        }

        if (selected == StyleS_Wallpaper.Tiled)
        {
            key.SetValue(@"WallpaperStyle", 1.ToString());
            key.SetValue(@"TileWallpaper", 1.ToString());
        }

        SystemParametersInfo(SPI_SETDESKWALLPAPER,
            0,
            path,
            SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
    }

    private void CenterImage_Click(object sender, RoutedEventArgs e)
    {
        BitmapImage img = (BitmapImage)images[currentPicture];
        string Path = img.UriSource.ToString();
        string name = "0";
        // TrimingString Returns the string path as C:\Documents and Settings\ProZec\Desktop\WallPapers
        TrimingString(Path, ref name, true);
        SetWallpaper(name, StyleS_Wallpaper.Centered);
    }

1 Ответ

1 голос
/ 29 ноября 2010

Вы используете файл BMP? Если нет, попробуйте сначала преобразовать его перед использованием SPI_SETDESKWALLPAPER.

WPF действительно не имеет к этому никакого отношения. Установка фона рабочего стола - это просто C # и работа с Windows API.

...