请问Delphi里面可用的重新启动机器的函数或Api函数?(100分)

  • 主题发起人 主题发起人 pxlei
  • 开始时间 开始时间
P

pxlei

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi里面可用的重新启动机器的函数或Api函数
 
Bool ExitWindowsEx(UINT uFlags,DWORD dwReserved);
其中uFlags:
EWX_Force,紧急情况下强行关机;
EWX_LOGOFF,以其他用户身份登录;
EWX_POWEROFF,关闭系统并关闭电源;
EWX_REBOOT,重新启动;
EWX_HUTDOWN,安全关机。
 
; winExec('rundll.exe user.exe,exitwindows',SW_ShowNORMAL);
 
pxlei:你怎么连这个都不会。
 
直接加 ExitWindowsEx(EWX_REBOOT,0); 可以达到你的要求!!!
 
NT下不行吧?还要权限
 
以上都说拉我 都同意
 
ExitWindowsEx这个api在NT和2000下不能用,嘿嘿,剽窃一段代码给你看看

function My_ExitWindows(M_1Reboot_2Power: integer): Boolean; //重启(M:=1).关机(M:=2)
var
hToken: THANDLE;
hProc: THANDLE;
mLUID: TLargeInteger;
mPriv, mNewPriv: TOKEN_PRIVILEGES;
mBufferLength: DWord;
begin
Result:=false;
if not (M_1Reboot_2Power in [1, 2]) then exit;
hProc := GetCurrentProcess();
OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken);
LookupPrivilegeValue('', 'SeShutdownPrivilege', mLUID);
mPriv.PrivilegeCount := 1;
mPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
mPriv.Privileges[0].Luid := mLUID;
AdjustTokenPrivileges(hToken, False, mPriv, (4 + (12 * mPriv.PrivilegeCount)), mNewPriv, mBufferLength);
GetLastError;
case M_1Reboot_2Power of
1: Result := ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0);
2: Result := ExitWindowsEx(EWX_FORCE+EWX_POWEROFF, 0);
end;
end;


其实简单地用ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0);也可以重启,但有时候在系统还没有关闭时你的程序就已经关闭了所以必需用这个方法。
这个方法可以用于WIN9X、WINNT、WIN2000。
 
To MenXin: 找不到这个API函数了,上来问问,呵呵
 
后退
顶部