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

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

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

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

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

問題解決:

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

?

ExpandedBlockStart.gif代碼
????????private?void?serviceInstaller1_AfterInstall(object?sender,?InstallEventArgs?e)
????????{
????????????ConnectionOptions?coOptions?
=?new?ConnectionOptions();
????????????coOptions.Impersonation?
=?ImpersonationLevel.Impersonate;
????????????ManagementScope?mgmtScope?
=?new?System.Management.ManagementScope(@"root\CIMV2",?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格式。代碼如下:

?

ExpandedBlockStart.gif代碼
????????#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());
????????????????picIndex?
+=?1;
????????????}
????????????
else
????????????{
????????????????picIndex?
=?0;
????????????????SetDesktopPicture(PicturePath
[picIndex].ToString());
????????????}
????????}
????????#endregion

?

  (3):怎么來存儲和讀取圖片呢。我選擇了用XML文件來存儲。需要存儲兩個信息,一個是多長時間切換圖片背景,二是圖片的路徑。在服務啟動的時候我把圖片路徑存儲在一個List中,如果更新了XML圖片信息,需要重啟服務才能看到效果。關鍵代碼如下:

?

ExpandedBlockStart.gif代碼
????????protected?override?void?OnStart(string[]?args)
????????{
????????????
//?TODO:?在此處添加代碼以啟動服務。
????????????XmlDocument?xmlDoc?
=?new?XmlDocument();
????????????xmlDoc.
Load(XML_PATH);
????????????XmlElement?xmlEle?
=?(XmlElement)xmlDoc.SelectSingleNode("paths");
????????????timeInterval?
=?int.Parse(xmlEle.GetAttribute("time").Trim());
????????????foreach?(XmlNode?node?
in?xmlDoc.SelectSingleNode("paths").ChildNodes)
????????????{
????????????????PicturePath.
Add(node.InnerText);
????????????}
????????????this.dynamicTimer.Interval?
=?timeInterval;
????????????this.dynamicTimer.Enabled?
=?true;
????????????picIndex?
=?0;
????????}

?

總結:關鍵問題都解決了,運行調試實現了自己的想法。程序還有很多不足之處,如:1)應該設置一個托盤程序來啟動重啟服務,提供一個用戶界面來維護圖片的路徑和切換時間,我是用DOS命令來重啟服務;2) 系統函數只能設置BMP格式的,應該實現用各種形式的圖片,這個很容易搞定;3)應該搞一個安裝包,大家用著也方便啊。

  

轉載于:https://www.cnblogs.com/BlueWoods/archive/2010/03/10/1682829.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379334.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

duration java_Java Duration類| withSeconds()方法與示例

duration java持續時間類withSeconds()方法 (Duration Class withSeconds() method) withSeconds() method is available in java.time package. withSeconds()方法在java.time包中可用。 withSeconds() method is used to represent this Duration with the given seconds. wi…

ffmpeg 命令畫中畫效果

畫中畫效果也是和圖片水印一樣使用movie配合overlay實現 使用ffplay預覽一下&#xff1a; ffplay -i cctvhttp.flv -vf “moviecctvhttp.flv[subm];[in][subm]overlayx20:y30[o ut]” -x 640 -y 480 &#xff08;可以看到是有兩層視頻的&#xff09; 用個不同的視頻再測試&…

實驗10 SQL Server 數據備份/恢復

實驗10 SQL Server 數據備份/恢復一、實驗目的 1.了解數據庫備份的過程和屬性設置&#xff1b; 2.掌握應用企業管理器備份和恢復數據庫&#xff1b; 3.掌握應用T-SQL備份和恢復數據庫&#xff1b; 4.掌握數據導入/導出的方法。 二、實驗要求 1.創建指定數據庫的備份. 2.恢復數…

指針和數組

數組的概念與指針的概念聯系非常解密。其實數組的標識相當于它的第一個元素的地址&#xff0c;就像一個指針相當于它所指向的第一個元素的地址&#xff0c;因此其實它們是同一個東西 int numbers [20];int * p;下面的賦值為合法的&#xff1a; p numbers; 這里指針p 和numbers…

程序集(初嘗,也是為插件程序準備)

拓展名是EXE或者DLL的.net可執行程序稱為程序集。 .net程序集與一般的EXE&#xff0c;DLL的區別在于&#xff0c;它包含有metadata。 私有程序集 位于應用程序的目錄下。共享程序集 必須有一個特殊的版本號&#xff0c;唯一的名稱&#xff0c;通常安裝在全局程序集緩存&#xf…

Java BigInteger類| 帶示例的shiftLeft()方法

BigInteger類shiftLeft()方法 (BigInteger Class shiftLeft() method) shiftLeft() method is available in java.math package. shiftLeft()方法在java.math包中可用。 shiftLeft() method is used to shift the given number of bits towards the left side in this BigInteg…

匯編語言-011(無符號乘法指令MUL、有符號乘法指令IMUL、對比MUL乘法指令與SHL移位方式、符號位擴展指令,CBW,CWD,CDQ、DIV 無符號除法指令、IDIV 有符號除法指令)

