概述
Windows关机函数 最常用:
ExitWindowsEx(EWX_SHUTDOWN, 0);
ExitWindowsEx(EWX_REBOOT, 0);
ExitWindowsEx(EWX_REBOOT, 0);
其他参数: EWX_FORCE(强制) EWX_LOGOFF(注销) EWX_POWEROFF(断电)
ExitWindowsEx(EWX_REBOOT, 0); //重启
Windows NT/2000 及后续版本则有安全性要求,程序必须拥有SE_SHUTDOWN_NAME权限才能成功.调用ExitwindowsEx 要提高权限就要使用AdjustTokenPrivileges 提高本进程权限代码.
//完整代码
HANDLE hToken; TOKEN_PRIVILEGES tkp;
// 获取此进程的令牌
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return;
// 获取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 ;
//强制关机
if (!ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0))
return ;
/*
::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0); //强制关机
::ExitWindowsEx(EWX_LOGOFF | EWX_FORCE,0); //强制注销
::ExitWindowsEx(EWX_REBOOT | EWX_FORCE,0); //强制重启
*/
//===========================================================================
//关于时间及其计算
CTime StopTime;
CTime beginTime;
//增加倒计时秒数
CString str;
GetDlgItemText(IDC_second,str);
CTimeSpan tspan(0,0,0,atol(str));
beginTime=CTime::GetCurrentTime();
StopTime=CTime::GetCurrentTime()+tspan;
SetTimer(1,1000,NULL);
//------------------------------------------------------
CString str=beginTime.Format("开始时间:%Y-%m-%d %H:%M:%S");
SetDlgItemText(IDC_str1,str);
// StopTime=CTime::GetCurrentTime();
str=StopTime.Format("结束时间:%Y-%m-%d %H:%M:%S");
SetDlgItemText(IDC_str2,str);
CTimeSpan span=StopTime-CTime::GetCurrentTime();
str=span.Format("倒计时:%H:%M:%S");
SetDlgItemText(IDC_str3,str);
if(span<0)
{
OnOK();
}
最后
以上就是腼腆高山为你收集整理的强制关机/重启/注销的全部内容,希望文章能够帮你解决强制关机/重启/注销所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复