300x250

내프로그램 으로 카카오톡 메시지를 보낼일이 있어 찾아보니 다음과 같은 코드가 있었다.

 

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindow")] 
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindowEx")] 
        public static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2); 

        [DllImport("user32.dll")] 
        public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, string lParam); 

        [DllImport("user32.dll")] 
        public static extern uint PostMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

 

        private void sendMsg(string msg) 
        { 
            IntPtr hd01 = kakaoFindWindow(null, "대화방제목"); 
            if (hd01 != IntPtr.Zero) 
            { 

                IntPtr hd03 = kakaoFindWindowEx(hd01, IntPtr.Zero, "RichEdit20W", ""); 

                SendMessage(hd03, 0x000c, 0, msg); 
                PostMessage(hd03, 0x0100, 0xD, 0x1C001); 
            } 
        }

 

이렇게 하면 전송은 되지만 문제가 하나 있었다.

 

처음에는 잘보내지는데 대화방을 최소화 했다가 다시 열면 전송이 이상하게 되는 것이다.

정확한 이유를 알아보기는 귀찮아서.. 꼼수를 썼다.

 

 

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindow")]
        private static extern IntPtr kakaoFindWindow(string lpClassName, string lpWindowName);

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindowEx")]
        public static extern IntPtr kakaoFindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2);

        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, string lParam);

        [DllImport("user32.dll")]
        public static extern uint PostMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

 

        private void sendMsg(string msg)
        {
            IntPtr hd01 = kakaoFindWindow(null, "대화방제목");
            if (hd01 != IntPtr.Zero)
            {

                IntPtr hd03 = kakaoFindWindowEx(hd01, IntPtr.Zero, "RichEdit20W", "");

                SendMessage(hd03, 0x000c, 0, msg);
                PostMessage(hd03, 0x0100, 0xD, 0x1C001);
                Thread.Sleep(100);
                PostMessage(hd03, 0x0100, 0xD, 0x1C001);
            }
        }

 

PostMessage(hd03, 0x0100, 0xD, 0x1C001);  // 이부분이 엔터 메시지 인거같다.

 

 

postmessage를 바로 쓰면 입력이 안되길래 sleep으로 딜레이를 살짝줬더니 잘된다.

 

잡담을 하자면 난 카카오톡메시지 보내는 프로그램만 만들거가 아니기 때문에 FindWindow를 여러번 사용해야 하는데 

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindow")] 
        private static extern IntPtr "변수명"(string lpClassName, string lpWindowName); 

빨간색 부분을 바꿔서 사용 가능한거 같다. 이런식으로 여러개의 findwindow를 사용할수 있을듯.

300x250