ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] 카카오 PC 대화창을 이용해 메세지 보내기
    취미생활/C# 2019. 12. 16. 07:41
    반응형

    안녕하세요

     

    코딩하는남자 코딩 연습생입니다!

     

    이번에 게시할 주제는 카카오PC 버전을 이용해서

     

    현재 활성화된 대화창을 찾아 자동으로 메세지를 보내는 방법을 구현해 봤습니다

     

    응용 부분은 사내 알림, 시스템 관리자 알림, 등 카카오톡을 활용해서 시스템 알림 기능을 만들기 위해 시도해 봤는데요

     

    결론은 실패 입니다ㅎㅎ

     

    카카오 챗봇에서 연속 메세지가 다중 발생하면 계정에 Block을 걸어 계정을 사용하지 못하게 정책이 잡혀 있더라구요

     

    아마 악성 이용을 방지 하지 위함인거 같습니다

     

    그래도 응용하면 나중에 다른 다른 어플리케이션을 제어할수도 있기에

     

    방법을 공유해볼께요

     

     

     

     

    [Source Code]

    using System.Runtime.InteropServices;

     

    윈도우에 실행 중인 창에 대한 핸들러를 사용하기 위한 DllImport 함수를 사용하기 위한 선언문

     

            [DllImport("user32.dll")]
            public static extern int FindWindow(string lpClassName, string lpWindowName);
            //FindWindow (최상위 창 핸들값 가져오는 API)
    
            [DllImport("user32.dll")]
            public static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
            //FindWindowEX (인자로 받아온 핸들의 자식의 핸들값 가져오는 API)
    
            [DllImport("user32.dll")]
            public static extern int SendMessage(int hwnd, int wMsg, int wParam, string lParam);
            //SendMessage
    
            [DllImport("user32.dll")]
            public static extern uint PostMessage(int hwnd, int wMsg, int wParam, int lParam);
            
            //윈도우를 포커스를 지정하여 최상위로 오도록 한다
            [DllImport("user32.dll")]
            private static extern bool SetForegroundWindow(int hWnd);
    
            //최소화된 윈도우를 활성화 시킴
            [DllImport("user32.dll")]
            private static extern bool ShowWindowAsync(int hWnd, int nCmdShow);

     

    DllImport를 사용해 다음과 같이 핸들러 추가

     

            // user create.
            string Title = string.Empty;
            string massage = string.Empty;
    
            const int WM_KEYDOWN = 0x100;
            const int WM_KEYUP = 0x101;
            const Int32 VK_RETURN = 0x0D;
            const int VK_ENTER = 0x0D;

     

    제목과 보낼 메세지를 담을 변수와 키보드 코드를 이미 지정합니다

     

            public void sendKatalk(string title, string msg)
            {
                int hd01 = FindWindow(null, title);
                int hd03 = FindWindowEx(hd01, 0, "RichEdit20W", "");
    
                //ShowWindowAsync(hd01, 1);
                SetForegroundWindow(hd01);
    
                //maessage send.
                SendMessage(hd03, 0x000c, 0, msg);
    
                //sleep Time 3sec.
                Thread.Sleep(3000);
    
                PostMessage(hd03, 0x0100, 0xD, 0x1C001);
    
                //sleep Time 3sec.
                Thread.Sleep(3000);
            }

     

    FindWindow를 통해 title의 이름을 가진 활성화 창을 찾습니다

     

    그 다음 SetForegroundWindow를 통해 title이름을 가진 창을 최상위로 활성화 시킵니다

     

    그 뒤에 SendMessage를 이용해서 hd03에서 RichEdit20W 부분 위치에 msg라는 값을 넣어줍니다

     

    마지막으로 PostMessage를 통해 RichEdit20W에 엔터 명령어를 보내주면 메세지 보내기 성공!!

     

    저는 Theread를 사용해서 사용자이름을 불러와 자동으로 대화창을 활성화 시키고 그 활성화 된

     

    대화창에 메세지를 생성하여 보내도록 구현햇습니다

     

    궁금하신 내용은 댓글을 통해 문의 주시면 아는 범위에서 답변 드리도록 하겠습니다

     

    감사합니다

    반응형
Designed by Tistory.