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

我想在另一个应用程序中从文本框中检索文本。 第二个应用程序的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()); } 

在6月份讨论了如何找到儿童控制的句柄 ,也许这有帮助。

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

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

您将在您发布的代码中获取主窗体的WindowHandle,根据MSDN,表单中的GETTEXT消息应返回其标题。 如果要从TextBox获取文本,则应将TextBox的WindowHandle作为第一个参数传递。

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