ExitWindows()函数的使用 ( 积分: 50 )

  • 主题发起人 主题发起人 bird007
  • 开始时间 开始时间
B

bird007

Unregistered / Unconfirmed
GUEST, unregistred user!
请说说ExitWindows(dwReserved,Code)函数中的参数各代表什么,怎么用?<br>怎样的参数组合能实现&nbsp;&nbsp;&nbsp;注销,重启,关闭(或更多功能)<br>(网上搜索的资料乱七八遭的,看到我头都晕了)
 
const<br>EWX_FORCE=4;&nbsp;//关闭所有程序并以其他用户身份登录<br>EWX_LOGOFF=0;&nbsp;//重新启动计算机并切换到MS-DOS方式<br>EWX_REBOOT=2;&nbsp;//重新启动计算机<br>EWX_SHUTDOWN=1;//关闭计算机<br>运行时给How赋值,让他等于EWX_SHUTDOWN或其他,调用以下语句<br>ExitWindowsEx(How,0);<br><br>Function&nbsp;ShutDownWindows(Flags:&nbsp;Byte)&nbsp;:&nbsp;Boolean;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;ExitWindowsEx(Flage,&nbsp;0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果成功返回&nbsp;True.<br>end;<br><br>Flags可用参数:<br><br>EWX_LOGOFF:<br>&nbsp;&nbsp;(=0)<br>&nbsp;&nbsp;安全地关闭所有进程,并关闭用户登录。<br><br>EWX_SHUTDOWN:<br>&nbsp;&nbsp;(=1)<br>&nbsp;&nbsp;关闭系统。所有缓冲区的内容都能被安全的存盘,所有进程都将被停止。<br>&nbsp;&nbsp;对于Windows&nbsp;NT:&nbsp;必须有&nbsp;SE_SHUTDOWN_NAME&nbsp;的安全特权方可进行此项操作。<br>&nbsp;&nbsp;对于Windows&nbsp;95:&nbsp;不必有任何特权。<br><br>EWX_REBOOT:<br>&nbsp;&nbsp;(=2)<br>&nbsp;&nbsp;关闭并重新启动系统。<br>&nbsp;&nbsp;对于Windows&nbsp;NT:&nbsp;必须有&nbsp;SE_SHUTDOWN_NAME&nbsp;的安全特权方可进行此项操作。<br>&nbsp;&nbsp;对于Windows&nbsp;95:&nbsp;不必有任何特权。<br><br>EWX_FORCE:<br>&nbsp;&nbsp;(=4)<br>&nbsp;&nbsp;&nbsp;强制切断连接,关闭所有应用程序。当使用这个参数时,Windows&nbsp;将不向正在运行的应用程序发送&nbsp;WM_QUERYENDSESSION&nbsp;和&nbsp;WM_ENDSESSION&nbsp;消息,有可能造成数据丢失。所以推荐只在紧急时使用这个参数。<br><br>EWX_POWEROFF:<br>&nbsp;&nbsp;(=8)<br>&nbsp;&nbsp;关闭系统并切断电源,需要ATX电源支持。<br><br><br>试试下面这个例程吧:<br>unit&nbsp;Unit1;<br><br>interface<br><br>uses<br>&nbsp;&nbsp;Windows,&nbsp;Messages,&nbsp;SysUtils,&nbsp;Classes,&nbsp;Graphics,&nbsp;Controls,&nbsp;Forms,&nbsp;Dialogs,<br>&nbsp;&nbsp;StdCtrls;<br><br>type<br>&nbsp;&nbsp;TForm1&nbsp;=&nbsp;class(TForm)<br>&nbsp;&nbsp;&nbsp;&nbsp;Button1:&nbsp;TButton;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;Button1Click(Sender:&nbsp;TObject);<br><br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Private&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;AdjustToken;<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Public&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;end;<br><br>var<br>&nbsp;&nbsp;Form1:&nbsp;TForm1;<br><br>implementation<br><br>{$R&nbsp;*.DFM}<br><br>procedure&nbsp;TForm1.AdjustToken();<br>var<br>&nbsp;&nbsp;hdlProcessHandle&nbsp;:&nbsp;Cardinal;<br>&nbsp;&nbsp;hdlTokenHandle&nbsp;:&nbsp;Cardinal;<br>&nbsp;&nbsp;tmpLuid&nbsp;:&nbsp;Int64;<br>&nbsp;&nbsp;tkpPrivilegeCount&nbsp;:&nbsp;Int64;<br>&nbsp;&nbsp;tkp&nbsp;:&nbsp;TOKEN_PRIVILEGES;<br>&nbsp;&nbsp;tkpNewButIgnored&nbsp;:&nbsp;TOKEN_PRIVILEGES;<br>&nbsp;&nbsp;lBufferNeeded&nbsp;:&nbsp;Cardinal;<br>&nbsp;&nbsp;Privilege&nbsp;:&nbsp;array[0..0]&nbsp;of&nbsp;_LUID_AND_ATTRIBUTES;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hdlProcessHandle&nbsp;:=&nbsp;GetCurrentProcess;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenProcessToken(hdlProcessHandle,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(TOKEN_ADJUST_PRIVILEGES&nbsp;Or&nbsp;TOKEN_QUERY),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hdlTokenHandle);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Get&nbsp;the&nbsp;LUID&nbsp;for&nbsp;shutdown&nbsp;privilege.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LookupPrivilegeValue('',&nbsp;'SeShutdownPrivilege',&nbsp;tmpLuid);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Privilege[0].Luid&nbsp;:=&nbsp;tmpLuid;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Privilege[0].Attributes&nbsp;:=&nbsp;SE_PRIVILEGE_ENABLED;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkp.PrivilegeCount&nbsp;:=&nbsp;1;&nbsp;&nbsp;&nbsp;//&nbsp;One&nbsp;privilege&nbsp;to&nbsp;set<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkp.Privileges[0]&nbsp;:=&nbsp;Privilege[0];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Enable&nbsp;the&nbsp;shutdown&nbsp;privilege&nbsp;in&nbsp;the&nbsp;access&nbsp;token&nbsp;of&nbsp;this<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;process.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AdjustTokenPrivileges(hdlTokenHandle,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;False,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkp,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sizeof(tkpNewButIgnored),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkpNewButIgnored,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lBufferNeeded);<br><br>&nbsp;end;<br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AdjustToken;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExitWindowsEx((EWX_SHUTDOWN&nbsp;Or&nbsp;EWX_FORCE&nbsp;Or&nbsp;EWX_REBOOT),&nbsp;$FFFF);<br>end;<br><br>end.<br><br>网上抄的,应该可以看懂了
 
LS正解,2000以上提升一下关机权限就Ok了。
 
谢谢qdlsy<br>请问dmzn怎样提升关机权限?可以通过编程实现的吗?
 
多人接受答案了。
 
后退
顶部