2009-02-07 4 views
6

In einer früheren Frage fragte ich how to send text to Notepad. Es hat mir enorm geholfen. Für Teil 2, hier ist eine vereinfachte Version des gleichen angelegten mIRC:Wie schreibe und sende ich Text zu mIRC in 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); 

Dies scheint mich richtig, mit der Ausnahme, dass es nicht funktioniert! Sind die Fensternamen falsch (MDIClient, mIRC_Channel und Edit)? Dies sind Werte, die ich auf einer Website gefunden habe, indem ich "FindWindowEx mIRC" gegoogelt habe.

1.) Was mache ich oben falsch?

2.) Als Referenz gibt es im Allgemeinen eine einfache Möglichkeit, alle Fensternamen zur Verwendung mit FindWindowEx() zu finden?

Antwort

4

Dieser Code funktioniert für mich (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"); 

Beachten Sie die geänderte Fensterklasse (RichEdit20A statt bearbeiten). Habe einfach die richtige Klasse mit Spy ++ gefunden.

Für die Fenstergriffe ist eine Möglichkeit, die EnumWindows oder EnumChildWindows API zu verwenden.