关机 谁知道怎么调用windows的关机对话框? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if(AfxMessageBox("确定关机么? ",MB_YESNO|MB_ICONQUESTION)==IDYES) if(!ExitWindowsEx(EWX_SHUTDOWN,0)) { CString strError; strError.Format("错误码:%d。",GetLastError()); if(m_nWinVersion==WIN_95||m_nWinVersion==WIN_98||m_nWinVersion==WIN_ME) strError=_T("关机失败!")+strError; else strError=_T("您没有关机权限!")+strError; AfxMessageBox(strError,MB_OK|MB_ICONINFORMATION); } 只能在win98里关机,2000和xp不行 static HANDLE hToken; static TOKEN_PRIVILEGES tp; static LUID luid; ::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 ); ::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0); winexec(Pchar('StrCommand'),sw_Show);其中"StrCommand"代表以下命令之一(使用Windows中的运行不要加引号):"rundll32 shell32,SHExitWindowsEx 1" - 关机 DWORD dwVersion;TOKEN_PRIVILEGES tkp;HANDLE hToken; dwVersion = GetVersion(); if(dwVersion < 0x80000000){//NT if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { MessageBox("OpenProcessToken failed!"); } 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) { MessageBox("AdjustTokenPrivileges enable failed!"); } BOOL fResult =InitiateSystemShutdown( "Lf", "WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息 10, // 关机所需的时间 TRUE, TRUE); //设为TRUE为重起,设为FALSE为关机 if(!fResult) { MessageBox("InitiateSystemShutdown failed."); } } else {//95 ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0); } SQL 小疑问 关于mfc ole的问题,急,谢谢大家了 sdk创建工具栏 一个看似简单的功能,确不知道如何实现! 函数调用问题 控件的大小 GetMenuItemInfo()函数的使用,急用。 请问怎样在vc里面调用api 为什么我的动态创建的CheckBox被点击后不画勾?(回复给分) 如何用数学方法实现一曲线的拉伸、变形 强行关机 如何使用程序重启计算机?
if(!ExitWindowsEx(EWX_SHUTDOWN,0))
{
CString strError;
strError.Format("错误码:%d。",GetLastError());
if(m_nWinVersion==WIN_95||m_nWinVersion==WIN_98||m_nWinVersion==WIN_ME)
strError=_T("关机失败!")+strError;
else
strError=_T("您没有关机权限!")+strError;
AfxMessageBox(strError,MB_OK|MB_ICONINFORMATION);
}
只能在win98里关机,2000和xp不行
static TOKEN_PRIVILEGES tp;
static LUID luid;
::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 );
::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
TOKEN_PRIVILEGES tkp;
HANDLE hToken;
dwVersion = GetVersion();
if(dwVersion < 0x80000000)
{//NT
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
MessageBox("OpenProcessToken failed!");
}
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)
{
MessageBox("AdjustTokenPrivileges enable failed!");
}
BOOL fResult =InitiateSystemShutdown(
"Lf",
"WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息
10, // 关机所需的时间
TRUE,
TRUE); //设为TRUE为重起,设为FALSE为关机
if(!fResult)
{
MessageBox("InitiateSystemShutdown failed.");
}
} else
{//95
ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
}