이번 글에서는 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를 받아서 크기를 조절합니다.