블로그 이미지
devtang
Instagram : @taebr0 devtaehyeong@gmail.com

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2021. 3. 26. 15:11 개인 프로젝트

youtu.be/llFMVTj1pzg

실행영상

안녕하세요.

이번 프로젝트에서는 활성화 되어있는 카카오톡 채팅방에 원하는 메세지를 보낼 수 있는 프로그램을 제작하였습니다.

대화상자 기반 프로젝트를 전에도 몇번 진행해보면서 완벽하고 잘하진 않지만 사용할만한 프로그램 제작을 생각하다

카카오톡 전송 프로그램을 생각해보았습니다.

 

보통 대학교나 회사에서 단체로 공지를 보내야할 때 일일히 대화방에 복사+붙여넣기가 귀찮은 경우를 많이 보았기 때문에 만들어보게 되었습니다.

 

카카오톡에 메세지나 파일을 보내기 위해서는

카카오톡의 프로세스에 접근해서 키보드를 후킹하는 방식으로 진행하였습니다.

 

Visual Studio 에서는 Spy++라는 프로그램을 통해 현재 개인 컴퓨터내에서 작동하는 프로세스, 스레드 등을 확인 할 수 있습니다.

 

Spy++ 프로그램을 통해 카카오톡의 프로세스는 다음과 같습니다.

프로세스의 클래스ID, 캡션을 확인하여 카카오톡이 실행중인지 확인하는 함수에서 이용할 수 있습니다.

다음은 함수 코드중 일부입니다. FindWindow , FindWindowEx 함수를 통해서 카카오톡의 정상 구동을 확인하였습니다.

 

문자를 보내기 위해서는 카카오톡 대화상자의 프로세스를 확인해야합니다.

위의 사진과 같이 빨간색 테두리가 대화방의 부모클래스이며

노란색(RICHEDIT50W) 와 초록색Edit가 자식 클래스입니다.

 

카카오톡 메세지를 보내기 위해서는 프로세스에서 활성화 되어있는 대화방을 모두 찾고

각 대화방의 Edit Control 클래스에 보낼 메세지를 입력하는 방식으로 진행하여야 합니다.

 

카카오톡 대화방에 메세지를 전송하는 함수입니다.

대화방의 클래스 이름은 #32770이며 찾아낸 카톡방에 SendMessage , PostMessage를 이용하여

원하는 메세지를 입력시킨후 VK_RETURN이라는 가상 키보드 입력 이벤트를 작동시켜 전송하게 되는것입니다.

사용자가 메세지를 입력하고 엔터키를 입력하는 과정을 컴퓨터 프로세스를 통해 자동으로 동작하게 만들었습니다.

파일첨부기능역시 이를 약간 응용하면 됩니다.

카카오톡 대화방에서 Ctrl + T를 입력하면 파일 탐색기가 실행이되며 파일을 선택하여 첨부할 수 있습니다.

이때 위의 탐색기 창에서 파일 이름란에 파일의 경로를 입력하고 엔터를 누르면 첨부가 되는것을 확인하였습니다.

 

따라서 결론적으로 파일 전송을 위해서는

1. 대화방 프로세스에 접근한다.

2. Ctrl + T 키를 가상 키보드 이벤트 처리하여 입력한다.

3. 파일 탐색기 창의 Edit Control에 정해진 파일의 경로를 입력한다.

4. 가상 키보드 이벤트 처리를 통해 엔터키를 입력한다.

 

아래는 파일 첨부했을 때 전송 하는 함수입니다.

처음에는 메세지 전송함수와 비슷하게 카톡 대화방의 프로세스를 찾아냅니다.

이후에 Ctrl + T를 입력하는 가상 키보드 이벤트를 진행한 후에

열린 탐색기 창의 프로세스를 FindWindow 를 통해 탐색기의 Edit Control을 찾아낸 후 경로를 입력해줍니다.

이때 Sleep을 사용하지 않으면 탐색기가 마저 열리기도 전에 아래 코드가 실행되기 때문에 오작동되는 경우가

발생하여 사용하였습니다.

 

추가적으로 INFO 버튼을 클릭하면 저의 인스타그램과 티스토리에 접속할 수 있도록 하이퍼링크를 연결해보았습니다.

만들면서 귀찮고 어렵다고 생각하기 보단 모르던 기능들을 하나하나씩 찾아서 꾸며내는 재미로 만들었던 것 같습니다.

 

이번 프로젝트에서는 아쉽지만 카톡 대화방이 열려있어야하며, 특정 상대에게만 보내는 등의 기능을 구현하지 않았습니다.

 

다음에도 기회가 된다면 여기에 조금더 추가해서 다양한 기능을 만들어보았으면 좋겠습니다.

 

posted by devtang