[6.0] 윈도우 API 라는게 대체 뭐야? # 05편 - 창과 창에 관련된 API (1)
이번 강의는 창에 대해 집중적으로 파고드는 계기를 마련해줄 것입니다.
물론 그러니만큼 내용이 상당히 많습니다. 창에 관련된 API는 무수하며,
아마 제대로 다 다루려면 책 한권은 써야할 것입니다.
우선 간단히 실무에서 많이 쓰는 API를 중심으로 설명해드리겠습니다.
(HWND : 창의 핸들을 줄여서 왼쪽과 같이 쓰겠습니다.)
GetDesktopWindow () : 바탕 화면에 대한 창 핸들을 얻어오는 함수입니다.
(반환값: 바탕 화면에 대한 HWND)
FindWindow (클래스 이름, 창 이름) : 특정 클래스 네임이나 창 이름이 일치하는 조건의 첫 창을 찾습니다.
(반환값: 찾은 창의 HWND / 0이면 못찾은 것이다.)
-> 클래스 이름이나 창 이름이 vbNullString일 경우 그 조건은 무시됩니다.
FindWindowEx (부모창, 검색기준창 HWND, 클래스 이름, 창 이름) : FindWindow에서 조금 발전한 형태로,
부모창와 검색기준창 HWND가 각각 0일 때 FindWindow와 같은 동작을 수행합니다.
부모창은 어떤 창의 자식창을 찾을 때 사용하며, (FindWindow로는 찾을 수 없습니다.) 검색기준창은,
조건을 만족하는 창에서 그 기준이 되는 창, 다음으로 조건을 만족하는 창을 찾는데에 사용됩니다.
(반환값: 찾은 창의 HWND / 0이면 못찾은 것이다.)
FlashWindow : 작업 표시줄의 창에 대한 단추를 깜빡이는데에 사용합니다.
(반환값 : 함수가 성공적으로 수행되었으면 0이 아닌 값, 아니면 0을 반환합니다.)
그렇다면 창마다 부여되는 '클래스 네임'이란 무엇일까요?
사실 창이라는건, 생성될 때 아래와 같은 api들을 호출하는 절차를 거칩니다.
RegisterClass(Ex) -> CreateWindow
이 때 응용 프로그램에서는 지정된 클래스 명으로 창을 생성합니다.
즉, '클래스 명'은 거의 바뀌지 않는다는 장점이 있습니다. 그러나, 창 이름은 수시로 바뀔 수 있습니다.
메모장의 경우 '제목 없음 - 메모장' 에서 갑자기 'MyDocument.TXT - 메모장' 식으로 바뀌듯..
클래스 네임이나 창 이름은 Spy++라는 Window Viewer를 통해서 살펴볼 수 있습니다.
이에 대한 자세한 내용(한글)은 이 사이트를 읽으시면 바로 이해가 되실겁니다.
http://www.winapi.co.kr/toollec/Spy/Spy.htm (혹은 www.winapi.co.kr - 개발툴 강좌)
작성자 : 수학쟁이(NAVER)