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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1170] 간단하게 hProcess 로 HWND 찾아내기
보리 [rhythmax] 9590 읽음    2016-01-05 16:57
CreateProcess를 사용해서 ProcessId가 있으면 간단한데...

연결 파일을 실행하느라 ShellExecuteEx를 사용했더니 hProcess만 튀어 나오더군요...

구글링 해서 찾은 많은 방법 중 이 방법이 (트릭이지만) 가장 간단하네요.

hProcess를 이용해 방금 실행한 프로세스의 실행 시간을 알아내고.

실행된 프로세스 목록에서 시간이 같은 프로세스를 찾아냅니다.


bool ret = ShellExecuteEx( &execinfo );

if (!ret) 
    //실행 실패
   return;

WaitForInputIdle(execinfo.hProcess, 1000);

FILETIME lpCreationTime, lpCreationTime2;
FILETIME d1,d2,d3;
DWORD dwProcessId;
HANDLE hProc;

GetProcessTimes( execinfo.hProcess, &lpCreationTime, &d1, &d2, &d3 );  
HWND hTemp = ::FindWindow(NULL,NULL);  

while ( hTemp != NULL ) {
	if ( ::GetParent(hTemp) == NULL ) {
		::GetWindowThreadProcessId(hTemp,&dwProcessId);  
		hProc = OpenProcess(PROCESS_QUERY_INFORMATION, 0, dwProcessId);   
		GetProcessTimes( hProc, &lpCreationTime2, &d1, &d2, &d3 );   
		CloseHandle(hProc);

		if ( lpCreationTime.dwHighDateTime == lpCreationTime2.dwHighDateTime
							&& lpCreationTime.dwLowDateTime == lpCreationTime2.dwLowDateTime )
		{
                        //찾았다. hTemp가 그 놈...
			break;
		}

		hTemp = ::GetWindow(hTemp, GW_HWNDNEXT) ;
	}
}



출처 : http://msgroups.net/vc.mfc/shellexecuteex-from-dll-and-want-hwnd-from-hprocess/559812
장성호 [nasilso]   2016-01-29 19:35 X
비슷한 방식이긴 한데..
저는 예전에 GetWindow대신 EnumWindow 를 써서 했었네요
참조  http://cafe.naver.com/bcbmaster/616

+ -

관련 글 리스트
1170 간단하게 hProcess 로 HWND 찾아내기 보리 9590 2016/01/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.