어떤 프로그램을 만들어 실행시켜 놓은 다음
사용자가 컴퓨터를 종료할때에 제가 이미 실행시켜 놓은 프로그램의
이벤트를 발생하고 싶습니다.
예를 들어 제가 만든 AAA라는 프로그램을 실행 시킨 다음
사용자가 윈도우를 종료를 하면 AAA라는 프로그램에서
메세지박스를 띄우려면 어찌해야 하는지여?
제가 만든 프로그램에서 윈도우 종료 메세지를 가로채면 된다는데...
어찌해야 메세지를 가로챌수 있는지 모르겠네요...
고수님들의 많은 조언 바랍니다...
예제같은것을 올려 주시면 더욱 감사 드리고요..
그럼...
프로그램에게 WM_QUERYENDSESSION이라는 메시자가 일괄 전달됩니다.
이 메시지를 어떻게 처리하느냐에 따라서, 종료가 되거나, 종료가 되지 않게
됩니다.
좀더 자세하게 살펴보면, WM_QUERYENDSESSION 메시지를 처리하고,
True를 반환하면 WM_ENDSESSION 메시지가 발생하면서, 프로그램이
종료되게 됩니다. 하지만, False를 반환하게 되면, 프로그램이 종료되지
않고, 더불어 윈도우 종료 및 로그 오프도 수행되지 않게 됩니다.
예제를 잠깐 보면,
이렇게 선언해 놓고...
procedure OnQueryEndSession(var msg:TMessage); Message WM_QUERYENDSESSION;
요렇게 구현하지요...
procedure TForm1.OnQueryEndSession(var msg: TMessage);
var
nRet:integer;
begin
// 종료되기전 원하는 작업...
nRet:=MessageBox(handle, '로그 오프를 할까요?', '로그 오프', MB_YESNO);
if nRet=IDYES then
msg.Result:=1 // yes를 선택하면 로그 오프
else
msg.Result:=0; // no를 선택하면 로그 오프 취소
end;
그런데, 치명적인 문제점이 하나 있습니니다. WM_QUERYENDSESSION
메시지가 모든 프로그램에 순차적으로 보내지기는 하는데, 어느 순서를
통해서 이 메시지를 보내는지는 저도 잘 모르겠습니다.
최 우선적으로 수행되게끔 하려면, 다른 어떤 방법이 필요할 듯한데...
그 부분까지는.... -_-;;;