VC 之关机程序的问题

来源:互联网 发布:网络安全与网络文明 编辑:程序博客网 时间:2024/05/28 15:33

  关机程序,运行之后在屏幕上显示“可以安全关闭电源”的字样,但是并未切断电源。
  因为旧版的电源不支持ATX,所以关机之后会出现那些字样。
解决方法一:
  把注册表中的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]下的PowerdownAfterShutdown键设置值为1即可。
解决方法二:

HANDLE   hToken;   TOKEN_PRIVILEGES   tkp;   OpenProcessToken(GetCurrentProcess(),    TOKEN_ADJUST_PRIVILEGES   |   TOKEN_QUERY,   &hToken);   LookupPrivilegeValue(NULL,   SE_SHUTDOWN_NAME,    &tkp.Privileges[0].Luid);   tkp.PrivilegeCount   =   1;     //   one   privilege   to   set         tkp.Privileges[0].Attributes   =   SE_PRIVILEGE_ENABLED;   AdjustTokenPrivileges(hToken,   FALSE,   &tkp,   0,     (PTOKEN_PRIVILEGES)NULL,   0);   if(!ATX) ExitWindowsEx(EWX_SHUTDOWN|   EWX_FORCE,   0);   else ExitWindowsEx(EWX_POWEROFF|   EWX_FORCE,   0);  

说明:
  判断电源是否支持ATX的代码已省略
解决方法三:
  参考代码

BOOL   fResult;TOKEN_PRIVILEGES   tkp;HANDLE   hToken; if   (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES   |   TOKEN_QUERY,   &hToken))   { MessageBox( "OpenProcessToken   failed! "); return   FALSE; } 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! "); return   FALSE; } fResult   =InitiateSystemShutdown(     NULL,                                                                     //   要关的计算机用户名   "由于系统不稳定,WINDOWS将在上面的时间内关机,请做好保存工作! ",     //   显示的消息   10,                                                                         //   关机所需的时间   TRUE,                                                                   //   ask   user   to   close   apps     style);                                                               //设为TRUE为重起,设为FALSE为关机 if(!fResult)   {   MessageBox( "InitiateSystemShutdown   failed. ");   return   FALSE; }   tkp.Privileges[0].Attributes   =   0;   AdjustTokenPrivileges(hToken,   FALSE,   &tkp,   0,(PTOKEN_PRIVILEGES)   NULL,   0);   if   (GetLastError()   !=   ERROR_SUCCESS)   { MessageBox( "AdjustTokenPrivileges   disable   failed. ");   return   FALSE; }   if   (style) { return   ExitWindowsEx(EWX_REBOOT|EWX_FORCE|EWX_POWEROFF,0); } else { return   ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE|EWX_POWEROFF,0); }

 

原创粉丝点击