[登录] [注册]
网站首页 >> vc编程 >> 文章内容

vc实现关机

[日期:2009-06-06]   来源:碧波荡漾  作者:王红波   [字体: ]

/////////////////////////////////////////
//  函数:DWORD WINAPI GetVerInfo()
//
// 功能:获取系统版本号
//
// 参数:无
////////////////////////////////////////
DWORD WINAPI GetVerInfo()
{
 OSVERSIONINFO osver={sizeof(OSVERSIONINFO)};
 GetVersionEx(&osver);
 return osver.dwMajorVersion;
}
///////////////////////////////////////////////////////////////////////////////
//  函数:void ShutDown(DWORD verInfo)
//
// 功能:关机函数
//
// 参数:verInfo,操作系统版本信息
///////////////////////////////////////////////////////////////////////////////
void ShutDown(DWORD verInfo)
{
 try
 {
 //如果获取到的系统dwMajorVersion值大于等于5,表示为NT以上操作系统,需提升进程权限
 if(verInfo>=5)
 {
 HANDLE ToHandle;
 TOKEN_PRIVILEGES tkp;
 //打开本进程访问信令
 if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&ToHandle))
 {
 //修改本进程权限
 LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
 tkp.PrivilegeCount=1;
 tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
 //通知系统已修改
 AdjustTokenPrivileges(ToHandle,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
 //获得权限后关闭计算机,要实现注销或重启则对应EWX_LOGOFF,EWX_REBOOT
 ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);//修改此处可以实现注销、重启、关机等功能
 }
 }
 //否则为98以下,直接调用ExitWindowsEx函数即可
 else
 {
   ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);//修改此处可以实现注销、重启、关机等功能
 }
 }
 catch(...)
 {
 //出现任何错误则返回
 printf("关机失败,请确认程序是否被拦截或具有管理权限!");
 return;
 }
}

注:调用关机函数前先要调用GetVerInfo()函数获取操作系统版本号;

其它功能:

    1. ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);//关机

    2. ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0);//重启

    3. ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,0);//注销

   本函数实例文章推荐
   vc小应用.rar
   碧波荡漾语音控制播放器.rar
 

相关文章
相关评论