|
아래의 코드를 한번 이용해 보세요. Ctrl + Alt + Del 키를 누를때와의 똑같은 원리입니다. 그래도 가장 좋은 방법은 메모리에서 걸려있는 이유를 알아내는 것입니다. 그렇지 않고 강제 종료를 한다면, 당연히 불안정하겠죠.
MSDN에서는 아래 TerminateProcess API가 Windows 98 과 XP에서 메모리 반환이 완벽히 되지 않을수도 있다고 설명하고 있습니다. (추천하지 않음)
FindWindow API에서 첫번째 인자는 Class, 두번째 인자는 Caption 입니다. 클래스로 찾으시려면 "TApplication" 이나, 폼의 클래스를 (즉, 폼 이름을 변경 하지 않았다면 TForm1) 입력하셔서 찾아내시면 됩니다.
아래 예제는 계산기를 죽이는 예제입니다.
void __fastcall TMain::KillHandle()
{
HWND hdHandle;
HANDLE hdProcess;
DWORD dwPID;
hdHandle = FindWindow(NULL, "계산기");
if(hdHandle) {
GetWindowThreadProcessId(hdHandle, &dwPID);
if(dwPID) {
hdProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
TerminateProcess(hdProcess, -1);
}
KillHandle(); // 죽일때까지 재귀 호출
}
return;
}
알고싶은이... 님이 쓰신 글 :
: Action = caFree; 으로 해도 똑 같은데요...T.T
:
: 프로그램을 실행하구 한 2-3분안에 종료하면 아무 이상 없지만
:
: 프로그램을 좀더 시간이 흐르고 종료를 시키면 화면 상에는 아무것도 안보이지만
:
: 다시한번 프로그램을 실행하면 '더블 실행'이란 표현이 나오구
:
: CTRL+ALT+DEL을 누르고 작업관리자(98에서는 그냥 바로 화면이 나오지만)에 들어가면
:
: 그프로그램이 계속 실행중인 걸루 나오구 몇번 더 누르고 확인하면 "무응답"이란
:
: 글이 나오거든요....그래서 결국 다시 실행하려면 작업관리자에서 삭제를 해야
:
: 프로그램이 종료 됩니다.... 쓰레드가 계속 실행중인거 같은데...
:
: 종료시킬 방법이 없을까요...강제로 라도....
:
:
:
|