从另一个应用程序获取文本

时间:2009-12-09 11:50:37

标签: c# sendmessage

我想在另一个应用程序中从文本框中检索文本。第二个应用程序的ProcessName是'TestTextBox',TextBox的名称是'textBox1'。

我的代码,返回空字符串:

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, long wParam, [MarshalAs(UnmanagedType.LPStr)] StringBuilder lParam);

Process[] processes = Process.GetProcessesByName("TestTextBox");
foreach (Process p in processes)
{
    IntPtr pFoundWindow = p.MainWindowHandle;
    const int WM_GETTEXT = 0x0D;
    StringBuilder sb = new StringBuilder();
    IntPtr retVal = SendMessage(pFoundWindow, WM_GETTEXT, 100, sb);
    MessageBox.Show(sb.ToString());
}

4 个答案:

答案 0 :(得分:3)

什么是“另一个应用程序”?这是你写的东西吗?可以在另一台机器上运行吗?在另一个领域?在另一个用户帐户下?目标应用程序,表单或文本框是否会发生变化?您是否需要在应用程序之间进行异步(即非阻塞)通信?

如果对这些问题的答案为“是”,则应考虑使用.Net Remoting。这可以从.Net 2.0获得。

答案 1 :(得分:1)

你在你发布的代码中获得了主窗体的WindowHandle,根据MSDN,一个表格的GETTEXT消息应该返回它的标题。 如果你想从TextBox中获取文本,你应该将TextBox的WindowHandle作为第一个参数传递。

答案 2 :(得分:1)

6月份讨论了how to find the handle of a child control,也许这会有所帮助。

答案 3 :(得分:0)

您可以像其他人提到的那样使用Windows API,或者您可以使用像AutoIt这样的库,这可能会使任务变得更容易一些。不确定你的要求是什么。