Как написать и отправить текст в mIRC в C # / Win32? - PullRequest
6 голосов
/ 07 февраля 2009

В предыдущем вопросе я спросил , как отправить текст в Блокнот . Это мне очень помогло. Для части 2, вот упрощенная версия того же приложения mIRC:

[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);

IntPtr mainHandle = FindWindow("mIRC", null);
IntPtr serverHandle = FindWindowEx(mainHandle, new IntPtr(0), "MDIClient", null);
IntPtr chanHandle = FindWindowEx(serverHandle, new IntPtr(0), "mIRC_Channel", null);
IntPtr editHandle = FindWindowEx(chanHandle, new IntPtr(0), "Edit", null);

SendMessage(editHandle, 0x000C, 0, textBox1.Text);

Мне кажется, это правильно, за исключением того, что это не работает! Неправильные ли имена окон (MDIClient, mIRC_Channel и Edit)? Это значения, которые я нашел на веб-сайте, прибегая к помощи «FindWindowEx mIRC».

1.) Что я делаю не так в вышеприведенном?

2.) Для справки, как правило, существует простой способ найти все имена окон для использования с FindWindowEx()?

1 Ответ

4 голосов
/ 07 февраля 2009

У меня этот код работает (mirc 6.31):

IntPtr mainHandle = FindWindow("mIRC", null);
IntPtr serverHandle = FindWindowEx(mainHandle, new IntPtr(0), "MDIClient", null);  
IntPtr chanHandle = FindWindowEx(serverHandle, new IntPtr(0), "mIRC_Channel", null);  
IntPtr editHandle = FindWindowEx(chanHandle, new IntPtr(0), "richEdit20A", null);
SendMessage(editHandle, 0x000C, 0, "Hello World");

Обратите внимание на измененный класс окна (richedit20A вместо редактирования). Просто нашел правильный класс с помощью Spy ++.

Что касается оконных дескрипторов, то одной из возможностей является использование EnumWindows или EnumChildWindows API.

...