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();
}