问题描述:凝视桌面背景,突感如果桌面背景是变化的像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(@"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格式。代码如下:

代码

        #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图片信息,需要重启服务才能看到效果。关键代码如下:

代码

        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

C#实现动态桌面背景图片切换相关推荐

  1. C#实现动态桌面背景图片切换(续)

    问题描述:昨天搞了一个自动切换桌面的小程序,用着不太方便.因为我每次添加新图片都是手动修改XML文件和重启服务,于是我搞了一个配置程序如下: 上面展示的功能,基本上实现了程序所需要的功能.其中涉及的知 ...

  2. 修改计算机桌面壁纸影响计算机考试吗,若何修改调换计算机桌面背景图片

    <若何修改调换计算机桌面背景图片>由会员分享,可在线阅读,更多相关<若何修改调换计算机桌面背景图片(3页珍藏版)>请在技术文库上搜索. 1.韧耐距荤丢郧瞄宵汤隧匣龋侥撤东取滤傣 ...

  3. jQuery Backstretch动态设置背景图片插件

    贴图  知乎:显著提升程序员身心健康和工作效率的装备有哪些? 笔记本:  1.银河舰队 PAVILION 15-bc011TX光暗影精灵2  2.顽石 -FL5900U7500超薄i7(性价比最高) ...

  4. Fedora15上实现桌面背景图片渐变

    2019独角兽企业重金招聘Python工程师标准>>> 桌面背景图片渐变,在Ubuntu中很容易实现.Ubuntu默认就自带了几款渐变壁纸.但换到Fedora后,貌似没发现有自带的渐 ...

  5. 防仿百度图片背景色php,基于jQuery实现仿百度首页换肤背景图片切换代码_jquery...

    不多说了,先给大家展示效果图,本文支持源码下载哦,需要的朋友可以直接下载使用,代码很简单哦- html代码: css代码: *{margin:0;padding:0} a{color:#fff; ma ...

  6. vue改变html的背景,vue动态改变背景图片demo分享

    如下所示: #bag{ width: 200px; height: 500px; margin: 0 auto; background: url(img/piao11.jpg) center no-r ...

  7. win7自定义随机更换显示桌面背景图片

    在网上看到了好几张漂亮的图片,都想作为桌面背景图片,随机更换,于是搜索方法,因为win7自带的主题有的就是随机更换背景的,所以想着自己是不是可以新建一个主题,也能实现那个效果. 果然,还是微软强悍- ...

  8. VUE动态变换背景图片的实现 +背景图片铺满+ 一般路由的配置

    一 .动态变换背景图片的实现 代码如下: <template><div class="body" v-loading="loading" :s ...

  9. 为canvas画布动态设置背景图片

    为canvas画布动态设置背景图片 关键是将canvas和img标签放到同一个盒子里,盒子设置相对位置,并且canvas和img需要设置相同的相对位置 <div class="list ...

最新文章

  1. lvs+keepalived+nginx+tomcat
  2. 【青少年编程(第27周)】报名考级的小朋友注意截止时间!
  3. 十年沉浮,用Python看创业公司消亡史
  4. 120. Triangle 三角形最小路径和
  5. 【十】推荐系统遇到知识图谱RippleNet
  6. 升级计算机方案,关于计算机升级方案
  7. 12001.linux应用程序之i2c编程
  8. Full details will be found in the appropriate container log 解决办法
  9. Jmeter初探之录制
  10. linux查看psd文件,ImageMagick PSD图形文件处理远程缓冲区溢出漏洞(CVE-2014-1947)
  11. 【Python-神经网络预测】
  12. mysql redo 结构_MySQL redo log 格式解析
  13. Yao‘s GC 的通信最优解:Half Gate
  14. 10.1 做一个全面发展的大学生——《逆袭大学》连载
  15. s7200cpu224xp手册_s7200cpu224xp模拟量转换
  16. thinkphp将名字按首字母进行排序
  17. redission疑难杂症大全
  18. docsify学习笔记
  19. 【第51篇】用于交通预测的时空交互动态图卷积网络
  20. 辐射发射测试软件,辐射发射(Radiated Emission)测试方法详解

热门文章

  1. 【朱-刘算法】【最小树形图】hdu6141 I am your Father!
  2. VR如何巧妙填补传统数据视觉化的漏洞
  3. 任正非迷茫的背后是华为在“治未病”
  4. 解决svn的working copy locked并且cleanup恢复不能的情况
  5. 大叔手记(17):大叔2011年读过的书及2012年即将要读的书
  6. Discuz! member.php xss bug
  7. Node - 异步IO和事件循环
  8. 时间复杂度与空间复杂度分析
  9. Git中.gitignore忽略文件(maven项目)
  10. 与Brian Goetz聊Java的数据类