Qt on Windows相关操作
在此记录Qt Windows应用程序开机自启、关闭/重启windows系统、设置Windows桌面背景等功能。
说明:
1、包含头文件
#include <Windows.h>
2、工程文件中引入库
LIBS+=-ladvapi32
3、主文件中加载lib模块
#pragma comment(lib,“user32.lib”)
开机自启
/*************************************************
<函数名称> set_App_AutoRun
<功 能> 设置软件开机自启动
<参数说明> bAutoRun : 是否下次开机自启
<返 回 值> 无
<函数说明> 第一个为全局自动启动项,所有用户登陆后都自动启动。第二个为当前用户启动项、切换到其他用户就失效了:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
<作 者> mcq
<时 间> 2019-07-31
<修 改>
**************************************************/
void MainWindow::set_App_AutoRun(bool bAutoRun)
{
QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",QSettings::NativeFormat);
if (bAutoRun)
{
QString strAppPath=QDir::toNativeSeparators(QCoreApplication::applicationFilePath());
//strAppPath.replace(QChar('/'),QChar('\\'),Qt::CaseInsensitive);
reg.setValue("wirtepad",strAppPath);
}
else
{
reg.setValue("wirtepad","");
}
}
关闭/重启windows系统
/*************************************************
<函数名称> set_Windows_Sys_ShutDown
<功 能> 设置windows系统关机
<参数说明> 无
<返 回 值> 是否成功
<函数说明> 工程文件引入: LIBS+=-ladvapi32
主文件中加入: #pragma comment(lib,"user32.lib")
<作 者> mcq
<时 间> 2019-07-31
<修 改>
**************************************************/
bool MainWindow::set_Windows_Sys_ShutDown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//获取进程标志
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return false;
//获取关机特权的LUID
LookupPrivilegeValue(nullptr, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//获取这个进程的关机特权
AdjustTokenPrivileges(hToken, false, &tkp, 0, PTOKEN_PRIVILEGES(nullptr), nullptr);
if (GetLastError() != ERROR_SUCCESS) return false;
// 强制关闭计算机
if ( !ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
return false;
return true;
// // // 强制重启计算机
// // if ( !ExitWindowsEx(EWX_REBOOT| EWX_FORCE, 0))
// // return false;
// // return true;
}
设置Windows桌面背景
/*************************************************
<函数名称> set_Windows_Desktop_Background
<功 能> 设置windows桌面背景
<参数说明> picAdrr : 图片地址
<返 回 值> 是否设置成功
<函数说明> 1、 桌面风格 WallpaperStyle TileWallpaper
居中 0 0
平铺 0 1
拉伸 2 /
适应 6 /
填充 10 /
2、 #include <QSetting>
3、win10亲测可用,win7好像一团黑
<作 者> mcq
<时 间> 2019-07-31
<修 改>
**************************************************/
bool MainWindow::set_Windows_Desktop_Background(QString picAdrr)
{
QSettings set("HKEY_CURRENT_USER\\Control Panel\\Desktop", QSettings::NativeFormat);
//把注册表的桌面图片路径改为指定路径.
set.setValue("Wallpaper", picAdrr);
//修改背景风格.
set.setValue("WallpaperStyle", 0);
//修改是否平铺.
set.setValue("TileWallpaper", 1);
QByteArray byte = picAdrr.toLocal8Bit();
//调用windows api.
return SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, byte.data(), SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
}