背景

作为一个轻微强迫症患者,我一直以来的桌面都是这样的:

(如何隐藏桌面图标、开始菜单、托盘图片不在本文讨论范围。。。)
但是记性一直不是很好的我很希望有个可以作为提醒的东西可以放到桌面上。一开始我投靠了Windows自带的便签,当然这个功能还是很好用的,但是我不能容忍出现这种情况:

如果用这个便签 就会在任务栏多一个项目 而且在alt+tab的时候会多一个选项(smart link一定会被我弄掉的!!!),这样每次切换的时候都可能浪费几毫秒。。。
我就是想要一个提醒嘛。。。也不用很好看。。所以我就准备在自己的桌面壁纸上做文章
一开始 我就直接用画图添加了。。后来实在太麻烦 就写了个程序来进行更改,没想到在其中还学到了一些新的技术,就总结一些好了。。
啊。。先展示一些结果吧。。目前我的桌面如下:

具体实现

第一步是对图片进行添加文字的处理

其实这里没什么难点,主要是计算文字的位置以及调整文字的大小。
JDK里有自带的图片处理类,这里主要用到的是java.awt.Graphics2D里的drawString()方法。
drawString(String str, int x, int y) 可以将字符串str添加到图片(x,y)位置。需要注意的是:对图片进行处理的时候坐标是反转的第一象限。
利用Font、FontRenderContext、Rectangle2D可以设置画笔Graphics2D的字体大小以及获得文字的宽度和高度(这一点很重要)
之后就是一步步计算文字的位置,此处省略。。。
主要的代码如下:

    public static void drawText(Graphics2D g, String logoText, int line) {// 设置颜色g.setColor(Color.WHITE);// 设置 FontFont font = new Font("黑体", Font.BOLD, 30);g.setFont(font);FontRenderContext context = g.getFontRenderContext();Rectangle2D bounds = font.getStringBounds(logoText, context);double x = (width - bounds.getWidth()) - 10;double y = -line * 1.5 * bounds.getY();g.drawString(logoText, (int) x, (int) y);}

第二步是将生成的图片设置为桌面背景(这儿有大坑)

因为更改桌面背景的时候,需要刷新桌面,Java本身是不能对Windows进行操作的,所以这里需要利用JNA调用DLL文件里的原生函数进行处理。
有关JNA的简介,可以去看一下http://www.doc88.com/p-31975835542.html 这篇文章
利用user32.dll里的SystemParametersInfoA函数 就可以向Windows系统发送更新桌面壁纸的消息了,这里需要设置uiAction为0x0014即十进制的20。
详情可以看一下微软给的文档
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724947(v=vs.85).aspx
这儿的坑在哪呢?在这儿:
使用SystemParametersInfoA函数设置桌面壁纸的时候,只能使用JPG格式的图片!!而我们正常使用的右键设置为桌面的时候用的是stobject.dll。。。而微软的文档里也没有给出图片格式的说明~所以大部分的时间都是在调这个bug…….
下面是主要的代码:

    public static boolean setBackPic() throws IOException {Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, "Control Panel\\Desktop", "Wallpaper", path);Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, "Control Panel\\Desktop", "WallpaperStyle", "0");Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, "Control Panel\\Desktop", "TileWallpaper", "0");int SPI_SETDESKWALLPAPER = 0x0014;int SPIF_UPDATEINIFILE = 0x0001;int SPIF_SENDWININICHANGE = 0x0002;return MyUser32.INSTANCE.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, path, SPIF_UPDATEINIFILE |SPIF_SENDWININICHANGE);}

下个版本计划

目前还只能通过eclipse进行处理 下一步要做成UI界面的
对图片的处理耗时有点长 下个版本要优化!!

