프로그램 사용 중 간혹 예기치 않게 프로그램 에러 메시지 창이 표출이 되는 경우가 있습니다. 직접 작업중인 상태라면 문제가 없는데 자동 실행되는 프로그램의 경우 게속 표출된 상태로 남아 있을 수 있어 이 경우를 방지하고자 할 경우 다음과 같은 코드를 적용할 수 잇습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// 간단하게 타이머 돌리면서 에러메시지박스가 있는지 찾고 발견되면 종료시킴 procedure TForm1.Timer1Timer(Sender: TObject); var Wnd : THandle; s : string; begin timer1.Enabled := false; try // Application Error는 윈도우 레지스트리 셋팅을 통해서도 방지 가능 s := 'Application Error'; Wnd := FindWindow(nil,PChar(s)); if Wnd > 0 then begin PostMessage(Wnd, WM_CLOSE, 0, 0); end; // 메모리 참조 오류등이 뜰때 발생 s := 'Program1.exe - 응용 프로그램 오류'; Wnd := FindWindow(nil,PChar(s)); if Wnd > 0 then begin PostMessage(Wnd, WM_CLOSE, 0, 0); end; // 메모리 참조 오류등이 뜰때 발생 s := 'Program1; if Wnd > 0 then begin PostMessage(Wnd, WM_CLOSE, 0, 0); end; // Error code가 216이나 217등 kernelbase.dll 관련한 에러일 경우 // 메시지박스의 타이틀에는 Error로만 표시됨. s := 'Error'; if Wnd > 0 then begin PostMessage(Wnd, WM_CLOSE, 0, 0); end; finally timer1.Enabled := true; end; end; |