如何实现关机/重启/注销 - SourceCode - C++ & API & MFC - HackerJLY
1、创建一个基于对话框的MFC EXE,在窗口上添加三个按钮分别是:关机、重启、注销
2、在:窗口的OnInitDialog函数中写入:使本进程获取关机权限的代码
//=====================================================================================
//使此进程获取:关机权限
HANDLE hToken;
LUID luid;
TOKEN_PRIVILEGES tp;
//获取此进程的令牌
::OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
//查询权限值:获取权限的唯一标识值
::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//调整令牌权限
::AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
//=====================================================================================
3、在三个按钮的单击函数中分别输入关机、重启、注销的代码
void CPrjShutDownPCDlg::OnbtnShutDown()
{
// TODO: Add your control notification handler code here
::ExitWindowsEx(EWX_SHUTDOWN,0);
}
void CPrjShutDownPCDlg::OnbtnRestart()
{
// TODO: Add your control notification handler code here
::ExitWindowsEx(EWX_REBOOT,0);
}
void CPrjShutDownPCDlg::OnbtnLogOut()
{
// TODO: Add your control notification handler code here
::ExitWindowsEx(EWX_LOGOFF,0);
}