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,一经查实,立即删除!

相关文章

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; 用个不同的视频再测试&…

编写一个程序,实现将存放在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的八位数据…

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…

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

c语言getc函数_C语言中的getc()函数与示例

c语言getc函数C语言中的getc()函数 (getc() function in C) Prototype: 原型&#xff1a; int getc(FILE *filename);Parameters: 参数&#xff1a; FILE *filenameReturn type: int 返回类型&#xff1a; int Use of function: 使用功能&#xff1a; In the file handling…

《深入浅出WPF》笔记——绑定篇(一)

上一节&#xff0c;有记录写到&#xff1a;在WPF里&#xff0c;数据驱动UI&#xff0c;数据占核心地位&#xff0c;UI次之。怎么恢复数据的核心地位&#xff0c;那就要先了解一下Binding。 一、Binding 基础 1.1WPF中Data Binding的带来的方便 在设计架构的时间&#xff0c;大家…

c语言feof函数_使用示例的C语言中的feof()函数

c语言feof函数C语言中的feof()函数 (feof() function in C) Prototype: 原型&#xff1a; int feof(FILE* filename);Parameters: 参数&#xff1a; FILE *filenameReturn type: int(0 or 1) 返回类型&#xff1a; int(0或1) Use of function: 使用功能&#xff1a; In C l…

5种经典排序算法,每个程序员都应该知道

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 有没有想过当您应用从低到高、从高到低或按字母顺序等过滤器时&#xff0c;亚马逊或任何其他电子商务网站中的产品如何排序&#xff1f;排序算法对于此类网站起着至…

在Python中使用OpenCV(CV2)对图像进行边缘检测

Modules used: 使用的模块&#xff1a; For this, we will use the opencv-python module which provides us various functions to work on images. 为此&#xff0c;我们将使用opencv-python模块&#xff0c;该模块为我们提供了处理图像的各种功能。 Download opencv-pytho…

微机原理与接口技术(第2版)考点

第一章 1&#xff0c;微型计算机的特点&#xff1a; 功能强、可靠性高价格低廉系统设计灵活&#xff0c;适应性强体积小&#xff0c;重量轻&#xff0c;维护方便 2&#xff0c;微型计算机的硬件组成 微处理器内存储器I/O接口电路I/O设备系统总线 3&#xff0c;微机的工作过…

UltraEdit语法高亮

语法加亮分支位于配置&#xff0d;编辑器显示之下&#xff0c;允许用户配置语法加亮选项&#xff1a;语法加亮可以识别预定词语&#xff0c;并用不同颜色显示它们。该功能对于程序员来说尤其有用&#xff0c;并且对那些想用不同颜色显示文档中词语的用户也非常有用。提供二十种…

顺序表(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; SeqList.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_ typedef void SeqList; //定义链表数据类型&#xff0c;void因为要适用不同链表数据类型 typedef void SeqListNode; //定义链表节…

线性表(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; LinkList.h #ifndef _LINKLIST_H_ #define _LINKLIST_H_typedef void LinkList; //定义线性表类型 typedef struct _tag_LinkListNode LinkListNode;//定义线性表节点类型 struct _tag_Li…

微软企业库4.1学习笔记(八)创建对象 续集2

3.3通过配置指定和Unity的整合 另外一种方法是在配置源中指定配置的需要&#xff0c;你可以指定下面的一条或者多条&#xff1a; 你可以在Unity配置中指定想要的BlockExtensions  你可以在Unity配置中的type配置节指定如何创建企业库对象&#xff0c;指定类型映射的关系&…

静态链表(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; StaticList.h #ifndef _STATICLIST_H_ #define _STATICLIST_H_typedef void StaticList; //空类型静态表类型可以接收任何类型的静态表类型 typedef void StaticListNode;//空类型节点类型…

Python的线程池实现

代码 1 #coding:utf-82 3 #Python的线程池实现4 5 importQueue6 importthreading7 importsys8 importtime9 importurllib10 11 #替我们工作的线程池中的线程12 classMyThread(threading.Thread):13 def__init__(self, workQueue, resultQueue,timeout30, **kwargs):14 threadin…

循环链表(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; CircleList.h #ifndef _CIRCLELIST_H_ #define _CIRCLELIST_H_typedef void CircleList;typedef struct _tag_CircleListNode CircleListNode;struct _tag_CircleListNode{CircleListNode…

设计模式之Observer

观察者模式可以参考邮件订阅的例子 邮件订阅设计到2个主要角色&#xff0c;一个是订阅者(观察者)&#xff0c;一个是发布者 发布者可以拥有一个观察者的集合&#xff0c;可以添加&#xff0c;删除观察者&#xff0c;当发布者发布一个新的消息时&#xff0c;要邮件通知观察者集合…

双向链表(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; DLinkList.h #ifndef _DLINKLIST_H_ #define _DLINKLIST_H_typedef void DLinkList; typedef struct _tag_DLinkListNode DLinkListNode; struct _tag_DLinkListNode {DLinkListNode* nex…