【问题标题】:How to change windows system time in Qt?如何在 Qt 中更改 Windows 系统时间?
【发布时间】:2016-03-18 20:56:23
【问题描述】:

我想更改我的系统时间,如何在 Qt 中更改 Windows 系统时间? 我用这种方式,但是失败了!

#include <QApplication>
#include <iostream>
#include <time.h>
#include <windows.h>
#include <QDateTime>
#include <QDebug>
using namespace std;
bool setDate(int,int,int);      
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   MainWindow w;
   w.show();
   qDebug()<<QDateTime::currentDateTime()<<endl;    //before change time                        
   if(setDate(2015,1,1))                           //set time
   {
     qDebug()<<QDateTime::currentDateTime()<<endl;  //if succeed,output time
   }  
   return a.exec();
}
bool setDate(int year,int mon,int day)
{
   SYSTEMTIME st;
   GetSystemTime(&st);    // Win32 API get time
   st.wYear=year;         //set year
   st.wMonth=mon;         //set month
   st.wDay=day;           //set day

  return SetSystemTime(&st);    //Win32 API set time
 }

提前谢谢你。

【问题讨论】:

  • 至少if(setDate(2015,1,1);) -> if(setDate(2015,1,1)) 才能编译。
  • 尝试通过GetLastError function检查失败原因。
  • 是的,我收到一个错误:1314。客户未拥有所需的特权。
  • 根据System Error Codes (1300-1699) (Windows)表示ERROR_PRIVILEGE_NOT_HELD。确保您具有所需的权限。尝试以管理员身份执行程序。
  • 知道了。但是如何在Qt中获取系统管理员权限呢?我的系统是Windows8.1。

标签: c++ windows qt winapi time


【解决方案1】:

更改系统时间需要管理员权限。这意味着您需要:

  • requireAdministrator 选项添加到您的清单中,以便程序始终拥有管理员权限。这是个坏主意,而且您不会在每次开始时都喜欢 UAC 对话。
  • 或者,通过启动以管理员身份运行的单独进程来更改时间。另一个具有适当清单的可执行文件,一个以runas shell 动词开始的进程,或者一个以 COM 提升名字对象开始的进程。

如果这对您来说是 gobbledygook,您需要阅读 UAC。从这里开始:https://msdn.microsoft.com/en-us/library/windows/desktop/dn742497(v=vs.85).aspx

【讨论】:

    最近更新 更多