Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 팁&트릭
Delphi Programming Tip&Tricks
[13] [팁] 컴퓨터 Shutdown(Reboot) 하기... (NT 포함)
박종민.BacTeria [bacteria] 5205 읽음    2002-03-15 11:11
안녕 하세요?

BacTeria 박종민 입니다.

오늘의 팁은 컴퓨터 Shutdown 해주는 것에 관한 팁이네여~

NT(2000, XP)도 됩니다.

그럼 이만... 오늘 하루도 파튕!!

program shutdown; 
{$APPTYPE CONSOLE} 
uses 
SysUtils, 
Windows; 

// Shutdown Program 
// (c) 2000 NeuralAbyss Software 
// www.neuralabyss.com 

var 
logoff: boolean = false; 
reboot: boolean = false; 
warn: boolean = false; 
downQuick: boolean = false; 
cancelShutdown: boolean = false; 
powerOff: boolean = false; 
timeDelay: integer = 0; 

function HasParam(Opt: Char): Boolean; 
var 
x: integer; 
begin 
result := false; 
for x := 1 to paramCount do 
if (paramstr(x) = '-'+opt) or (paramstr(x) = '/'+opt) then result := true; 
end; 

function GetErrorString: String; 
var 
lz: Cardinal; 
err: array[0..512] of Char; 
begin 
lz := GetLastError; 
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, lz, 0, @err, 512, nil); 
result := string(err); 
end; 

procedure DoShutdown; 
var 
rl,flgs: Cardinal; 
hToken: Cardinal; 
tkp: TOKEN_PRIVILEGES; 
begin 
flgs := 0; 
if downQuick then flgs := flgs or EWX_FORCE; 
if not reboot then flgs := flgs or EWX_SHUTDOWN; 
if reboot then flgs := flgs or EWX_REBOOT; 
if poweroff and (not reboot) then flgs := flgs or EWX_POWEROFF; 
if logoff then flgs := (flgs and (not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or EWX_LOGOFF; 
if Win32Platform = VER_PLATFORM_WIN32_NT then begin 
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then 
Writeln('Cannot open process token. ['+GetErrorString+']') 
else begin 
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then begin 
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; 
tkp.PrivilegeCount := 1; 
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl); 
if GetLastError <> ERROR_SUCCESS then 
Writeln('Error adjusting process privileges.'); 
end else Writeln('Cannot find privilege value. ['+GetErrorString+']'); 
end; 
{ if CancelShutdown then 
if AbortSystemShutdown(nil) = False then 
Writeln('Cannot abort. ['+GetErrorString+']') 
else 
Writeln('Cancelled.') 
else begin 
if InitiateSystemShutdown(nil, nil, timeDelay, downQuick, Reboot) = False then 
Writeln('Cannot go down. ['+GetErrorString+']') 
else 
Writeln('Shutting down!'); 
end;} 
end; 
// else begin 
ExitWindowsEx(flgs, 0); 
// end; 
end; 

begin 
Writeln('Shutdown v0.3 for Win32 (similar to the Linux version)'); 
Writeln('(c) 2000 NeuralAbyss Software. All Rights Reserved.'); 
if HasParam('?') or (ParamCount=0) then begin 
Writeln('Usage: shutdown [-akrhfnc] [-t secs]'); 
Writeln(' -k: don''t really shutdown, only warn.'); 
Writeln(' -r: reboot after shutdown.'); 
Writeln(' -h: halt after shutdown.'); 
Writeln(' -p: power off after shutdown'); 
Writeln(' -l: log off only'); 
Writeln(' -n: kill apps that don''t want to die.'); 
Writeln(' -c: cancel a running shutdown.'); 
end else begin 
if HasParam('k') then warn := true; 
if HasParam('r') then reboot := true; 
if HasParam('h') and reboot then begin 
Writeln('Error: Cannot specify -r and -h parameters together!'); 
Exit; 
end; 
if HasParam('h') then reboot := false; 
if HasParam('n') then downQuick := true; 
if HasParam('c') then cancelShutdown := true; 
if HasParam('p') then powerOff := true; 
if HasParam('l') then logoff := true; 
DoShutdown; 
end; 
end. 

+ -

관련 글 리스트
13 [팁] 컴퓨터 Shutdown(Reboot) 하기... (NT 포함) 박종민.BacTeria 5205 2002/03/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.