利用桌面背景进行任务管理相关推荐

  1. Windows 桌面主题,桌面背景

    Windows 桌面主题,桌面背景 一.桌面主题的构成 一个XP的桌面主题可以包含好几个部分,风格.壁纸.屏保.鼠标指针.系统声音事件.图标,除了风格是必须的之外,其他部分都是可选的.风格可以定义的内 ...

  2. html文件变成桌面背景,将HTML文档设置为Windows桌面背景(转)

    将HTML文档设置为Windows桌面背景(转)[@more@] 从Windows 3.X开始,系统就提供了设置桌面背景的功能,我们可以将自己喜爱的图片作为背景显示在桌面上,从而美化了用户的工作环境, ...

  3. python浪漫文艺_从零开始,如何用python定时更新炫酷文艺的桌面背景

    先介绍一个网站--句子迷,网站上有众多网友分享的经典句子,我们将搜索我们喜欢的作者,爬取所有该作者的名句. 我们利用selenium来进行可视化的爬虫,首先要pip install selenium, ...

  4. 更换计算机桌面背景的教案,黔教版信息技术三年级下册第2课《桌面背景的更换》教案2.doc...

    黔教版信息技术三年级下册第2课<桌面背景的更换>教案2.doc 文档编号:545380 文档页数:2 上传时间: 2019-01-24 文档级别: 文档类型:doc 文档大小:31.50K ...

  5. VC++实现像360安全桌面一样修改桌面背景

    具体实现如下,像360安全桌面一样修改桌面背景 模仿360的时候要学习360的狼性文化 #include "stdafx.h" #include<stdio.h> #i ...

  6. 手把手之:苹果iPhone桌面背景修改教程

    <script language='javascript' src='http://www.shiqiaotou.com/donetk/Header.js'></script> ...

  7. RK3399 Ubuntu修改任务栏为自动隐藏和修改桌面背景

    挂载文件系统 源码解读: OK3399-desktop-release                                //飞凌释放的Ubuntu系统源码 OK3399-desktop- ...

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

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

  9. C#实现动态桌面背景图片切换

    问题描述:凝视桌面背景,突感如果桌面背景是变化的像win7一样,该多有意思啊.闹钟瞬间产生一个念头,用C#写一个动态切换桌面背景的图片.如何实现这个想法了,我思考了一会儿,想到了如下的一些需要解决的问 ...

最新文章

  1. OpenCV4.4 CUDA编译与加速全解析
  2. SMTPDiag 诊断工具
  3. 我们学习效率为什么这么低?CMU和PITT的科学家利用BCI技术对此做了相关研究
  4. 图论相关算法理解和总结
  5. RequestBody注解
  6. 使用 SAP Cloud SDK 开发应用时,如何通过环境变量的配置避免硬编码
  7. cvs数据导入工具 oracle_为中国企业打造的研发项目管理工具ONES Project已支持Jira数据导入...
  8. wind 下装mysql,windows 下安装MySQL
  9. 未为dll加载任何符号_专家发现aspersky 和Trend Micro安全性解决方案中的DLL劫持问题...
  10. 启动访问kibana
  11. SSD(based on Caffe)环境配置
  12. 自动化登陆博客园脚本
  13. centos安装 mysql_centos下安装MySQL数据库
  14. C#使用NPIO读写excle,并生成多个表单
  15. Win server 2008 R2激活工具使用图文教程(SK Patch v1 R2 Final OEM)
  16. Python 音频: 使用 sounddevice 调用 ASIO 声卡驱动
  17. word文档中实现目录索引中标题加粗,前导符和页码不加粗
  18. 从狄仁杰的测字占卜到一淘网的Query分析
  19. stata学习笔记|基本知识
  20. Linux设备驱动编程第三版-笔记

热门文章

  1. 聚类算法K-Means K-Medoids GMM Spectral clustering,Ncut
  2. Ubantu20.04 安装搜狗输入法的详细步骤和遇到的问题
  3. 儿童周成就任务全攻略
  4. 初识AOS --------AOS学习笔记系列
  5. SRAM,SDRAM,DRAM,ROM,EPROM,EEPROM
  6. unity3D赛车游戏项目源代码
  7. 今年北京平原地区将形成“一环百园”生态格局
  8. 移动网络简介与RRC
  9. win10系统打开任务管理器和删除流氓软件的方法
  10. Python核心编程-Amy老师第十讲课程作业