내프로그램 으로 카카오톡 메시지를 보낼일이 있어 찾아보니 다음과 같은 코드가 있었다.
[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를 사용할수 있을듯.
'[개인공부] > C#' 카테고리의 다른 글
[C#] ExcelToJson2.0 엑셀파일 Json파일로 바꾸기 (0) | 2023.04.08 |
---|---|
[C#] ExcelToJsonConvert 엑셀파일 Json파일로 바꾸기 (0) | 2023.02.18 |
[C#] Json 데이터 불러와서 활용하기 (0) | 2022.06.28 |
[C#] get, set 사용 (0) | 2019.04.11 |