2.창 뷰

창 뷰는 현재 바탕 화면 아래에 있는 모든 윈도우의 목록을 계층 구조의 트리로 보여 준다. 스파이를 실행하자 마자 나타나며 닫혀 있을 경우는 툴바의 첫번째 버튼을 클릭하면 언제든지 열 수 있다. 앞의 그림에 나타난 뷰가 바로 창 뷰이며 바탕 화면 아래에 아주 많은 윈도우들이 표시되어 있다.

알다시피 윈도우끼리는 서로 부모 자식 관계를 형성하는데 창 뷰를 보면 바탕 화면 아래에 어떤 윈도우들이 생성되어 있고 각 윈도우 아래에 어떤 차일드들이 있는지를 일목 요연하게 살펴 볼 수 있다. 차일드를 가지고 있는 윈도우 앞에는 +버튼이 표시되어 있는데 이 버튼을 눌러 트리를 확장하면 차일드 목록이 나타난다. 예를 들어 Shell_TrayWnd 윈도우를 보자. 이 윈도우는 흔히 말하는 작업 표시줄(타스크 바)이다.

타스크 바 아래에 Button 컨트롤이 있는데 이것이 바로 "시작" 버튼이고 TrayNotifyWnd가 트레이 영역이다. 트레이 안에는 시계가 있고 아이콘을 등록하는 툴 바가 배치되어 있음을 알 수 있다. ReBarWindow32가 타스크 바이고 그 안에 퀵 론치 버튼과 실행중인 프로세스의 목록을 버튼 형태로 보여주는 툴 바가 있다.

창 뷰가 보여주는 이런 정보들을 통해 윈도우의 계층 구조를 한눈에 파악할 수 있다. 일반 응용 프로그램의 메인 윈도우를 찾아 계층 구조를 보면 어떤 컨트롤을 사용했고 윈도우간의 포함관계가 어떠한지를 알 수 있다. 창 뷰의 아무 곳에서나 오른쪽 마우스 버튼을 누르면 다음과 같은 팝업 메뉴가 나타난다.

바탕 화면 아래의 윈도우 목록은 응용 프로그램이 실행, 종료될 때마다 수시로 변할 수 있는데 비해 창 뷰는 최초 열릴 때의 윈도우 목록을 가지고 있으므로 정확하지 않을 수 있다. 새로 고침 명령은 윈도우 목록을 다시 조사하도록 한다. 단축키 F5를 누르거나 툴바에서 버튼을 클릭해도 동일하다.

메시지 항목은 윈도우로 전달되는 메시지를 보여주고 속성 항목은 윈도우의 여러 가지 정보를 보여 주는데 이 두 명령은 조금 복잡하므로 잠시 후 따로 알아볼 것이다. 강조 항목은 선택한 윈도우의 영역을 잠시동안 깜박거리도록 하여 이 윈도우가 실제 화면의 어디쯤에 있는지를 보여준다. 트레이의 시계를 강조해 보면 시계 영역이 깜박거리며 "저는 여기 있습니다"라는 것을 표시한다. 윈도우 목록에서 위치를 확인하고자 할 때 아주 유용한 기능이다.

창 뷰의 트리에 아주 많은 윈도우들이 나타나는데 응용 프로그램이 여러 개 실행중일 때는 수백개에 달하기 때문에 이 중 원하는 창을 육안으로 직접 찾기가 쉽지 않다. 그래서 스파이는 창 검색 명령을 제공하는데 툴바에서 버튼을 누른다. 다음과 같은 대화상자가 나타나는데 이 대화상자에서 찾고자 하는 창에 대한 정보와 검색 방향을 입력한다. 윈도우 핸들이나 캡션 또는 윈도우 클래스 이름을 입력할 수 있다. 또는 찾고자 하는 윈도우가 보이는 상태라면 찾기 도구(과녁처럼 생긴 것)를 드래그해서 원하는 윈도우에 떨어뜨리면 된다.

창 뷰에는 검색된 윈도우의 항목이 선택되는데 이를 통해 이 윈도우가 누구의 자식인지, 어떤 스타일을 가지고 있는지 등을 조사할 수 있다. 창 검색 대화상자의 "Spy++ 숨기기"옵션을 선택하면 검색을 하는 동안 스파이의 메인 윈도우를 숨겨 주어 가급적이면 많은 윈도우들이 화면에 보이도록 해 준다. 만약 검색하고자 하는 윈도우가 스파이 뒤에 숨어 있다면 이 옵션을 선택한 후 찾기 도구를 드래그하면 된다.

주의할 것은 창 검색 명령은 현재 열려져 있는 창 뷰에서 윈도우를 찾기 때문에 창 뷰를 연 후에 실행한 윈도우에 대해서는 제대로 검색이 되지 않는다는 점이다. 이때는 반드시 새로 고침을 눌러 새로 생성된 윈도우에 대한 목록을 다시 조사한 후 검색해야 한다. 스파이는 창 목록에 대한 스냅샷(정적 복사본)만 가지며 실시간으로 갱신하지 않으므로 수동으로 목록을 갱신해야 한다. 아주 당연한 얘기지만 예상외로 새로 고침을 하지 않고 검색하는 사람들이 많다.