1:無符號乘法指令MUL .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data val1 WORD 2000h val2 WORD 0100h .code main PROC;8位乘法mov al,5h ;被乘數mov bl,10hmul bl ;AX 0050h ,CF,OF 0;16位乘法mov ax,val1mul val2 ;DX:AX 002000…

編寫一個程序,實現將存放在AX和DX中的32位數據循環右移二進制數的4位。(DX存放高字節內容,AX存放低字節內容)

編寫一個程序&#xff0c;實現將存放在AX和DX中的32位數據循環右移二進制數的4位。&#xff08;DX存放高字節內容&#xff0c;AX存放低字節內容&#xff09; P151 例4.9 匯編思路&#xff1a; AX右移四位后&#xff0c;使用BH接收AL的低四位數據&#xff0c;得到BH的八位數據…

[轉 scrum] 大型項目開發使用敏捷是否合適?不該問的問題

原文地址&#xff1a;http://www.scrumcn.com/agiledev/html/?167.html轉載于:https://www.cnblogs.com/cly84920/archive/2010/03/17/4426844.html

匯編語言-012(擴展加法指令ADC、帶借位減法指令SBB、執行加法后進行ASCII調整指令、AAS 、AAM、AAD 、DAA指令將和數轉成壓縮十進制格式)

1:ADC : 擴展加法指令ADC .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov dl,0mov al,0FFhadd al,0FFh ;ALFEhadc dl,0 ;DL:AL 01FEhmov edx,0mov eax,0FFFFFFFFhadd eax,0FFFFFFFFh ;EAX FFFFFFFEhadc edx,0 …

c#中textbox屬性_C#.Net中的TextBox.Visible屬性與示例

c#中textbox屬性Here we are demonstrating use of Visible property of TextBox Control. 在這里&#xff0c;我們演示了TextBox Control的Visible屬性的使用。 Visible property contains two values 可見屬性包含兩個值 True: Using this - textbox can be visible on par…

VS2010報表

http://technet.microsoft.com/zh-cn/library/dd220516.aspx轉載于:https://www.cnblogs.com/mingyongcheng/archive/2012/09/11/2679722.html

思維的領域特殊性

思維的領域特殊性 1971年&#xff0c;心理學家Danny Kahneman和Amos Tversky做了這樣一個實驗&#xff0c;他們問統計學教授一些不像統計學的統計學問題&#xff0c;其中一個大概如下&#xff1a;假設你生活的城市有兩家醫院&#xff0c;一家大一家小&#xff0c;某一天&#x…

匯編語言-013(DAS 、DAA與DAS、QWORD類型用SBB借位減法、編寫指令將AX符號擴展到EAX,不能使用CWD、用SHR和條件判斷指令將AL循環右移一位、SHLD、壓縮十進制轉換)

1&#xff1a;DAS : SUB或SBB在AL中生成二進制結果&#xff0c;DAS&#xff08;減法后的十進制調整&#xff09;轉壓縮十進制格式 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC;計算85-48mov bl,48hmov al,85hsub al,bl ;AL3Dhd…

python程序執行時間_用于在Python中查找程序執行時間的程序

python程序執行時間The execution time of a program is defined as the time spent by the system to execute the task. As we all know any program takes some execution time but we dont know how much. So, dont worry, in this tutorial we will learn it by using the…

公約數和公倍數

描述 小明被一個問題給難住了&#xff0c;現在需要你幫幫忙。問題是&#xff1a;給出兩個正整數&#xff0c;求出它們的最大公約數和最小公倍數。 輸入 第一行輸入一個整數n&#xff08;0< n<10000)&#xff0c;表示有n組測試數據; 隨后的n行輸入兩個整數i,j&#xff08;…

.net 筆記嘗試(二)

.NET筆試題集&#xff08;二&#xff09; 1.using關鍵字有什么用&#xff1f;什么是IDisposable&#xff1f; using可以聲明namespace的引入&#xff0c;還可以實現非托管資源的釋放&#xff0c;實現了IDisposiable的類在using中創建&#xff0c;using結束后會自動調用該對象的…

網上照片之博客照片與網店照片拍攝心得

本文選自《非常攝影手記&#xff1a;2天玩轉單反相機》一書 讓照片在博客上更熱的心得 1.有時美好的不僅是照片&#xff0c;還有拍攝照片的過程。盡量真實全面地記錄自己的攝影過程&#xff0c;展示最感人的自我。 2.不要急功近利&#xff0c;不想成“名博”的博主不是好博主&a…

string.length_C.中的String.Length屬性示例

string.lengthC&#xff03;String.Length屬性 (C# String.Length property) String.Length property is used to get the total number of characters in the string object (length of the string); it calls with this string and returns the total number of characters. …

匯編語言-014(編寫過程的應用、偽指令LEA、ENTER、LEAVE、LOCAL、遞歸函數、INVOKE、ADDR、PROC偽指令聲明過程)

1&#xff1a;編寫過程&#xff0c;僅用移位和加法&#xff0c;實現任意32位符號數與EAX相乘 include Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC mov eax,80mov ebx,53call BitwiseMultiplycall WriteDecINVOKE ExitProcess,0 main ENDP;EA…