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);
}