FindWindow 함수는
ClassName과 Caption이 똑같은 경우의 window가 여러개 있을경우..
Desktop에서 Z-Order가 앞쪽에 있는 window부터 찾아서 return되는것 같습니다.(경험상 추측임)
아래 코드를 실행하는 곳이 "TestApp " 라는 Form 을 생성한 후에 호출한다면..
현재process의 Form(window)이 찾아질 확율이 매우 높죠
FindWindow로 이미 똑같은 Form이 생성되었는지 확인하여 중복실행을 방지하는 것이라면
현재process에서 해당Form과 똑같은 Form이 생성되지 전에 확인해 보는것이 더욱 편리할것입니다.
혹시 Project이름이 Project1 이라면 Project1.cpp 파일을 열어보세요
그러면 다음과 같은 코드가 있을것입니다.
Application->CreateForm(__classid(TForm1), &Form1);
맨첫번째 CreateForm으로 생성되는 Form이 Application->MainForm 이 됩니다.
결론적으로 현재 process에서 해당Form이 생성되기 전인
Application->CreateForm 앞에서 FindWidow한후에 처리하시면 될것입니다.
그럼...
도움 님이 쓰신 글 :
: 현재 프로그램의 캡션이 TestApp 라고 하면..
:
: HWND hWnd = FindWindow(NULL, "TestApp ");
: if(hWnd)
: {
: DWORD ProcessId;
: GetWindowThreadProcessId(hWnd, &ProcessId); // hWnd로 프로세스 ID를 얻음..
: HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
: if(hProcess)
: {
: TerminateProcess(hProcess,0);//또는 ExitProcess 사용해서 죽임..
: }
: }
:
: 요 소스를 프로젝트 WinMain 함수에 넣었는데..
: 중복실행을 방지하려고 했는데, 처음실행에도 무조건 걸리네요... ㅠㅠ
: 폼도 안만들어진상태인 WinMain 함수에서 왜 자기자신이 검색이 되는지..
:
: 도움부탁드립니다..
:
: 참고로 Mutex 도 사용해보았습니다만, 어떤이유에서인지 테스트부서에서 몇십회 실행중에 중복실행이 된다고 하네요... PC입수할수 있는 환경도 아님 ㅠㅠ