Qt C++编程实现Windows和Ubuntu桌面背景/壁纸的设置

摘要:本人对桌面背景的要求相对较高,而且希望能每天更换,但又觉得常规步骤太过麻烦(从网上找图片->下载至本地->打开本地路径->右键设为壁纸),所以想要写一个程序自动实现其全部过程。(从网上爬取图片的实现在其他文章另有介绍)(文末附完整源代码的链接)
为了能够通过程序实现后半部分功能,即设置本地目录下的图片为壁纸,特此查找到了windows系统下的相关API函数。另外由于本人还常使用Ubuntu系统,于是就将程序跨平台地扩展至了该系统,大体上的实现方法就是调用了一个SHELL文件。两系统的具体实现详见下文。

本人亲测平台: Win10,Ubuntu16.04LTS
运行环境:Qt5.7.0

Windows

调用API函数:SystemParametersInfo。该函数含有4个参数,只需更改第1项和第3项参数,分别为桌面壁纸标志SPI_SETDESKWALLPAPER和壁纸的本地存储路径filename。

#include <windows.h>

void WallPaper::setWallPaper(QString filePath)
{
 const char *tmp = filePath.toStdString().c_str(); 
 std::wstringstream wss;
 wss << tmp;
 const wchar_t *filename = wss.str().c_str();
 if( !SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)filename, SPIF_UPDATEINIFILE) )//调用windows的API函数
 qDebug("设置桌面背景失败!");
}

注:本人测试win10可调用此函数实现其功能。但win7会将桌面背景变成纯黑色。若读者发现有win7的解决方法,望指点。

Ubuntu

鉴于Ubuntu的相关API函数使用难度较大,需要安装一些库,过程太过繁琐。这里介绍一种比较简单的实现方法,即Qt的C++与SHELL结合使用来实现此功能:

  1. 在本project的目录下,单独存了一个SHELL文件。该SHELL中主要包含了一个图片路径变量和设置Ubuntu桌面背景的相关指令。
  2. 使用QFile设置更改SHELL文件中当前的图片路径。
  3. 使用QProcess执行此SHELL文件,更换壁纸。注:该SHELL文件的右键属性权限中应设置为“允许作为程序执行文件”。

Qt程序

#include <QProcess>
void WallPaper::setWallPaper(QString filePath)
{
//更改SHELL文件“setwallpaperforUbuntu”中的图片路径信息
 QFile file(qApp->applicationDirPath() + "/setwallpaperforUbuntu");
 file.open(QIODevice::ReadWrite);
 QTextStream textStream(&file);
 QString text = textStream.readAll();
 int start = text.indexOf("/home");
 textStream.seek(start);
 textStream << filePath << "' ";//这么多空格是因为每次路径字符串长度不等,保证能够覆盖。SHELL文件相应位置也有空格(empty spaces)
 file.close();

//调用执行该SHELL文件
 QProcess *setWallPaperSHELL = new QProcess;
 QString command = qApp->applicationDirPath() + "/setwallpaperforUbuntu";
 setWallPaperSHELL->start(command);

}

SHELL文件“setwallpaperforUbuntu”

#!/bin/bash

 # Set picture options
 # Valid options are: none,wallpaper,centered,scaled,stretched,zoom,span ned
 picOpts="zoom"

 # File Path, the location where the Bing pics are stored, NOTICE: there are many empty spaces after the ".jpg'", which is very necessary!
 filePath='/home/yinhe/Pictures/WaldkauzDE_ZH-CN10024135858_1920x1080.jpg'                                                                                                                                                             

 # Set the GNOME3 wallpaper
 DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '"file://'$filePath'"'

 # Set the GNOME 3 wallpaper picture options
 DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-options $picOpts

 # Exit the script
 exit

Github源代码
一款简约的壁纸设置程序 https://github.com/polarbear0330/DeskWallPaper


本人联系方式:362036379@sjtu.edu.cntfy.hi@163.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容