2009-02-07 49 views
6

在上一個問題中,我問了how to send text to Notepad。它非常幫助我。對於第2部分,這裏的相同應用的mIRC的簡化版本:如何在C#/ Win32中編寫和發送文本到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)?這些是我在網站上通過Google搜索「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 ++找到正確的類。

至於窗口句柄,一種可能性是使用EnumWindowsEnumChildWindows API。