[WinAPI] FindWindow 사용법

이번 글에서는 FindWindow에 대해 알아보겠습니다.

FindWindow를 사용하시기 전 아래 헤더파일을 선언하셔야합니다.

#include <Windows.h>

FindWindow의 함수 원형은 아래와 같습니다.

HWND FindWindowA(
  LPCSTR lpClassName,	// 클래스 네임
  LPCSTR lpWindowName	// 캡션
);

FindWindow의 첫번째 인자는 클래스네임, 두번째 이름은 캡션을 입력해야합니다.
하지만 꼭 두개의 인자를 입력해야 하는건 아닙니다. 둘 다 NULL로 입력해도 되고, 둘 중 하나만 입력해도 됩니다.

HWND hwnd = ::FindWindow( NULL, NULL );
HWND hwnd = ::FindWindow( L"ClassName", NULL );
HWND hwnd = ::FindWindow( NULL, L"Caption" );
HWND hwnd = ::FindWindow( L"ClassName", L"Caption" );

다만 클래스네임과 캡션은 대소문자를 구별하지 않지만 부분 검색은 하지않으므로 정확하게 입력하시는걸 추천합니다.

HWND hwnd = ::FindWindow( L"Class", L"Caption" ); // X
HWND hwnd = ::FindWindow( L"ClassName", L"Caption" ); // O

정상적으로 작동하면 찾은 윈도우의 HWND를 반환 하고 그렇지 않으면 NULL을 반환합니다.

샘플 코드를 만들어 보겠습니다.

저번에 제가 MFC로 Class Name을 설정하는 방법에 대해 글을 쓴 적이 있습니다. 이때 만든 대화상자를 활용해보도록 하겠습니다.

위와 같이 대화상자를 만드시고 아래와 같이 코드를 입력합니다.

void main()
{
	HWND hwndFind = ::FindWindow( L"MyPrivateClassName", L"MFCApplication1" );

	if ( NULL != hwndFind )
	{
		cout << "0x" << hex << hwndFind << endl;
		::SetWindowPos( hwndFind, NULL, 0, 0, 100, 100, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER );
	}
	else
		cout << "hwndFind is NULL" << endl;
	system( "pause" );
}

위 코드를 실행하면 동영상 같이 대화상자의 HWND를 받아서 크기를 조절합니다.