6

以前の質問で、メモ帳にテキストを送信する方法を尋ねました。とても助かりました。パート 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」をグーグルで検索して Web サイトで見つけた値です。

1.) 上記で何が間違っていますか?

2.) 参考までに、一般に、で使用するすべてのウィンドウ名を見つける簡単な方法はありFindWindowEx()ますか?

4

1 に答える 1

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");

変更されたウィンドウ クラス (edit ではなく richedit20A) に注意してください。Spy++ を使用して正しいクラスを見つけました。

ウィンドウ ハンドルに関しては、EnumWindowsまたはEnumChildWindows API を使用することが 1 つの可能性です。

于 2009-02-07T12:29:44.447 に答える