Qt on Windows相關操作

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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章