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.mzph.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…