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);
}
发布了32 篇原创文章 · 获赞 4 · 访问量 3429

猜你喜欢

转载自blog.csdn.net/qq_35241071/article/details/100512858
今日推荐