- 浏览: 701926 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (167)
- CSS (1)
- Eclipse (4)
- English (1)
- ExtJS (1)
- Git (3)
- Grails (3)
- Groovy (2)
- Hadoop (7)
- HTML5 (2)
- JavaScript (3)
- Maven (2)
- MQ (5)
- MyBatis (3)
- NodeJS (6)
- NoSQL (4)
- Oracle (6)
- PDF (3)
- Python (9)
- Redis (17)
- Tomcat (2)
- Unix (8)
- Web Service (6)
- 安全 (1)
- 电子书 (6)
- 工具 (1)
- 其他 (21)
- 人工智能 (2)
- 视觉 (2)
- 算法 (6)
- 图表 (1)
- 网络 (13)
- 性能 (5)
- 游戏 (9)
- 字节码 (3)
- 机器学习 (0)
最新评论
-
lijunwyf:
cevin15 写道可以看下这个开源软件,https://gi ...
用markdown2html把md转换成html -
cevin15:
可以看下这个开源软件,https://github.com/c ...
用markdown2html把md转换成html -
Raina:
运行不了呢……提示错误无法加载主类Baiduwallpaper ...
用Java更换Windows桌面壁纸 -
苏城细雨沐秋风:
我把解码的jar添加到类路径后,mp3可以播放,但是flac和 ...
java播放mp3/ogg/ape/flac音乐 -
peishuai1987:
请问楼主现在怎么样了,读了很多源码吗,比如mybatis、sp ...
mybatis源码阅读心得
2015/01/23晚22:00更新
不好意思,之前程序没有在中文操作系统下测试过,居然乱码,我修正了程序重新上传了。
WebUtils.java读json的那段改为UTF8编码了,另外javac编译时也改为UTF8。
编译双击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 先从一个自定义文件中读取要搜索的壁纸的关键字,这步我省略了,改为写死在代码里
这里的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在哪里),就需要人工事先分析了。
以下是一部分运行结果:
2.3 随机选择下载一张图片
2.4 放大,裁剪图片(使用Java 2D),以适应桌面分辨率,将修改后的图片保存为wallpaper.jpg到程序目录
2.5 更新桌面(使用jna)
修改壁纸可通过改windows注册表实现
然后要调用User32.dll里的SystemParametersInfoA函数刷新桌面,并将更改通知给其他程序。
最后这部分是一个很好的idea,通过jna就可以直接调用windows操作系统上dll的api了。这样java真是无所不能了。
3. 关于Windows XP修改点
如果很不幸你的OS是Windows XP,那需要修改如下:
首先XP系统只能用bmp壁纸,请将jpg改为bmp
然后说下壁纸的设置风格,有以下几种
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函数
不好意思,之前程序没有在中文操作系统下测试过,居然乱码,我修正了程序重新上传了。
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函数
评论
2 楼
Raina
2017-06-16
运行不了呢……提示错误无法加载主类Baiduwallpaper,但是文件就在文件夹里啊……
1 楼
helloaiy
2016-08-24
您好前辈,我按照您的代码,执行也成功了,但是最终SystemParametersInfoA 返回false,我不知道是哪里的问题。再次启动后,桌面是黑色背景,而不是我设置的图片。请教一下,从哪里能看到 返回false的原因
发表评论
-
lucene spatial 6.1搜索附近的饭店
2016-08-15 15:56 20581.maven用依赖如下 <properti ... -
ELK超快速起步(Windows)
2016-04-12 17:23 6388ELK 是 Elasticsearch、Logstash、Ki ... -
scala初步
2015-08-12 09:48 8541.环境 Windows 7 JDK 1.7.0_72 Sca ... -
JPinyin实现原理简单研究
2015-06-30 23:20 2737java写的拼音转换工具包,搜到3款,分别是pinyin4j, ... -
junit源码分析文章收集
2015-04-24 09:43 716鄙人以为,初学者如果想研究学习开源软件的代码,可以从junit ... -
JTA/JCA入门资料
2015-03-20 17:28 12371.链接 Java Transaction API概述 JTA ... -
Java Art一书简介
2015-02-06 16:31 1163Java Art系列是Killer Game Programm ... -
写Excel 2007大文件的一个取巧方法
2015-01-09 13:26 15031.问题 用POI来读写excel文件相信大家都不陌生了。最近 ... -
java高手的收藏夹
2014-10-18 14:16 1154架构 网站架构相关PPT、文章整理(更新于2009-7-15 ... -
OGNL入门资料
2014-09-13 23:06 720OGNL入门 OGNL框架的使用入门(一) OGNL框架的使用 ... -
joda-time/date4j/jsr310介绍
2014-06-16 22:56 3280本文介绍java里面的日期时间处理工具。首先介绍JDK自带的A ... -
Esper入门例子
2013-12-19 15:48 21691.Complex Event Processing Made ... -
Java 编程的动态性
2013-10-19 09:29 1169IBM上面早期关于java动态编程的系列文章,有中文版和英文版 ... -
Eclipse JDT--AST入门(转载)
2013-10-16 09:18 3646转载自 http://blog.csdn.net/flying ... -
xsd中的正则表达式
2013-10-14 13:12 2080xsd中的正则表达式和java里的不太一样。 例子: &l ... -
commons-cli bug一粒
2013-08-06 17:04 1058commons-cli 1.2里关于OptionGroup有一 ... -
java bean之间的互转
2013-07-22 17:20 9612java bean之间的互转 需 ... -
Dummy,Fake,Stub,Mock区别
2012-05-22 13:07 76371.Dummy 对象被四处传递,但是从不被真正使用。通常他们只 ... -
P6spy和IronTrackSQL
2011-11-14 11:43 1073监控SQL的好工具。 -
web-harvest
2011-06-22 21:47 1121Web-Harvest是一个开源的网络数据抽取工具. 附件是 ...
相关推荐
获取桌面壁纸,将得到的壁纸设置为应用的背景
源码分服务端与客户端,源码已分离,可直接用IDEA直接打开,其他IDE稍做修改就行,源码不依赖其他JAR包,所以容量很小,服务端主窗口为表格,可以打开预览窗口(屏幕墙),预览在线客户端画面,可以控制在线的电脑,...
Java仿windows开发的画图程序,客户端,包含源码
Java实现远程桌面连接的properjavardp源码工程,可直接运行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
通过java调用windows的shell函数,生成快捷方式,适合于win7,xp。
java仿Windows计算器,java仿Windows计算器,java仿Windows计算器,java仿Windows计算器
用JAVA写的桌面程序,是一个能易看得懂的程序,很用实用价值,呵呵
java桌面弹球,java桌面弹球,java桌面弹球,java桌面弹球,java桌面弹球,java桌面弹球,java桌面弹球,
java 最终仿windows标准计算器 英杰
java的windows自动化-自动运行java程序java的windows自动化-自动运行java程序
一些java桌面风格的代码 比较实用。。。。。。。。。。。。。。。。。。。。。。。。。。。java桌面风格
java的windows启动脚本
java 操作windows 共享目录方法介绍
使用java实现windows弹窗
java 发布windows服务
java使用windows命令行获取返回内容
这是我用JAVA模仿WINDOWS附件中的CACULATOR写的计算器,希望大家共同完善!
java调用windows apis 的实现 需要配置java环境变量
使用java修改windows注册表实用.pdf
功能:获取java进程pid 进程可根据该pid调用exec自杀 注意事项:不能改变PidTool.java所在的包,否则需要重行生成dll。 编译命令中 "-PidTool.dll" 改为 "-FePidTool.dll",我整漏了! 使用方法: 1.javac PidTool...