qt在window上控制电脑关机重启操作
2023-09-27 14:29:08 时间
一、前言
qt控制window系统的关机重启,Linux等其余设备需调用不同系统的api函数去操作,本文只介绍基于windows系统环境。
二、环境
win8系统,qt5.7
三、正文
我的用法是在退出程序是询问是否要关机
void MainWindow::closeEvent(QCloseEvent *event)
{
QMessageBox msgBox(QMessageBox::Question,
"关闭", "是否关机",
QMessageBox::Yes |QMessageBox::Cancel,NULL);
msgBox.setDefaultButton(QMessageBox::Yes);//默认选择ok,如果按回车执行ok选项
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Yes:
event->accept();
MySystemShutDown(false);
break;
case QMessageBox::Cancel:
event->ignore();
break;
default:
break;
}
}
//true:重启 false:关机
bool MainWindow::MySystemShutDown(bool reset)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return(FALSE);
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
return FALSE;
// Shut down the system and force all applications to close.
if(!reset){//关机
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
SHTDN_REASON_MINOR_UPGRADE |
SHTDN_REASON_FLAG_PLANNED));
}
//restart the system
else {//重启
if(!ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0));
}
//return FALSE;
//shutdown or restart was successful
return TRUE;
}
mainwindow.h
private slots:
void closeEvent(QCloseEvent *event);
bool MySystemShutDown(bool reset);
相关文章
- Qt实现Windows远程控制
- qt实现web服务器加载vue应用进行C++和html混合编程-连载【6】-企业级系统开发实战连载系列 -技术栈(vue、element-ui、qt、c++、sqlite)
- Qt生成ui文件对应的.h和.cpp文件
- QT-事件详解2
- 基于QT(C++)+SQLServer实现(WinForm)超市管理系统【100010143】
- Qt音视频开发13-视频解码线程基类的设计
- Qt编写地图综合应用37-覆盖物多边形
- Qt编写安防视频监控系统61-子模块5设备控制
- Qt编写安防视频监控系统60-子模块4云台控制
- Qt音视频开发11-ffmpeg常用命令
- Qt音视频开发8-ffmpeg保存裸流
- Qt编写安防视频监控系统22-摄像机搜索
- Qt编写Onvif搜索及云台控制工具
- Qt编写自定义控件45-柱状标尺控件
- Qt编写安防视频监控系统7-全屏切换
- Qt编写安防视频监控系统(界面很漂亮)
- 造个简单的轮子倒是不难,但可用性健壮性高到qt这样全世界都在用,就几乎不可能了
- Qt之QSequentialAnimationGroup
- Qt编译慢吗?
- Qt ------ UDP发送不了或接收不到问题
- Qt ------ 控件布局 setSizePolicy
- 使用Qt 开发图形界面的软件