• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Windows关机函数ExitWindowsEx使用大全-Delphi(适用Windows所有操作平台) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

{=======================================================================================================================
关闭Windows函数ExitWindowsEx(UINT uFlag,DWORD:dwReserved)说明:

 

控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等, ExitWindowsEx(UINT uFlags,DWORD dwReserved);是实现这一功能的API函数。如果Complile时提示EWX_XXXX未定义,那么请手动定义这几个常数,默认情况下是无需我们手动定义的。
const
 EWX_FORCE=4; //关闭所有程序并以其他用户身份登录?(!!应为“强制执行否”吧!!)
 EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式
 EWX_REBOOT=2; //重新启动计算机
 EWX_SHUTDOWN=1;//关闭计算机
 EWX_POWEROFF=8;//切断电源
 EWX_FORCEIFHUNG=$10;//不记得了,有谁好心查下MSDN
调用方法:
 ExitWindowsEx(EWX_REBOOT,0); //重启计算机
 ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN,0); //强行关机

 不过博主经常听到有人说这一API只在Windows 95/98/98SE/Me下有效,而在Windows NT/2000/XP下无效。
 其实这是不正确的,这一API在上述平台下均是有效的,只是我们在Windows NT/2000/XP平台下执行此函数之前,必须要获取得关机特权罢了,其实就算是Windows NT/2000/XP系统自身关机也必须要走这一流程的。

  1. 获取关机特权函数如下:  
  2. procedure Get_Shutdown_Privilege; //获得用户关机特权,仅对Windows NT/2000/XP  
  3. var   
  4.   rl: Cardinal;  
  5.   hToken: Cardinal;  
  6.   tkp: TOKEN_PRIVILEGES;   
  7. begin   
  8.   OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);  
  9.   if LookupPrivilegeValue(nil'SeShutdownPrivilege', tkp.Privileges[0].Luid) then  
  10.   begin  
  11.     tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;  
  12.     tkp.PrivilegeCount := 1;  
  13.     AdjustTokenPrivileges(hToken, False, tkp, 0nil, rl);  
  14.   end;  
  15. end;  


 另一个关机API,InitiateSystemShutdown(PChar(Computer_Name),PChar(Hint_Msg),Time,Force,Reboot);在Windows NT/2000/XP平台下还会自动调用系统本身的关机提示窗口。
 InitiateSystemShutdown(PChar(Computer_Name), PChar(Hint_Msg),Time,Force,Reboot);
                      //关机计算机名,关机提示信息,停留时长,是否强行关机,是否要重启
 当我们把Computer_Name设为nil时,默认为本机,如 InitiateSystemshutdown(nil,nil,0,True,False);//强行关机

 

 由于我们需要制作一个通用的关机程序,故要对当前的操作系统进行判断,这个比较简单,函数如下:

  1.   function GetOperatingSystem: string;//获取操作系统信息  
  2.   var  osVerInfo: TOSVersionInfo;  
  3.   begin  
  4.     Result :='';  
  5.     osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);  
  6.     if GetVersionEx(osVerInfo) then  
  7.       case osVerInfo.dwPlatformId of  
  8.       VER_PLATFORM_WIN32_NT:  
  9.       begin  
  10.         Result := 'Windows NT/2000/XP'  
  11.       end;  
  12.       VER_PLATFORM_WIN32_WINDOWS:  
  13.       begin  
  14.         Result := 'Windows 95/98/98SE/Me';  
  15.       end;  
  16.     end;  
  17.   end;  
  18.   
  19.   执行关机的主函数:  
  20.   procedure ShutDownComputer;  
  21.   begin  
  22.     if GetOperatingSystem='Windows NT/2000/XP' then   
  23.     begin   
  24.       Get_Shutdown_Privilege;  
  25.       //调用此函数会出现系统关机提示窗口,并允许用户取消关机动作  
  26.       //InitiateSystemShutDown(nil,'关机提示:讨厌你所以关了你!',0,True,False);  
  27.       ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG,0);  
  28.     end else  
  29.     begin  
  30.       ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG,0);  
  31.     end;  
  32.   end;   
  33. =========================================================================================================================}  
  34.   
  35. 使用:  
  36.   
  37. procedure TShutDownForm.btn_PowerOffClick(Sender:Object);  
  38. begin  
  39.   ShutDownComputer;  
  40. end

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB 基本使用方法:简单数学运算 - 躬耕南阳发布时间:2022-07-18
下一篇:
matlab学习笔记10 一般运算符发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap