본문 바로가기

Programming/MFC

윈도우 클래스 이름을 얻어주는 Spy++

출처 카페 > 용장이 집에 왜왔니~ 왜왔니.. | 용장
원문 http://cafe.naver.com/0hy0/319

 

사용자 삽입 이미지
윈도우 핸들을 알아 주는 스파이라는 프로그램이다.
 
프로그래밍을 하다보면 여러 윈도우를 띄울때 윈도우들을 핸들링하기 위해 핸들을 얻어와야 하는 경우가 생긴다.
 
하다못해 게임을 해킹하더라도 게임 창의 핸들을 얻어와야 한다. 이때 쉽게 윈도우 이름을 알 수 있게 해주는 것이 바로 이 스파이라는 프로그램이다.
 
참고로 말하면 Win32 C++ 에서 윈도우 핸들을 얻어 오는 함수는 FindWindow이다.
HWND FindWindow(      

    LPCTSTR lpClassName,    LPCTSTR lpWindowName);
이런 형식을 가지며 쉽게 WindowName(일반적으로 윈도우 타이틀과 같다.) 을 사용하지만 윈도우가 포커스 아웃되는 경우 자주 핸들을 얻지 못하는 버그가 있기 때문에 ClassName을 사용하는 것이 좋다. 물론 둘다 써주면 더 좋다.
 
그럼 핸들을 얻고 싶은 윈도우의 classname과 windowname을 spy++로 찾아 보자.
 
젤 위에 있는 그림에서 빨간 동그라미를 친부분이 검색이다. 이것을 클릭하면 아래 창이 뜬다.
 
 
사용자 삽입 이미지


여기서 역시 빨간 동그라미 친 타겟을 특정 윈도우위로 드래그 해 옮긴다음 놓으면


 


사용자 삽입 이미지
 
 
이런 결과를 알려 준다. 여기서 Caption이 윈도우 이름이고 WMPlayerApp가 Class 이름이다. Handle은 윈도우 핸들러의 메모리 주소로 HWND 의 주소가 되겠다. 위 정보는 윈도우 미디어 플레이어를 가지고 테스트한 결과이다.
 
팁으로 가끔 GLUT로 생성한 창은 ClassName이 GLUT 이며 포커스 아웃되면 Ghost라는 Class 네임을 가진다. 그러므로
 
HWND g_window = NULL;
g_window = FindWindow("GLUT" , WindowName);
if( g_window == NULL ) g_window = FindWindow("Ghost" , WindowName);
 
이렇게 하면 핸들을 얻을 수 있다.

'Programming > MFC' 카테고리의 다른 글

System Error Codes  (0) 2006.09.05
하나의 프로그램만 실행시키고 싶다면..  (0) 2006.09.01
HyperLink Static  (0) 2006.08.26
File 삭제  (0) 2006.08.22
Bitmap 이미지 올리기  (0) 2006.08.19