창 검색 명령과 비슷한 명령으로 창 찾기 명령이 있는데 툴바에서 버튼을 누르면 창 찾기 대화상자가 나타난다. 모양은 창 검색 대화상자와 유사하지만 캡션이나 윈도우 클래스는 입력할 수 없고 윈도우 핸들을 직접 입력하거나 찾기 도구를 드래그하는 방식으로 원하는 윈도우를 찾는다. 조사하고자 하는 윈도우를 열어 놓고 찾기 도구를 드래그하는 것이 보편적이다.

창 찾기 명령은 스파이를 사용하는 가장 주된 이유이기도 하고 사용하는 방법도 아주 쉽다. 그저 찾기 도구를 드래그해서 관심 있는 윈도우위로 가져가기만 하면 된다. 찾기 도구가 윈도우 위를 지날 때 바로 아래에 있는 윈도우에 대한 기본 정보를 보여주므로 이 정보만 참고해도 사실 굉장히 많은 정보를 얻을 수 있다. 창을 찾은 후 아래쪽의 '표시' 옵션에서 속성 또는 메시지를 선택하면 찾은 윈도우의 더 상세한 정보를 볼 수 있다.

그렇다면 창 찾기 기능을 사용하여 어떤 정보들을 얻을 수 있는지 구체적으로 실습해 보자. 어떤 응용 프로그램이라도 창 찾기의 대상이 될 수 있는데 여기서는 국산 압축 프로그램의 대명사인 알집 5.0을 조사해 보았다. 이 프로그램이 설치되어 있지 않다면 탐색기나 워드같은 프로그램으로 실습해도 상관없다.

찾기 도구를 드래그해서 알집의 툴바 위로 이동해 보면 툴바에 대한 핸들과 캡션 등이 찾기 대화상자에 표시되며 툴바가 차지하고 있는 영역에 굵은 외곽선이 그려진다. 옆에 있는 광고판으로 이동해 보면 마찬가지로 이 윈도우의 정보가 나타나며 광고판의 영역에 굵은 선이 그려질 것이다. 이를 통해 우리는 알집의 광고판이 툴바의 차일드로 생성되어 있다는 것을 알 수 있다.

작업 표시줄의 트레이도 이런 식으로 조사해 보면 트레이가 타스크 바의 차일드이면서 시계의 부모이다. 이런 식으로 찾기 도구를 드래그해 보면 응용 프로그램의 윈도우 계층 구조가 한눈에 파악된다. 물론 이 정보는 창 뷰를 통해서도 확인할 수 있다.

다음은 잘 알다시피 인터넷 브라우저인 IE이다. 이 화면에 현재 콤보 박스와 에디트 컨트롤, 그리고 버튼이 배치되어 있는데 이 버튼들을 스파이로 조사해 보자. 스파이의 찾기 도구로 윈도우의 정보를 조사해 보는 것을 일명 "찍어 본다"라고 표현한다.

IE의 웹 컨트롤을 스파이로 찍어 보면 콤보 박스는 Internet Exploret_TridentCmboBx라는 긴 윈도우 클래스명을 가진다는 것을 알 수 있다. 즉, IE의 웹 페이지에 나타나는 콤보 박스는 Win32 콤보 박스와는 다른 컨트롤이며 이 윈도우로 CB_* 메시지를 보내는 것은 소용없다는 것을 알 수 있다. 표준 콤보 박스의 윈도우 클래스명은 "COMBOBOX"이다.

또한 에디트나 버튼은 스파이로 찍을 수가 없으며 찾기 도구로 드래그해도 이 윈도우에 대한 정보가 나타나지 않는다. 이를 통해 웹 페이지에 나타나는 에디터나 버튼은 윈도우가 아니라는 것을 알 수 있다. 즉 이 컨트롤은 윈도우 핸들을 가지지 않는 그래픽 컨트롤이며 IE 컨트롤이 직접 관리한다. 그러니 IE의 에디트로 메시지를 보내 텍스트를 바꾼다거나 하는 기법은 불가능하며 정 그렇게 하고 싶으면 IE가 제공하는 공개 API를 사용하여 직접 통신해야 한다.

스파이의 찾기 도구를 사용하면 응용 프로그램을 만든 개발툴도 조사할 수 있다. 이는 주로 윈도우 클래스의 이름으로 판별하는데 알집의 경우 TToolBar, TPanel 과 같은 클래스명이 붙여져 있다. T로 시작하는 윈도우 클래스명은 볼랜드 계열의 컴파일러 특성이며 구체적으로 델파이의 컴포넌트 이름이다. 즉 알집은 델파이로 만들었다는 것을 알 수 있다.

스파이로 메인 윈도우를 찍었을 때 Afx: 어쩌고 저쩌고 하는 윈도우 클래스명을 가지는 프로그램들은 모두 MFC로 만든 것들이다. MFC는 라이브러리 자체에 클래스 명을 작성하는 규칙이 하드코딩되어 있기 때문에 이 클래스명을 바꿀 수 없도록 되어 있으며 따라서 클래스명만 봐도 개발툴과 버전, 심지어 링크 방식까지도 파악할 수 있다.

남이야 프로그램을 뭘로 만들었든지 그런 것을 알아서 뭐하느냐고 할지 모르겠지만 이런 정보도 사실 굉장히 중요하다. 경쟁 제품을 분석한다거나 유사한 인터페이스를 만들고자 할 때 스파이가 조사해 주는 이런 정보만으로도 아주 큰 참고가 된다. 개발툴을 알면 응용 프로그램의 개발 과정을 추측할 수 있고 경험이 많은 사람들은 이 프로그램의 장점이나 한계점까지도 파악할 수 있다.