我想在另一个应用程序中从文本框中检索文本。第二个应用程序的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());
}
答案 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这样的库,这可能会使任务变得更容易一些。不确定你的要求是什么。