2009-02-07 2 views
6

В предыдущем вопросе я спросил how to send text to Notepad. Это очень помогло мне. В части 2, вот упрощенная версия того же прикладной Mirc:Как написать и отправить текст в mIRC в C#/Win32?

[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)? Это значения, которые я нашел на веб-сайте с помощью googling «FindWindowEx mIRC».

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

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

ответ

4

Этот код работает для меня (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 ++.

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

 Смежные вопросы

  • Нет связанных вопросов^_^