안녕하세요.
98에선 잘 되는거 같은데
지금 개발환경은 윈도우 2천입니다.
윈도우2천이 nt 계열이라 그런지 로그오프밖에 안되는군요
강제종료를 해도 로그오프만 되고요.
2천이나 사용할수 잇는 방법이 없을까요?
그럼 수고하세요
ExitWindowsEx(EWX_FORCE, 0); //강제종료
ExitWindowsEx(EWX_LOGOFF, 0); //LOG OFF
ExitWindowsEx(EWX_REBOOT, 0); //Shut Down & Reboot
ExitWindowsEx(EWX_POWEROFF,0); //Shut Down & Turn Off
ExitWindowsEx(EWX_SHUTDOWN, 0); //ShutsDown
님의 글을 이제서야 읽었는데 해결하셨는지 모르겠군요...^^
그래두 뒤늦게 나마 리플을 달아봅니다...
NT/2000에서는 보안기능이 철저하므로 재부팅 특권을 줘야 재부팅을 할 수 있습니다.
95/98에서는 ExitWindowsEX(EWX_REBOOT, 0)를 쓰면 보안기능이 없으므로
즉시 재부팅이 되지만 NT/2000에서는 LogOff가 될것입니다.
아무리 Admin권한으로 로그인을 하였어도 특권이 없으면 재부팅을 할 수 없는 것이죠...
다행이 Admin은 자신이 스스로에게 재부팅 특권을 부여할 수 있습니다.
그럼 먼저 OS 버젼을 알아야 겠죠?
//=================================================
//OS Version 알아내기
//=================================================
function GetWinVersion: string;
var
Version: LongInt;
lsTemp, sOSVersion: string;
begin
Version := GetVersion;
lsTemp := IntToStr(LoByte(LoWord(Version))) + '.' + IntToStr(HiByte(LoWord(Version)));
if lsTemp = '4.10' then
sOSVersion := 'WIN98'
else
sOSVersion := 'WINNT';
result := sOSVersion;
end;
//=================================================
//NT/2000에서 재부팅 특권을 주는 함수
//=================================================
procedure MyRebootSystem;
var
rl: Cardinal;
hToken: Cardinal;
tkp: TOKEN_PRIVILEGES;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1;
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
ExitWindowsEX(EWX_REBOOT, 0);
end;
end;
//=================================================
그럼 즐코 하세요~~~^^
대~~~한민국 화이링~~~