程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#實現動態桌面背景圖片切換

C#實現動態桌面背景圖片切換

編輯:C#入門知識

問題描述:凝視桌面背景,突感如果桌面背景是變化的像win7一樣,該多有意思啊。鬧鐘瞬間產生一個念頭,用C#寫一個動態切換桌面背景的圖片。如何實現這個想法了,我思考了一會兒,想到了如下的一些需要解決的問題:

  (1):以何種方式實現切換圖片,才能更符合客戶的要求。

  (2):C#使用什麼技術來切換桌面的背景圖片。

  (3):如何存儲和讀取圖片。

問題解決:

  (1):以何種方式呈現呢?控制台?winform?最後思考後,決定用windows services來實現。因為它可以隨windows啟動而啟動,而且在用戶不知不覺中改變,默默無為做自己的事情,簡單。我以前沒搞過windows services,在網上search一下,大致明白了其中的原理。於是想做一個簡單的例子來實現。例子實現功能:寫一個服務,定時提示一個message。代碼很快就寫完了,可注冊後,總是不能啟動服務,也沒啥提示信息。問題很犀利,我Search一個小時,才知道需要設置服務的屬性:允許服務與桌面交互。我設置了,並且重啟服務,果然出現提示信息,但這個問題總不能每次都讓客戶去解決吧,在網上Search解決方案。關鍵代碼如下:

 

\\代碼         private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
        {
            ConnectionOptions coOptions = new ConnectionOptions();
            coOptions.Impersonation = ImpersonationLevel.Impersonate;
            ManagementScope mgmtScope = new System.Management.ManagementScope(@"rootCIMV2", coOptions);
            mgmtScope.Connect();
            ManagementObject wmiService;
            wmiService = new ManagementObject("Win32_Service.Name=" + this.serviceInstaller1.ServiceName + "");
            ManagementBaseObject InParam = wmiService.GetMethodParameters("Change");
            InParam["DesktopInteract"] = true;
            ManagementBaseObject OutParam = wmiService.InvokeMethod("Change", InParam, null);
        }

 

   第一個問題總算解決了。

  (2):如何切換圖片,Search一下,似乎就一個辦法,調用系統的API,不過圖片只能是BMP格式。代碼如下:

 

\\代碼         #region System Innerface
        [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
        public static extern int SystemParametersInfo(
            int uAction,
            int uParam,
            string lpvParam,
            int fuWinIni
         );
        #endregion


        #region Timer Elapsed
        private void dynamicTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (picIndex < PicturePath.Count)
            {
                SetDesktopPicture(PicturePath[picIndex].ToString());
   &nbs

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved