如何关闭计算机?
我在网上找了好几个例子,但都不成功。
我在网上找了好几个例子,但都不成功。
解决方案 »
- 读取了一个OBJ+MTL格式的人体模型,怎样取得模型上的具体谋一点的坐标
- delphi可以实现类似oa这样的公文流转的功能吗?
- 帮帮我,为什么这样不行???
- MCISendString()函数具体怎么用啊?急!在线等!
- 原本以为解决的问题,没想到还没搞定
- 小猫提问:安装制作问题(三)WISE版
- 我用edit.text:=timetostr(now);显示当前时间,可是我想显示到秒。怎样做。thanks
- 请问如何在一个过程或是事件过程中调用另一个事件过程???
- 请问这个语句该怎么写才是正确的。谢谢。马上结帐。
- 问一个白吃问题,i: integer; 定义一个全局变量后, 怎么样才能给它赋初值???
- 有奖找错 50分相赠 谢谢。。。。。。。。。。。
- 进销存系统的问题
ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF, 0);
var
TP, TPPre: TTokenPrivileges;
Token: THandle;
dwLength: DWORD;
begin
result := false;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
Token);
try
TP.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, PChar(sPrivilegeName),
TP.Privileges[0].LUID) then
begin
if bEnabled then
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
TP.Privileges[0].Attributes := 0;
dwLength := 0;
Result := AdjustTokenPrivileges(Token, false, TP, sizeof(TPPre),
TPPre, dwLength);
end;
finally
CloseHandle(Token);
end;
end;
//此方法支持win2000/win98
procedure Tform2.rebootcomputer;
var
hToken:THandle;
tkp : TOKEN_PRIVILEGES;
ReturnLength : DWord;
begin if (not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_ALL_ACCESS or TOKEN_QUERY, hToken))then
begin
application.Terminate;
end;
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes :=SE_PRIVILEGE_ENABLED;
ReturnLength :=0;
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil,ReturnLength);
if (GetLastError() <> ERROR_SUCCESS) then
begin
application.Terminate;
end; if (not ExitWindowsEx(EWX_SHUTDOWN, 0)) then //EWX_SHUTDOWN/EWX_REBOOT
begin
application.Terminate;
end;
end;
procedure ExitWin2000(ewx: integer); {ewx 1: 重启;2:关闭电源}
var
hToken: THANDLE;
hProc: THANDLE;
mLUID: TLargeInteger;
mPriv, mNewPriv: TOKEN_PRIVILEGES;
mBufferLength: DWord;
begin
if not (ewx 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);
case ewx of
1: ExitWindowsEx(EWX_FORCE + EWX_REBOOT, 0);
2: ExitWindowsEx(EWX_FORCE + EWX_POWEROFF, 0);
end;
end;
//关闭计算机的过程/////////////////////////////////////////////////////////
procedure shutDown();
var
os:OSVERSIONINFO;
begin
os.dwOSVersionInfoSize:=sizeOf(TOSversionInfo);
getVersionEx(os);
if (os.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS) then
exitWindowsEx(EWX_SHUTDOWN,0);
if (os.dwPlatformId=VER_PLATFORM_WIN32_NT) then
exitWin2000(2);
end;