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

C++빌더 Q&A
C++Builder Programming Q&A
[62012] Re:중복실행방지를 위해 FindWindow 를 사용했는데요..자기 자신이 먼저 찾아지네요..
장성호 [nasilso] 2531 읽음    2010-07-27 11:02
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입수할수 있는 환경도 아님 ㅠㅠ

+ -

관련 글 리스트
62005 중복실행방지를 위해 FindWindow 를 사용했는데요..자기 자신이 먼저 찾아지네요.. 도움 1613 2010/07/26
62012     Re:중복실행방지를 위해 FindWindow 를 사용했는데요..자기 자신이 먼저 찾아지네요.. 장성호 2531 2010/07/27
62007     Re:중복실행방지를 위해 FindWindow 를 사용했는데요..자기 자신이 먼저 찾아지네요.. 김호광 1798 2010/07/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.