using System.Runtime.InteropServices;[DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);        private void button1_Click(object sender, EventArgs e)
        {
            int nResult;
            if(File.Exists(""))
            {
                nResult = SystemParametersInfo(20, 1, "", 0x1 | 0x2);
                if(nResult==0)
                    MessageBox.Show("error");
                else
                    MessageBox.Show("ok");    
            }
        }

解决方案 »

  1.   

    更改注册表里的值就可以了
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    using Microsoft.Win32;
    using System.IO;namespace RockLib
    {
        public class Utils
        {
            /**//// <summary>
            /// Change user's desktop wallpaper
            /// </summary>
            /// <param name="picturePath"></param>
            /// <param name="style"></param>
            /// <returns></returns>
            public static bool ChangeWallPaper(string picturePath, WallPaperStyle style)
            {
                RegistryKey myRegKey = Registry.CurrentUser.OpenSubKey("Control Panel\\desktop", true);
                switch (style)
                {
                    case WallPaperStyle.Center:
                        myRegKey.SetValue("TileWallpaper", "0");
                        myRegKey.SetValue("WallpaperStyle", "0");
                        break;
                    case WallPaperStyle.Tile:
                        myRegKey.SetValue("TileWallpaper", "1");
                        myRegKey.SetValue("WallpaperStyle", "0");
                        break;
                    case WallPaperStyle.Stretch:
                        myRegKey.SetValue("TileWallpaper", "0");
                        myRegKey.SetValue("WallpaperStyle", "2");
                        break;
                    default:
                        throw new NotSupportedException("style");                    
                }          
                myRegKey.Close();            int intResult;
                
                if (!File.Exists(picturePath))
                {
                    throw new ArgumentException(string.Format("Picture {0} cannot be found.", picturePath));
                }            intResult = SystemParametersInfo(20, 3, picturePath, 0x1 | 0x2);            return intResult > 0;        }        [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int SystemParametersInfo
                (int uAction, int uParam, string lpvParam, int fuWinIni);   
        }    public enum WallPaperStyle
        {
            Center,
            Tile,
            Stretch
        }
    }
      

  2.   


    using System.Runtime.InteropServices; [DllImport("user32.dll", CharSet = CharSet.Auto)] 
            public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);         private void button1_Click(object sender, EventArgs e) 
            { 
                int nResult; 
                if(File.Exists("")) 
                { 
                    nResult = SystemParametersInfo(20, 1, "", 0x1 | 0x2); 
                    if(nResult==0) 
                        MessageBox.Show("error"); 
                    else 
                        MessageBox.Show("ok");    
                } 
            } 
    这个简洁些!把提示修改一下就可以用了。
      

  3.   

    更换不了,图片不能成为背景,改是可以改了
     SystemParametersInfo(20, 1, @"..\\image\2.jpg", 0x1 | 0x2);不对
    SystemParametersInfo(20, 1, @"C:\\Documents and Settings\Administrator\桌面\burst\burst\image\2.jpg", 0x1 | 0x2);也不对,
    路径出问题了?