인터넷 뒤지다가.. 카카오톡 도배기라는 녀석을 보게 되었습니다.


뭐 도배기라 해봤자 분명 VB나 C#에서는 SendKeys 를 사용할 것이고...

C/C++ , MFC 등에서는 keybd_event, SendInput, SendMessage(WM_KEYDOWN, WM_KEYUP) 등과 같은 API를 사용하겠죠

(물론, VB나 C#에서도 이런 API 사용이 가능합니다)


그래서 "나도 한번 만들어보자!" 라는 생각을 가지고 개발에 착수했습니다.


대부분의 도배기 형식의 프로그램의 틀은 정말 간단합니다.

  1. FindWindow/FindWindowEx 를 사용해서 도배할 프로그램(대부분 메신저)을 찾아낸다.
  2. 유효한 윈도우 핸들이라면 FindWindowEx 를 다시한번 호출해서 텍스트박스 컨트롤(Edit 또는 RichEdit 등등)을 찾아낸다.
  3. 찾아낸 텍스트박스 컨트롤이 유효하다면? SendMessage/WM_SETTEXT 를 이용해서 텍스트를 설정한다.
    (이 부분은 SendKeys 등과 같은 메서드로 ... 노가다를 통해서도 구현할 수 있습니다만.... 뭐.. 개인 취향입니다)
  4. 엔터(VK_RETURN, 0x0D, 13)를 KEYDOWN/KEYUP 메세지를 보내준다. (이렇게 하면 키가 눌린거처럼 인식을 합니다)

그래서 저도 카카오톡 대상으로 할꺼니깐 무작정 들이대진 않고 Spy++ 를 이용해서 살펴봤는데!!! 자식이 너무 많아요.




KakaoTalkEdgeWnd부터 시작해서. EVA_Window까지!

공용 컨트롤(Edit, Button, ListControl 등)이면 정말 쉽겠지만 쉽게 보내주질 않는군요.

몇 개를 제외하고는 모두 자체개발한 컨트롤이기 때문에 SendMessage 도 잘 먹지도 않고 메세지를 못 읽겠더라구요.

메세지 보려고 Spy++로 잡았더니 메세지를 하나도 못받네요.


우선, 카카오톡에 관련된 클래스들을 설명해드릴께요.

(더 자세히 보려면 스레드를 확인하는게 가장 좋겠죠?)



메인 스레드를 보면.. 더 많아요 ㅋㅋㅋ

약간 흐리게 아이콘이 나타나 있는 것은 숨겨진(HIDE) 상태를 의미합니다.. 또는 안보이거나요.?



  • Edit
        이건 말 그대로 편집 컨트롤입니다.
        각각 친구 목록과 채팅방 목록에 있는 검색 부분 있죠? 거기에 사용되는 컨트롤입니다.
  • EVA_VH_ListControl
        사용자 목록(내 프로필, 즐겨찾기, 전체 친구), 채팅방 목록, 환경 설정 메뉴 목록 등에 걸쳐서 전역적으로 사용되는 중요한 컨트롤입니다.
        이 컨트롤 소스만 빼서 쓰고싶은데 ㅠㅠ
  • _EVA_CustomScrollCtrl
        이건 리스트 옆쪽에 있는 스크롤 바 컨트롤입니다. 얘는 별거 없어요.
  • RichEdit20W
        위 목록에는 안보이지만, 채팅방 내의 텍스트박스(메세지 보낼 때 쓰이죠)입니다.
        요놈이 또 중요합니다. EVA_VH_ListControl 클래스는 "카카오톡" 에서 중요하게 쓰인다는거예요. 도배기를 만드는데는 전혀 필요 없습니다.
  • EVA_Window
        이녀석은 "광고" 를 표시해주는 배너 컨트롤입니다.
        ShowWindow 를 사용해서 숨겨주면 광고가 없어져요. ㅋㅋㅋㅋㅋㅋㅋ
  • EVA_Window_Dblclk
        카카오톡 내부의 메세지박스입니다.


관련 클래스는 이정도가 있구요.. 우선 본론에 들어가기에 앞서(솔직히 본론이라 할 것도 없지만..) 채팅방의 구조를 살펴보도록 하겠습니다.


채팅방 하나에 총 4개의 클래스가 있습니다.

우선 채팅창 자체 윈도우인 #32770 (다이얼로그).

그리고 EVA_VH_ListControl 클래스와 해당 윈도우 안에 또 있는 _EVA_CustomScrollCtrl 이 있구요.

마지막으로 대화 내용을 입력하는 RichEdit20W 클래스가 있습니다.


이제 위의 구조를 기반으로 해서 카카오톡이 켜져있는지, 채팅방 목록을 가져오는 것과 대화 내용 입력칸에 텍스트를 입력하고 전송하는 것까지!

어떻게 하는지는 다음 2부에서 배워보도록 합시다.


+ Recent posts