카카오톡 이미지 전송할때 클립보드 이미지 전송하기 창에 엔터키를 어느 프로세스로 보내야 될까요?

VBA
작성자
파랭이
작성일
2021-08-16 18:15
조회
480
엑셀버전 : 엑셀2019

운영체제 : 윈도우10

안녕하세요.

예전부터 오빠두 엑셀님의 유투브 즐겨 보고 많은 도움 받고 있습니다.

 

카카오톡 자동화 기능은 저도 예전부터 만들어서 사용하고 있었는데,

사진 전송을 할 때

클립보드 이미지 전송하기 화면이 떳을때

엔터키를 어느 프로세스로 보내야 동작할까요?

 

저는 그냥 keybd_event로 Enter 키를 입력하였는데

이 경우 화면이 비활성화 되어 있는 경우는 먹지 않아서 아쉬운 경우가 있어서

 

오빠두 엑셀 님은 해당 프로세스를 찾아서 PostMessage로 보내는 방식으로

구현하셨다면, 알려주시면 감사드리겠습니다.  ^^;

 

클립보드 이미지 전송 화면은 포커스를 빼버리면 자동으로 사라져서

프로세스 찾는 툴로도 찾기가 쉽지 않네요. ㅠ.ㅠ

회원등급 : 잎새등급
포인트 : 77 EP
총질문 : 1 개 (마감율 : 100%)
채택답변 : 0 개
전체 22

  • 2021-08-16 19:19

    해결이 되실지 모르겠지만.. Spy ++ 로 뷰를 확인해보세요~~!

    Spy++ 프로그램에 대하여~ : 네이버 블로그 (naver.com)

    링크에보니 영상도 있어서 쉽게 따라하실 수 있을 것 같습니다

    아래 창 클래스도 같이 살펴보시면 좋을 것 같습니다

    https://docs.microsoft.com/ko-kr/windows/win32/winmsg/about-window-classes


    • 2021-08-16 23:57

      @더블유에이 님 도움 주셔서 감사합니다. Spy++는 이미 사용중인데....
      아직 실력이 부족해서인지 확인이 힘드네요... ㅠ

      제가 확인하고 싶은 "클립보드 이미지 전송" 확인 창이 포커스를 잃으면 자동으로 닫혀버려서 SPY++ 로 확인하려 하면 자동으로 닫혀 버리네요. ㅠ


  • 2021-08-16 22:24

    Windows API를 하실 수 있다면,

    ' 채팅방 입력 콘트를 핸들 찾기
    hwnd_RichEdit = FindWindowEx(hWndChat, 0, "RichEdit50W", vbNullString)
    
    If hwnd_RichEdit = 0 Then hwnd_RichEdit = FindWindowEx(hWndChat, 0, "RichEdit20W", vbNullString)

     


    • 2021-08-17 00:03

      @dra**** 님 조언해주셔서 감사합니다.

      안타깝게도...  제가 찾던 클립보드 이미지 전송하기 창은

      RichEdit50W이 아닌 아마도 새로운 창인 듯 합니다.  RichEdit50W 으로 Key를 보내면 수행을 하지 않고 창이 닫혀 버리네요.

      클립보드 이미지 전송하기 창이 Focus를 잃으면 자동으로 닫히도록 구현되어 있어서 그런 듯 합니다.


      • 2021-08-17 00:04

        @파랭이 님 그렇군요.

        제가 구현한 카톡에서는 잘 보내어 지는데. 뭔가 로직이 다른가 봅니다. ㅠㅠ

        mouse event으로 카톡 좌표 찍어서 하는 방법도 수월하게 할 수 있습니다.


        • 2021-08-17 00:16

          @dra**** 님 빠른 피드백 주셔서 감사합니다.

          직접 구현해 보셨다면,

          혹시 클립보드 이미지 전송하기 창이 떳을때 아래와 같이 전송하셨나요?

          hwnd_RichEdit = FindWindowEx(hwnd_KakaoTalk, 0, "RichEdit50W", vbNullString)
          If hwnd_RichEdit = 0 Then hwnd_RichEdit = FindWindowEx(hwnd_KakaoTalk, 0, "RichEdit20W", vbNullString)

          Call PostMessage(hwnd_RichEdit, WM_KEYDOWN, VK_RETURN, 0)

           

          백그라운드로 매일 100여개 업체에 업체별 EXCEL 정보를 보내야 되는 일이 있어

          2년 전부터 VBA로 잘 써먹고 있는데 백그라운드로로도 동작되게 하려고 수정 중인데, 99% 완성되어 있고

          위부분만 해결되면 되는데... 너무 답답하네요.ㅠ


          • 2021-08-17 00:22

            @파랭이 님 콘트를 키를 누른 상태를 주고 붙여 넣기를 해야 합니다.

            keybd_event VK_CONTROL, 0, 0, 0

            아래 코드는 붙여 넣기 입니다.

            Call PostMessage(hwnd_RichEdit, WM_KEYDOWN, VK_V, 0)


            • 2021-08-17 00:28

              @dra**** 님 CTRL+V 붙여 넣기까지는 완료 되었구요.

              클립보드 이미지 전송하기 창이 떴을때 Enter키를 눌러서

              전송하기 하는 단계 입니다.


              • 2021-08-17 00:30

                @파랭이 님 그 다음은

                wnd_RichEdit 아니가 핸들러가 전송하기 창으로 바뀌었으니 hWnd_Child한테 보내라 하는 단계입니다.

                Call PostMessage(hWnd_Child, WM_KEYDOWN, VK_RETURN, 0)

                 


                • 2021-08-17 00:33

                  @dra**** 님 앗 왠지 답에 다가가고 있는듯 합니다.  ㅠ.ㅠ

                  hWnd_Child  요거를 어떻게 구하셨나용~?


                  • 2021-08-17 00:36

                    @파랭이 님 hWndChat = FindWindow(vbNullString, KakaoID)
                    hWnd_Child = FindHwndClipBoard(hWndChat)

                    오빠두 카톡 보내기 강좌를 한 번 보심이 어떨끼요?
                    소스도 다 공개 되어 있는데...

                    저는 저만의 카톡 클래스를 만들어 사용하고 있는데, 공개를 하면 오빠두님한테 죄를 짓는 것 같아 못하고 있습니다.

                     


                    • 2021-08-17 00:41

                      @dra**** 님 계속해서 도움주셔서 너무너무 감사합니다. ㅠ.ㅠ

                      FindHwndClipBoard 이게...  VBA에서 제공하는 함수 인가요?  구글에서 검색해도 아무것도 안나오는데.. ㅠㅠ

                      혹시 직접 구현하신 함수면 내부 구현에 대해 조금만 더 코드를 알려주시면 감사드리겠습니다.

                      안타깝게도 강좌에는 텍스트 전송에 대한 부분은 있는데 이미지 전송에 관련된 내용은 안보이네요. 공유하신 서식에도 코드를 안보이게 해 놓으셔서.. ㅠ.ㅠ
                       


                      • 2021-08-17 00:45
                        채택된 답변

                        @파랭이 님 Private Function FindHwndClipBoard(hWndChat As Long) As Long

                        Dim hwnd As Long: Dim hWndChild As Long: Dim hWndOwner As Long
                        Dim lngT As Long: Dim strT As String
                        Const GW_OWNER = 4

                        ' 실행중인 윈도우의 모든 창을 돌아가며
                        hwnd = FindWindowEx(0, 0, vbNullString, vbNullString)

                        While hwnd <> 0

                        strT = String(100, Chr(0))
                        lngT = GetClassName(hwnd, strT, 100)
                        ' GetWindow (hWnd, 4) : Owner Window 반환
                        If InStr(1, Left(strT, lngT), "32770") > 0 Then
                        'hWndChild = FindWindowEx(hwnd, 0, vbNullString, vbNullString)
                        hWndOwner = GetWindow(hwnd, GW_OWNER)
                        If hWndChat = hWndOwner Then FindHwndClipBoard = hwnd: Exit Function
                        End If


                        • 2021-08-17 00:48

                          @dra**** 님 아 너무너무 감사합니다.

                          주신 코드 잘 참고해서 구현해보도록 하겠습니다.

                           


                          • 2021-08-17 00:53

                            @파랭이 님 고생하셔요... 제가 내일 파랭이님을 위해서 공요할 계획이 없었던 Windows API reference 공유하겠습니다.

                             


                            • 2021-11-17 18:35

                              @dra**** 님 안녕하세요.

                              dra**** 님..

                              제가 작성해주신 코드를 붙여넣고 돌리면 자꾸멈추더라고요 ㅜㅜ 혹시 왜그런걸까요..?


                              • 2021-11-18 01:23

                                @김수진 님 Private Function FindHwndClipBoard(hWndChat As Long) As Long

                                위의 코드는 중간 과정이에요. 매겨 변수 hWndChat를 먼저 찾아 와서 넘겨 주어야 합니다. 글로 설명하기는 너무 어렵습니다.

                                오빠두님의 카톡 강좌에 있는 내용이니 강좌나 전체 소스 코드를 한 번 참조 해 보심이 어떨까요?

                                 


                                • 2021-11-18 14:51

                                  @dra**** 님 안녕하세요. 답변 달아주신 점 감사드립니다.

                                  오빠두님의 강좌는 다 보았습니다 !

                                  Private Function FindHwndClipBoard(hWndChat As Long) As Long

                                  는 Findhwndclipboard 라는 이름의 함수를 설정해 준것으로 이해하고있습니다.

                                  그런데 hwndchat 을넣으면 자꾸멈춰서요 ㅠㅠ

                                  hwndchat 은 채팅입력창 hwnd 값이 아니라 채팅창의 핸들값을 넣어야 하나요??


                                  • 2021-11-18 14:55

                                    @김수진 님 Function SendKakao(target As String, Message As String, Optional ChatRoomSearch As Boolean = False, Optional iDelay As Long = 1) As Boolean

                                    ' 변수 선언
                                    Dim hwnd_RichEdit As Long ' 채팅입력창 hwnd

                                    ' 친구 채팅입력창 hwnd 찾기
                                    hwnd_RichEdit = FindRecepientHwnd(target, ChatRoomSearch, iDelay)
                                    '▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶

                                    '보낼 대상의 채팅창 없을 경우 안내메세지 출력 후 종료
                                    If hwnd_RichEdit = 0 Then MsgBox "보낼 대상의 카카오톡 대화창을 찾을 수 없습니다.": Exit Function

                                    ' 메세지 보내기
                                    Send_TextMsg Message, hwnd_RichEdit

                                    End Function

                                    Sub Send_TextMsg(Message As String, hwnd_RichEdit As Long)
                                    Dim hwnd_RichEdit, hwnd_child As Long

                                    ' 대화상대 채팅 입력창 hWnd 에 메세지 입력
                                    keybd_event VK_CONTROL, 0, 0, 0
                                    Call PostMessage(hwnd_RichEdit, WM_KEYDOWN, VK_V, 0)

                                    Application.Wait (Now + TimeValue("0:00:03"))

                                     

                                    hwnd_child = FindHwndClipBoard(hwnd_RichEdit)

                                    Call PostMessage(hwnd_child, WM_KEYDOWN, VK_RETURN, 0)

                                    이렇게 넣었는데요.. hwnd_child를 못찾는것같아서요 ㅠㅠ


                                • 2021-11-18 15:03

                                  @dra**** 님 dra*** 님... 송구하지만

                                  저의 무지를 부디 한번 일깨워 주십사 부탁드립니다 ㅠㅠㅠㅠㅠㅠ

                                  혹시 댓글이 너무 불편하시다면 카톡 bver2877 로 설명해주시면 감사드리겠습니다 ㅠㅠ


                                  • 2021-11-19 20:47

                                    @김수진 님 위 코드는 오빠두님의 코드 입니다.

                                    오빠두님이 락을 걸어 놓았을 때는 공개 되기를 원치 않으셨기 때문이라 생각합니다.

                                    그래서 제가 함부로 공개를 못합니다. 죄송합니다.


                            • 2021-08-17 02:19

                              @dra**** 님 보내주신 코드 참조해서 몇일동안 끙끙대던 부분을 해결했습니다.

                              처음에 보내주신 코드 보고 전체 창을 뒤져서 OWNER를 비교해가는 방식으로 찾아야 되서 다소 비효율적인가 싶어서 간소화 시키려고  GetWindow(hwnd_KakaoTalk, GW_CHILD) 를 이용해서 구현해 봤는데 , 이건 안되네요. ㅠ.ㅠ 역시 Windows API는 알다가도 모르겠습니다.

                              알려주지 않으셨으면 한참을 더 낑낑대다가 포기했을거 같네요. ^^;


