2010-11-29 3 views
0

私はwpfを初めて使用しています。コードでデスクトップの壁紙を変更する方法を教えてください。Wpfのデスクトップイメージを変更するにはC#

私はこれ以上の話題を読んだことがありますが、私は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

あなたはBMPファイルを使用していますか?そうでない場合は、SPI_SETDESKWALLPAPERを使用する前にまず変換を試みてください。

WPFは実際にはこれとは関係ありません。デスクトップの背景を設定することは、C#とWindows APIの単純な動作です。

+0

私はbmp FILEを使用しています。私のcenterImage_Clickメソッドから見ることができます。あなたが得る問題を指定できます –

+0

ディスク上のファイルは実際にはBMPファイルですか?それとも、JPGやその他の形式ですか? BitmapImageクラスは、複数の形式に使用できます。また、このスレッドを見て:http://www.xtremedotnettalk.com/showthread.php?t=78085 – Jason

+0

私はWPF ImageControlで作業しているので、wpfイメージコントロールではビットマップの画像しか受け付けません。私は上記の私のコードを確認することができます私は私の画像の変換に表示するために編集されている下のbmpの他の形式を変換しています –