`
xpenxpen
  • 浏览: 724916 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用Java更换Windows桌面壁纸

阅读更多
2015/01/23晚22:00更新
不好意思,之前程序没有在中文操作系统下测试过,居然乱码,我修正了程序重新上传了。
WebUtils.java读json的那段改为UTF8编码了,另外javac编译时也改为UTF8。

BufferedReader reader = new BufferedReader(
                      new InputStreamReader(url.openStream(), "UTF-8"));

编译双击compile.bat即可。
运行执行ChangeWall.bat即可。

1.简介
这个Java程序可以用来更换Windows的桌面壁纸。
出处JavaArt Chapter 0.5.Automatic Wallpapering。原作者为泰国的Dr. Andrew Davison。
我将代码稍事修改,原文用谷歌搜索图片,因为谷歌地址已经不工作了,我将搜索引擎改为了百度。可在文末下载。

以下环境测试通过:
Windows7 64bit
JDK1.7

理论上32位Windows 7也可以。Windows XP的话需要稍作修改(见后文)。

2.实现思路步骤

如图所示

2.1 先从一个自定义文件中读取要搜索的壁纸的关键字,这步我省略了,改为写死在代码里
String urlStr = "http://image.baidu.com/channel/listjson?pn=0&rn=30&tag1=%E5%A3%81%E7%BA%B8&tag2=%E9%A3%8E%E6%99%AF&ie=utf8";

这里的URL被编码了,如果你把它输入到浏览器中其实就是以下这个地址
http://image.baidu.com/channel/listjson?pn=0&rn=30&tag1=壁纸&tag2=风景&ie=utf8

地址是如何找到的呢,是通过百度图片搜索试验出来的,可以参考
百度图片api

2.2 通过百度搜索图片(HTTP GET),得到json格式的返回结果,将URL解析出来。
解析json用了org.json这个jar包,至于json的含义(比如图片的url在哪里),就需要人工事先分析了。
以下是一部分运行结果:
Contacting "http://image.baidu.com/channel/listjson?pn=0&rn=30&tag1=%E5%A3%81%E7%BA%B8&tag2=%E9%A3%8E%E6%99%AF&ie=utf8"

Total no. of possible results: 30000

1. Content: 唯美清新花草特写高清桌面壁纸第9张
       URL: http://img.pconline.com.cn/images/upload/upc/tx/wallpaper/1306/21/c0/22385822_1371807526556.jpg

2. Content: 挪威自然美景高清壁纸第8张
       URL: http://img.pconline.com.cn/images/upload/upc/tx/wallpaper/1412/11/c1/530645_1418308843368.jpg


2.3 随机选择下载一张图片

2.4 放大,裁剪图片(使用Java 2D),以适应桌面分辨率,将修改后的图片保存为wallpaper.jpg到程序目录

2.5 更新桌面(使用jna)
修改壁纸可通过改windows注册表实现
    Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, 
                                  "Control Panel\\Desktop", "Wallpaper", fullFnm);
    //WallpaperStyle = 10 (Fill), 6 (Fit), 2 (Stretch), 0 (Tile), 0 (Center)
    //For windows XP, change to 0
    Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, 
                                  "Control Panel\\Desktop", "WallpaperStyle", "10"); //fill
    Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, 
                                  "Control Panel\\Desktop", "TileWallpaper", "0");   // no tiling


然后要调用User32.dll里的SystemParametersInfoA函数刷新桌面,并将更改通知给其他程序。
      // refresh the desktop using User32.SystemParametersInfo(), so avoiding an OS reboot
      int SPI_SETDESKWALLPAPER = 0x14;
      int SPIF_UPDATEINIFILE = 0x01;
      int SPIF_SENDWININICHANGE = 0x02;

      boolean result = MyUser32.INSTANCE.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, 
                                fullFnm, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE );


最后这部分是一个很好的idea,通过jna就可以直接调用windows操作系统上dll的api了。这样java真是无所不能了。

3. 关于Windows XP修改点
如果很不幸你的OS是Windows XP,那需要修改如下:
首先XP系统只能用bmp壁纸,请将jpg改为bmp
  //Change to bmp format if OS version < Windows 7
  private static final String WALL_FORMAT = "jpg";
  private static final String WALL_FNM = "wallpaper.jpg";    // the name of the wallpaper file


然后说下壁纸的设置风格,有以下几种
WallpaperStyle = 10 (Fill), 6 (Fit), 2 (Stretch), 0 (Tile), 0 (Center)
程序里用的是10 (Fill),但XP不支持,只能设为0

4. 定时更换壁纸
如果要定时更换壁纸,可以通过windows的schtasks命令加一个任务计划,执行bat脚本启动java程序,或者使用第三方软件如z-cron

5. DLL查看器
如何查看某个dll里有哪些函数呢,可通过这个工具
dll export viewer

如下图可看到User32.dll里有个SystemParametersInfoA函数

  • 大小: 58.6 KB
  • 大小: 83 KB
2
0
分享到:
评论
2 楼 Raina 2017-06-16  
运行不了呢……提示错误无法加载主类Baiduwallpaper,但是文件就在文件夹里啊……
1 楼 helloaiy 2016-08-24  
您好前辈,我按照您的代码,执行也成功了,但是最终SystemParametersInfoA 返回false,我不知道是哪里的问题。再次启动后,桌面是黑色背景,而不是我设置的图片。请教一下,从哪里能看到 返回false的原因

相关推荐

    易语言更换桌面壁纸

    在更换桌面壁纸的操作中,我们需要使用到SystemParametersInfoA函数。这个函数是Windows API的一部分,用于修改系统的各种参数。具体到更换壁纸,我们需要使用该函数的SPI_SETDESKWALLPAPER参数,该参数用于设置桌面...

    设置桌面壁纸的代码资源

    在Windows系统中,可以使用Windows API来设置桌面壁纸。例如,可以使用`SystemParametersInfo`函数,其参数`SPI_SETDESKWALLPAPER`用于更改壁纸。此外,还需要考虑壁纸的拉伸、平铺或居中方式,这可以通过`SPI_...

    桌面背景壁纸自动定时更换

    【桌面背景壁纸自动定时更换】是一种实用的计算机技术,它允许用户自定义桌面壁纸的更换频率,以保持桌面的新鲜感。这项技术基于操作系统中的任务调度或自动化工具,结合图像处理和用户界面交互来实现。以下是对这个...

    WallPapers:一个java实现windows壁纸自动下载与切换的程序

    在当今数字化时代,个性化桌面壁纸成为了许多用户彰显个性的方式。本文将深入探讨一个名为"WallPapers"的Java程序,该程序能够自动下载并切换Windows操作系统的壁纸,带给用户全新的桌面体验。这个程序利用了Java的...

    自动更换桌面背景软件

    自动更换桌面背景软件是一种能够定期或按照特定规则自动替换用户电脑桌面壁纸的工具。这种软件通常包含多种功能,如设置更换频率、选择图片来源(本地文件夹、网络链接、社交媒体等)、设定过渡效果等,为用户提供...

    完整版设置壁纸.rar

    7. 自动更换壁纸:有些用户喜欢定期更换壁纸,操作系统或第三方应用通常提供定时更换壁纸的功能,用户可以设定时间间隔和选择的图片库。 8. 用户界面设计:壁纸作为用户界面的一部分,其颜色和风格会影响整体视觉...

    定时下载图片设置桌面

    本程序的核心功能是实现定时从网络上下载图片并将其设置为计算机桌面壁纸,这一功能对于喜欢定期更换桌面背景的用户来说非常实用。该程序采用Java编程语言编写,结合了正则表达式技术来解析网页源代码,从而获取到...

    开机启动桌面自动变换图片

    1. 创建服务:开发者需要编写一个程序(通常是用C#、Java或Python等编程语言),该程序定义了一个服务,该服务的职责是在启动时执行更换桌面壁纸的操作。这通常涉及到对操作系统API的调用,如在Windows中使用`...

    ChangerWallpaper:这是一个 Java 应用程序,可使用调度程序更改 Windows 上的墙纸

    ChangerWallpaper是一个基于Java编写的实用工具,专为Windows用户设计,能够按照预设的时间表自动更换桌面壁纸。这个程序利用了Java的强大功能和跨平台特性,为用户提供了一种方便的方式来个性化他们的计算机体验。 ...

    一个可以自动换壁纸的程序

    标题中的“一个可以自动换壁纸的程序”表明我们讨论的主题是一款自动更换计算机桌面壁纸的应用程序。这类程序通常具有定时切换、随机选择或者按照用户设定规则更换壁纸的功能,以增加桌面的个性化和视觉新鲜感。 在...

    壁纸自动换

    "壁纸自动换"是一款软件应用,它允许用户设置定时任务,以便在特定时间自动更换桌面壁纸,从而为用户提供每日不同的视觉体验。这个程序特别适合那些喜欢频繁改变桌面环境,追求新鲜感或者希望通过个性化壁纸来提升...

    Windows Wallpaper Changer-开源

    本文将深入探讨一个开源项目——"Windows Wallpaper Changer",它允许用户按照特定的时间间隔、日间时段或会话来动态更换桌面壁纸,为用户带来全新的视觉体验。 "Windows Wallpaper Changer"是一个创新的应用程序,...

    设置窗口透明度、更换透明后面的背景

    例如,有的桌面壁纸软件提供了动态更换背景的功能,可以定时切换不同的图片,为用户提供多样化的视觉体验。在某些操作系统中,用户可能需要修改注册表或使用第三方扩展来实现这一效果。 在提供的压缩包文件中,...

    计算机软件-编程源码-桌面背景管理器.zip

    它可能是用某种编程语言(如C#、Java、Python或JavaScript)编写的,提供了一个方便的界面来组织和切换桌面壁纸。 【标签】:源码软件 【详细知识点】: 1. **桌面背景管理器**:这是一种软件工具,它的主要功能...

    行业文档-设计装置-多功能贴壁纸用工具.zip

    3. **定时切换**:工具可以设定定时器,按照用户设定的时间间隔自动更换桌面壁纸,为用户提供多样化的视觉体验。 4. **适应屏幕**:高质量的壁纸工具会根据用户的屏幕分辨率自动调整图片大小,确保壁纸显示无损且...

    WINDOWS下文件夹.txt

    Wallpapers目录存储着Windows系统预设的桌面壁纸,提供了一种快速美化桌面的方式。通过Wallpapers文件夹,用户可以轻松更换壁纸,展现个性化的桌面风格。 ### 24. ConnectionWizard ConnectionWizard目录包含了...

    桌面精灵模块

    用户可以导入和收藏多个壁纸,设定自动更换时间,让桌面保持新鲜感。部分模块可能还会提供动态壁纸服务,增加桌面的互动性和趣味性。 此外,桌面精灵模块可能还具备窗口管理功能。例如,一键隐藏或显示所有窗口,...

    易语言源码墙纸小精灵.rar

    《易语言源码墙纸小精灵》是一款基于易语言编程的桌面壁纸更换软件。这款软件主要功能是为用户提供便捷的壁纸更换体验,用户可以轻松设置和管理自己的电脑桌面壁纸。下面我们将深入探讨易语言源码以及墙纸小精灵的...

    桌面修改源码

    而“桌面壁纸修改.exe”则很显然是一个可执行文件,可能是给力桌面应用的一部分,用于修改用户的桌面壁纸。这表明该应用允许用户自定义他们的桌面环境,包括更换壁纸,设置个性化主题等。 深入到这个知识点,我们...

    玫瑰满桌面

    此外,它还可能利用了Windows或Mac等操作系统提供的桌面壁纸更换功能,或者是通过自定义屏幕保护程序实现,让玫瑰花朵动态地出现在用户的桌面上。 程序的运行可能依赖于用户计算机上的特定环境,例如.NET Framework...

Global site tag (gtag.js) - Google Analytics