FindWindow

원형

HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName);

MFC 원형

static CWnd* PASCAL CWnd::FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );

인수

▶lpClassName : 검색에 사용할 윈도우 클래스 이름, 또는 아톰값. NULL이면 모든 윈도우 클래스를 검색한다.

▶lpWindowName : 검색에 사용할 윈도우의 캡션 문자열. NULL이면 모든 캡션의 윈도우를 검색한다.

리턴

성공하면 검색한 윈도우의 핸들을 리턴하며 실패했을 경우 NULL을 리턴한다.

설명

윈도우 클래스와 캡션으로 윈도우를 검색하여 핸들을 얻는다. 윈도우간의 상호작용을 하기 위해서는 윈도우의 핸들이 필요한데 이 함수로 원하는 윈도우의 핸들을 조사할 수 있다. 윈도우 클래스 또는 윈도우 캡션 둘 중 하나의 조건으로 검색할 수 있다. 차일드 윈도우는 검색할 수 없으며 탑 레벨 윈도우만 검색 대상이 된다. 윈도우 클래스와 캡션 문자열은 대소문자를 가리지는 않지만 부분 문자열을 검색할 수는 없다. 따라서 캡션이 가변적으로 변하는 윈도우를 검색하는 목적으로는 이 함수를 사용할 수 없으며 우연히 같은 캡션을 가지는 윈도우가 있을 경우 잘못된 검색을 할 위험도 있다.

두 프로그램이 상호 작용을 하고자 할 때 미리 캡션을 정해 놓고 정해진 캡션으로 상대방을 찾는 용도로 주로 많이 사용된다. 이 경우 윈도우의 캡션은 항상 고정되어 있어야 한다는 제약이 있다.

예제 1

다음 예제는 지뢰 찾기 윈도우를 검색한다. 만약 지뢰 찾기 윈도우가 발견되면 윈도우의 위치를 강제로 (10,10)으로 옮긴다. 일단 윈도우의 핸들을 얻었으면 윈도우 이동, 파괴, 숨김, 메시지 전달 등의 모든 작업을 할 수 있다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	HWND hMine;
	LPCTSTR Mes=TEXT("지뢰 찾기를 실행시킨 후 마우스 오른쪽 버튼을 누르십시오");

	switch(iMessage) {
	case WM_LBUTTONDOWN:
		hMine=FindWindow(NULL,"지뢰 찾기");
		if (hMine == NULL) {
			MessageBox(hWnd,"지뢰 찾기가 실행중이지 않습니다","알림",MB_OK);
		} else {
			SetWindowPos(hMine,HWND_NOTOPMOST,10,10,0,0,SWP_NOSIZE);
		}
		return TRUE;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

 

참고함수

FindWindowEx : 차일드 윈도우를 검색한다.
EnumWndows : 생성되어 있는 모든 윈도우를 열거한다. 이 함수를 사용하면 캡션에 대해 부분 문자열 검색이 가능하다.

플랫폼

95이상

참조

본문의 IPC 관련 예제들은 통신 대상을 찾기 위해 주로 이 함수를 많이 사용한다.


written by http://www.winapi.co.kr