원하는 프로그램의 핸들 얻기 |
프로그램에서 특정 프로세스를 다루고자 할 때 핸들 정보를 알아야 한다.
핸들 정보를 알지 못하더라도 최소한 프로그램 Window Caption 명을 알아야한다.
FindWindow API 의 인자로 Window Caption 명을 넘기면 리턴값으로 핸들을 얻을수
있기 때문이다.
Visual Studio 에서는 이 정보를 쉽게 알수 있도록 Spy++ 유틸리티를 제공한다.
내가 사용하는 프로그램은 Visual Studio 2005 이다.
Visual Studio Tools 에 Spy++ 클릭한다Spy++ 실행 되었다면 현재 프로세스에 대한 정보리스트를 볼수 있다
리스트중에서 하나를 선택한후 오른쪽마우스 클릭후 Properties 선택한다
그러면 프로세스의 속성정보에 대해 나오는데 Window Caption, Window Handle,
창의 크기 등에 대한 정보를 볼수 있다이 정보를 바탕으로 프로세스를 제어 할수 있는데
FindWindow 함수로 핸들을 얻은후 GetWindowLong 로 HINSTANCE 얻는다.
m_hWnd = FindWindow(NULL, programName);
HINSTANCE hInst = (HINSTANCE)GetWindowLong(m_hWnd->m_hWnd, GWL_HINSTANCE);
인스턴스를 얻었으면 후킹을 위한 함수도 등록가능하다.
hHk = SetWindowsHookEx(WH_MOUSE, lpfnHook, hInst, 0);
lpfnHook 는 후킹을 위한 함수 포인트 이다. 이렇게 등록하게 되면
핸들을 얻는 프로그램에서 일어나는 윈도우 이벤트를 받을수 있다.
마우스 이벤트, 키보드 이벤트 등등을 알아 낼수 있는것이다.
이 이벤트라는 것이 어떤것인지 Spy++ 로 알아본다.
먼저 보고자하는 프로그램을 선택한후 Ctrl + M 이나 Log Messages 를 선택한다화면이 실행되었으면 Message 탭으로 가서 보고자 하는 Message 만 체크한다.
엄청난 수의 이벤트가 일어나므로 보고자하는 것만 1~2 개정도 선택하도록 한다확인을 누른후 선택한 프로그램을 활성화 시킨후 마우스나 키보드등을 작동시켜보다
그러면 그 정보에 대한 로그등을 볼수 있다. 이 로그를 분석하면 어떤 메시지일 때 무슨일이
일어나는지 쉽게 알수 있다'기타 언어 > C# & MFC' 카테고리의 다른 글
SendMessage() 마우스 조작을 하고 싶을 때 (0) | 2010.08.04 |
---|---|
섭씨 / 화씨 변경기능 (0) | 2010.08.04 |
Refactor 기능을 이용해 필드 자동소스 생성 (0) | 2010.08.02 |
C# Transaction 처리를 위한 예제 (1) | 2010.07.22 |
WebBrowser 컨트롤의 HTML 코드에서 DOM 객체처럼 특정 태그 내용을 추출 (4) | 2009.11.01 |
컴퓨터 종료 프로그램 (0) | 2009.09.22 |
TreeView 노드 Key 속성을 만드는 Visual C# 에서 방법 (0) | 2009.09.20 |
C# 프로그램에서 외부 브라우저로 사이트 이동시키기 (6) | 2009.09.18 |