如何从C#/ Win32中的mIRC聊天窗口中检索文本?

时间:2009-02-14 11:38:49

标签: c# winapi

这是我试图从mIRC聊天窗口中获取文本的简化版本:

[DllImport("user32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hwnd, int msg, int wParam, StringBuilder sb);

public const int WM_GETTEXT = 0x000D; 

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 staticHandle = FindWindowEx(chanHandle, new IntPtr(0), "Static", null);

int length = 50000;

StringBuilder sb = new StringBuilder(length + 1);
SendMessage(staticHandle, WM_GETTEXT, length + 1, sb);

textBox1.Text = sb.ToString();

然而,这并没有返回任何东西。它适用于其他窗口,而不是静态窗口。为什么?请不要对我如何从mIRC窗口读取文本提出任何建议?

3 个答案:

答案 0 :(得分:1)

您可以使用Windows DDE与mIRC进行通信。你可以阅读它here。我不确定这是否能让你获得文本。

答案 1 :(得分:0)

你确定静态真的包含文字和/或你有正确的静态吗?例如,如果它是静态显示图像,则不会得到文本(因为没有要获取的文本),SendMessage将返回0.请参见[here](http://msdn.microsoft.com/en-us/library/ms632627(VS.85).aspx)

答案 2 :(得分:0)

mIRC绘制聊天窗口本身的内容,这就是为什么WM_GETTEXT不起作用的原因。您可以编写代理服务器,然后更改mIRC设置以使用代理服务器。这样你就可以捕获mIRC和IRC服务器之间的整个通信。