게시판에서 찾아볼 수 있는 다음과 같은 소스를 이용하여.. 윈도우 2000에서의 자동종료 프로그램을 짰숨다.
====================================================================
var
hToken : THandle;
ptkp, ptkpold : PTokenPrivileges;
r : dword;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
GetMem(ptkp,sizeof(TTOKENPRIVILEGES) + (1-ANYSIZE_ARRAY) * sizeof(TLUIDANDATTRIBUTES));
LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME,ptkp^.Privileges[0].Luid);
ptkp^.PrivilegeCount:=1;
ptkp^.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
r:=0;
ptkpold:=nil;
if AdjustTokenPrivileges(hToken, false, ptkp^, 0, ptkpold^, r) then
InitiateSystemShutdown(Nil, 'System ShutDown', 0,FALSE, TRUE);
end;
end;
====================================================================
근데.. 이렇게 하면.. 전원을 꺼도 안전하다는 메세지만 나오고 실제 파워는 꺼지지 않숨다.
물론 APM을 설정해놨기땜시.. 걍 시작버튼 눌러서 종료하면 파워도 꺼집니다.
Help를 봐도.. 아마도 이 InitiateSystemShutdown은 Shutdown까지만 되고, 파워는 못 끄는거 같습니다. (맞습니까? 아니라면 어떻게 하면 되는지??)
컴퓨터 전원까지 꺼버리고 싶은데.. 어떻게 하면 되는지요??
부디 알려주세요~~~~~~~~~~~~~~ ㅜ_ㅜ
이것땜시 지금 계속 컴만 껐다켰다.. 삽질을 ...흑흑 ㅜ_ㅜ
※ 이전 게시판에서 어떤분이 이와 똑같은 질문을 하셔서.. 그에 대한 답으로.. ExitWindows나 ExitWindowsEx쓰라고 써 놓으셨던데..
지금 작업하고 있는 OS가 Window2000 임다.. -_-;;;;
결론은 윈9X의 ExitWindows 함수하고 NT계열의 ExitWindows함수는 틀립니다. 델파이의 Win32 Programmer's Reference HELP를 보시면 ExitWindows하고 ExitWindowsEx 두가지가 있습니다. OS계열에 따라서 바꿔서 사용을 하셔야 하고, 테스트 해본 결과 NT계열에선 일반 시스템 종료 하시게 되면 BackGround에서 수행되는 NT Service 프로그램들이 시스템 종료라는 윈도우즈 메시지를 인식을 못하고 강제 종료라는 메시지만을 인식 하더라구요.
그리고 나서, APM 설정에 따라서 시스템이 자동 종료 되더라구요. EventLog 표시기에는 갑자기 시스템이 다운 되었습니다. 라는 말은 등록되지 않고 정상 적으로 시스템이 종료 되었다고 나오더군요. 그럼...