QT 下實現關機操作 分linux 和windows 不同方法
阿新 • • 發佈:2019-02-09
Window 下介紹兩種方法:
方法1:
bool CMainPage::MySystemShutDown() { HANDLE hToken; TOKEN_PRIVILEGES tkp; //獲取程序標誌 if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return false; //獲取關機特權的LUID LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //獲取這個程序的關機特權 AdjustTokenPrivileges(hToken, false, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); 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; }
方法2:
void MainPage:sysshutdown()
{
QString program = "C:/WINDOWS/system32/shutdown.exe";
QStringList arguments;
arguments << "-s";
QProcess *myProcess = new QProcess();
myProcess->start(program, arguments);
}
linux 下 呼叫關機需要用到root 許可權,在這裡想到兩個方法,一個是寫個指令碼,然後qt 呼叫對應的關機指令碼。這裡呢,主要介紹另外一種方法:
使用QProcess ,對QProcess 的呼叫如
sudo poweroff
QProcess *proc = new QProcess;
proc->addArgument("sudo");
proc->addArgument("poweroff");
if(proc->start())
{
cout<<"error"<<endl;
}
參考連結:
https://blog.csdn.net/jianpeng5/article/details/43983593