전체 5,225
번호 카테고리 제목 작성자 작성일 추천 조회
알림
하루 딱 "1분", 진짜 쓰는 엑셀 꿀팁 👉 "오빠두엑셀" 인스타그램 오픈! (32)
트로피 오빠두엑셀 | 2021.10.12 | 추천 23 | 조회 826
트로피 오빠두엑셀 2021.10.12 23 826
공지사항 공지사항
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (23)
오빠두엑셀 | 2021.10.28 | 추천 33 | 조회 2504
트로피 오빠두엑셀 2021.10.28 33 2504
26468 함수/공식
New 똑같은 수식으로 텍스트의 바이트수를 계산하는데 다르게 나옵니다.ㅠ 첨부파일
turtle**** | 2022.01.26 | 추천 0 | 조회 16
turtle**** 2022.01.26 0 16
26466 VBA
New 재고관리 filtered_db 함수 사용관련 질문입니다. (db가 empty인 경우 사용법)
탄만두 | 2022.01.26 | 추천 0 | 조회 16
탄만두 2022.01.26 0 16
26462 VBA
New VBA오빠두님의 Listfiles함수 중에 (1)
H.B | 2022.01.26 | 추천 1 | 조회 20
H.B 2022.01.26 1 20
26460 VBA
New vba 일치하는 값 찾기 질문 드립니다. 첨부파일 (1)
qkrwo**** | 2022.01.26 | 추천 0 | 조회 21
qkrwo**** 2022.01.26 0 21
26454 VBA
New Excel VBA _ Select 하지않고 바로 작업하는 방법 (2) 답변완료
백일호 | 2022.01.26 | 추천 1 | 조회 33
백일호 2022.01.26 1 33
26444 VBA
New 네이버 웹페이지 특정 정보 가져오기 질문
엑셀초보(LV.1) | 2022.01.26 | 추천 0 | 조회 16
엑셀초보(LV.1) 2022.01.26 0 16
26441 VBA
New vba 코딩으로 다른 시트 데이터 가져오기 질문입니다. 첨부파일 (2) 답변완료
qkrwo**** | 2022.01.26 | 추천 0 | 조회 34
qkrwo**** 2022.01.26 0 34
26440 피벗테이블
New 3개의 피벗테이블 필터 값을 동시에 변경하는 방법이 알고 싶어요 첨부파일
forest choi | 2022.01.26 | 추천 0 | 조회 24
forest choi 2022.01.26 0 24
26439 VBA
New VBA 네이버 부동산 크롤링 질문 (1)
엑셀초보(LV.1) | 2022.01.26 | 추천 0 | 조회 23
엑셀초보(LV.1) 2022.01.26 0 23
26421 문서서식
New 엑셀과 워드 메일머지 강의에는 예제파일이 없나요?
pcs**** | 2022.01.26 | 추천 0 | 조회 25
pcs**** 2022.01.26 0 25
26420 함수/공식
New 회원자료실 커스텀 일정표에서 조건추가하여 사용하고싶은데 질문있습니다 !
창동명 | 2022.01.26 | 추천 0 | 조회 28
창동명 2022.01.26 0 28
26410 피벗테이블
New 피벗 테이블에서 취소선을 표현하는 방법 첨부파일 (1)
퉁퉁이 | 2022.01.25 | 추천 0 | 조회 44
퉁퉁이 2022.01.25 0 44
26408 기능/도구
New 표에서 바로만든 슬라이서도 보고서연결 기능과 비슷하게 만들 수 있나요? (2)
차가운열매 | 2022.01.25 | 추천 0 | 조회 36
차가운열매 2022.01.25 0 36
26405 함수/공식
New 최고점/최저점 찾아내기 첨부파일 (9) 답변완료
km**** | 2022.01.25 | 추천 0 | 조회 55
km**** 2022.01.25 0 55
26403 VBA
New VBA를 이용하여 euc-kr로 인코딩된 site 크롤링 방법
콩순이 | 2022.01.25 | 추천 0 | 조회 26
콩순이 2022.01.25 0 26
26401 VBA
New 목표값 계산 자동 매크로 방법 첨부파일 (1)
박우성 | 2022.01.25 | 추천 0 | 조회 39
박우성 2022.01.25 0 39
26399 피벗테이블
New 데이터 새로고침 시 피벗테이블 연결 오류 첨부파일 (1)
유정 | 2022.01.25 | 추천 0 | 조회 25
유정 2022.01.25 0 25
26392 함수/공식
New MINIFS 함수 사용시 0으로 값 반환됨 (초보자에게 도움 부탁드립니다...ㅜㅜ) 첨부파일 (3) 답변완료
김원석 | 2022.01.25 | 추천 0 | 조회 36
김원석 2022.01.25 0 36
26387 VBA
New VBA 엑셀에서 다른 프로그램 실행하기 (2) 답변완료
병욱 | 2022.01.25 | 추천 0 | 조회 37
병욱 2022.01.25 0 37
26378 피벗테이블
New 피벗테이블 집계 오류 (5) 답변완료
가을남자 | 2022.01.25 | 추천 0 | 조회 44
가을남자 2022.01.25 0 44
26371 VBA
New VBA 항목별 행렬전환 문의 첨부파일 (6) 답변완료
H.B | 2022.01.25 | 추천 1 | 조회 45
H.B 2022.01.25 1 45
26368 문서서식
New 셀에 입력시 자음 모음 분리문제 (1)
흑형 | 2022.01.25 | 추천 0 | 조회 29
흑형 2022.01.25 0 29
26366 VBA
New ■ 셀에 삽입된 메모 수량 카운팅하는 방법 첨부파일 (5) 답변완료
비스타 | 2022.01.25 | 추천 1 | 조회 54
비스타 2022.01.25 1 54
26360 함수/공식
New 엑셀 데이터통합 기능 이용시 합계가 달라지는 이유 첨부파일 (5)
wlfl**** | 2022.01.25 | 추천 0 | 조회 50
wlfl**** 2022.01.25 0 50
26343 함수/공식
New 전산입고품목과 실제입고품목의 실재고조사관련 양식(함수+피벗테이블)첨언좀 부탁드립니다.도와주세요! 첨부파일 (4) 답변완료
sunjong**** | 2022.01.24 | 추천 0 | 조회 72
sunjong**** 2022.01.24 0 72
26341 VBA
New VBA 내 배열 통합(쿼리 통합 기능을 VBA에서 구현하고자 합니다.) 첨부파일 (1)
병욱 | 2022.01.24 | 추천 0 | 조회 38
병욱 2022.01.24 0 38
26339 VBA
New 많은 텍스트상자안 문자 찾기 (4)
noeu**** | 2022.01.24 | 추천 -1 | 조회 53
noeu**** 2022.01.24 -1 53
26338 함수/공식
New 지정한 일수(days)를 달력에 자동으로 표시 되게끔 설정이 가능한가요? 첨부파일 (3) 답변완료
말창 | 2022.01.24 | 추천 0 | 조회 57
말창 2022.01.24 0 57
함수/공식
New Re:지정한 일수(days)를 달력에 자동으로 표시 되게끔 설정이 가능한가요? (1)
Lucas's | 2022.01.24 | 추천 0 | 조회 35
Lucas's 2022.01.24 0 35
26336 함수/공식
New 셀안 동일 회사명을 순차 카운트를 하고 싶습니다. (3) 답변완료
sickp**** | 2022.01.24 | 추천 0 | 조회 32
sickp**** 2022.01.24 0 32
26334 함수/공식
New 이름만 치면 열 다 띄워주는 방법을 알려주세요 첨부파일 (8) 답변완료
아마테라스 | 2022.01.24 | 추천 0 | 조회 61
아마테라스 2022.01.24 0 61