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

델파이 Q&A
Delphi Programming Q&A
[14787] Re:Re:Re:Re: 혹시나 답변에 도움이 될까 해서 에러화면 올립니다.
한상훈 [] 2258 읽음    2013-09-28 11:58
이렇게 귀찮게 해드리는데도 친절하게 답변을 주시니 다시 한번 감사드립니다.

말씀하신 방법대로 해봤는데요.
문제가 또 있습니다.
사용자가 재부팅을 하려고 해도 꺼져버리기만 하니까
컴퓨터를 종료할껀지 재부팅을 할껀지 구분을 할수가 없다는 문제가 남거든요.

[팁&트릭]코너에 보면 "madCodeHook"이라는 라이브러리를 이용하여 종료인지 재부팅인지를 구분해주는 소스코드가 있긴 한데
한 번 사용하기 위해 madCodeHook을 구해하는 것은 제게는 부담이라서요.

컴퓨터가 꺼지게 재부팅인지 그냥 꺼지는건지 알 수 있는 방법은 없을까요?



박지훈.임프 님이 쓰신 글 :
: 그렇다면, 윈도우 OS 종료 동작중에는 새로운 프로세스의 시작을 막는 모양이군요.
: 생각해보니 당연한 일입니다. 윈도우를 종료시키느라 프로세스들을 하나씩 차례로 닫고 있는데 새로운 프로세스가 실행되어버리면 종료는 물건너갈테니까요. 저라도 그렇게 설계했을 것 같습니다.
:
: 그렇다면 방법은 아무래도.. 이런 시나리오로 가야 할 것 같습니다.
: 1. 윈도우 종료를 일단 거절한다. (WM_QUERYENDSESSION 메시지의 결과값으로 윈도우 종료를 막을 수 있었던 것으로 기억합니다)
: 2. 실행할 프로세스를 실행해준다.
: 3. 다시 윈도우 종료를 시킨다.
:
: 간단하지요. ㅎㅎ
: 기대하신 것보단 넘 단순무식한 답이겠습니다만, 이 방법밖에 없지 않을까 싶습니다.
:
:
: 한상훈 님이 쓰신 글 :
: : 임프님 말씀대로 CreateProcess로 해도 마찬가지고 WinExec로 해도 에러 메세지는 똑같네요.
: :
: : 에러 화면 캡쳐해서 올리니 도와주시면 감사하겠습니다.
: :
: :
: :
: : 박지훈.임프 님이 쓰신 글 :
: : : 확실한 건 아니고.. 그냥 언뜻 든 생각인데요.
: : : ShellExecute 대신 WinExec나 CreateProcess 등의 다른 함수를 쓰면 되지 않을까 싶습니다.
: : : ShellExecute는 explorer.exe(탐색기)를 먼저 실행시키고 그 안에서 다시 cmd를 실행시키는 것이라, 시스템 종료시 탐색기가 종료된 상태에서 이상 동작할 가능성이 많아보입니다.
: : :
: : :
: : : 한상훈 님이 쓰신 글 :
: : : : private
: : : :     procedure WMQueryEndSession(var Msg : TWMQueryEndSession); message WM_QueryEndSession;
: : : :     Procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION;
: : : :
: : : : 이렇게 선언했구요.
: : : :
: : : :
: : : : procedure TForm1.WMQueryEndSession(var Msg : TWMQueryEndSession) ;
: : : : begin
: : : :   Msg.Result := 0;
: : : :  ShellExecute(.....);
: : : :   Msg.Result := 1;
: : : : end;
: : : :
: : : : procedure TForm1.WMEndSession(var Msg : TWMEndSession) ;
: : : : begin
: : : :   inherited;
: : : : end;
: : : :
: : : :
: : : : 이렇게 처리했습니다.
: : : :
: : : : ShellExecute 부분에서는 "CMD.exe /C run.bat" 를 실행하려고 하구요.
: : : :
: : : : 그런데 문제가 생겼습니다.
: : : :
: : : : Windows가 종료될때 CMD.exe가 실행이 되지 않고 "응용프로그램을 초기화하지 못했습니다.."라는 에러 메세지를 띄우고
: : : : 명령을 실행하지 못하고 그냥 강제종료되어 버립니다.
: : : :
: : : : 에러메세지 없이 ShellExecute명령을 실행할 방법이 없을까요?

+ -

관련 글 리스트
14782 시스템종료이벤트에서 도스명령 실행시 에러메세지 한상훈 2045 2013/09/26
14783     Re:시스템종료이벤트에서 도스명령 실행시 에러메세지 박지훈.임프 2389 2013/09/26
14785         Re:Re: 혹시나 답변에 도움이 될까 해서 에러화면 올립니다. 한상훈 2064 2013/09/27
14786             Re:Re:Re: 혹시나 답변에 도움이 될까 해서 에러화면 올립니다. 박지훈.임프 2262 2013/09/28
14787                 Re:Re:Re:Re: 혹시나 답변에 도움이 될까 해서 에러화면 올립니다. 한상훈 2258 2013/09/28
14784         Re:Re:시스템종료이벤트에서 도스명령 실행시 에러메세지 한상훈 2272 2013/09/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.