1. 程式人生 > >C# 替換桌面背景圖片

C# 替換桌面背景圖片

做這個純屬和鬱悶,win7家庭普通版的電腦背景圖片居然不能動態切換。去哦一氣之下就做了這個

public FrmpictureBox()
        {
            InitializeComponent();
            downbingimage();
        }

        /// <summary>  
        /// 返回指定目錄下所有檔案資訊  
        /// </summary>  
        /// <param name="strDirectory">目錄字串</param>  
        /// <returns></returns>  
        public List<FileInfo> GetAllFilesInDirectory(string strDirectory)
        {
            List<FileInfo> listFiles = new List<FileInfo>(); //儲存所有的檔案資訊  
            DirectoryInfo directory = new DirectoryInfo(strDirectory);
            DirectoryInfo[] directoryArray = directory.GetDirectories();
            FileInfo[] fileInfoArray = directory.GetFiles();
            if (fileInfoArray.Length > 0)
            {
                //string extension = System.IO.Path.GetExtension(fileInfoArray.ToString());
                //if (extension == ".jpg")
                //{
                listFiles.AddRange(fileInfoArray);
                //}
            }
            foreach (DirectoryInfo _directoryInfo in directoryArray)
            {
                DirectoryInfo directoryA = new DirectoryInfo(_directoryInfo.FullName);
                DirectoryInfo[] directoryArrayA = directoryA.GetDirectories();
                FileInfo[] fileInfoArrayA = directoryA.GetFiles();
                if (fileInfoArrayA.Length > 0)
                {
                    listFiles.AddRange(fileInfoArrayA);
                }
                GetAllFilesInDirectory(_directoryInfo.FullName);//遞迴遍歷  
            }

            return listFiles;
        }
        /// <summary>
        /// 根據日期獲取路徑
        /// </summary>
        private void downbingimage()
        {
            string week = DateTime.Now.DayOfWeek.ToString();
            int imgpath=0;
            //Monday——星期一
            //星期二Tuesday
            //星期三Wednesday
            //星期四Thursday
            //星期五Friday
            //星期六Saturday
            //星期日Sunday

            switch(week)
            {
                case "Monday":
                    imgpath=1;
                    break;
                case "Tuesday":
                    imgpath = 2;
                    break;
                case "Wednesday":
                    imgpath = 3;
                    break;
                case "Thursday":
                    imgpath = 4;
                    break;
                case "Friday":
                    imgpath = 5;
                    break;
                case "Saturday":
                    imgpath = 6;
                    break;
                case "Sunday":
                    imgpath = 7;
                    break;
            }
           
            string locurl = "";

            locurl = Path.Combine(Directory.GetCurrentDirectory(), "im" + imgpath + ".jpg");
            pictureBox1.Image = Image.FromFile(locurl);

            setbackground(locurl);

        }
        /// <summary>
        /// 設定電腦背景圖片
        /// </summary>
        /// <param name="strSavePath"></param>
        private void setbackground(string strSavePath)
        {

            //設定牆紙顯示方式
            RegistryKey myRegKey = Registry.CurrentUser.OpenSubKey(@"Control Panel/desktop", true);

            myRegKey.SetValue("TileWallpaper", "0");//0 居中 1  平鋪 預設
            myRegKey.SetValue("WallpaperStyle", "0");//2 拉伸
            this.label1.Text = "當前模式:居中";
            this.label2.Text = "更改配置檔案config.xml可在下次啟動時改變模式";

            //關閉該項,並將改動儲存到磁碟
            myRegKey.Close();

            //設定牆紙
            string strPathBmp = Directory.GetCurrentDirectory() + "im1.jpg";

            System.Drawing.Bitmap bm = new System.Drawing.Bitmap(strSavePath);
            bm.Save(strPathBmp, System.Drawing.Imaging.ImageFormat.Bmp);//把jpg轉成bmp
            SystemParametersInfo(20, 1, strPathBmp, 1);//SPI_SETDESKWALLPAPER

        }

        /// <summary>
        /// 呼叫電腦底層的介面
        /// </summary>
        /// <param name="uAction"></param>
        /// <param name="uParam"></param>
        /// <param name="lpvParam">圖片的路徑</param>
        /// <param name="fuWinIni"></param>
        /// <returns></returns>
        /// uAction Long,指定要設定的引數。參考uAction常數表
        ///uParam Long,參考uAction常數表
        ///
        ///lpvParam Any,按引用呼叫的Integer、Long和資料結構。
        ///
        ///fuWinIni 這個引數規定了在設定系統引數的時候,是否應更新使用者設定引數
        ///
        ///下面是部分uAction引數,和使用它們的方法:
        ///
        ///引數    意義和使用方法  
        ///
        ///6    設定視窗的大小,SystemParametersInfo(6, 放大縮小值, P, 0),lpvParam為long型
        ///
        ///17    開關屏保程式,SystemParametersInfo(17, False, P, 1),uParam為布林型
        ///
        ///13,24    改變桌面圖示水平和垂直間距,uParam為間距值(畫素),lpvParam為long型
        ///
        ///15    設定屏保等待時間,SystemParametersInfo(15, 秒數, P, 1),lpvParam為long型
        ///
        ///20    設定桌面背景牆紙,SystemParametersInfo(20, True, 圖片路徑, 1)
        ///
        ///93    開關滑鼠軌跡,SystemParametersInfo(93, 數值, P, 1),uParam為False則關閉
        ///
        ///97    開關Ctrl+Alt+Del視窗,SystemParametersInfo(97, False, A, 0),uParam為布林型
        [DllImport("user32.dll", EntryPoint = "SystemParametersInfoA")]
        static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParam, string lpvParam, Int32 fuWinIni);//////lpvParam要設定成string
       
        /// <summary>
        ///時間控制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Pricttimer_Tick(object sender, EventArgs e)
        {
            downbingimage();
        }