C# 以编程方式将文本粘贴到另一个应用程序的文本框中

C# 以编程方式将文本粘贴到另一个应用程序的文本框中,c#,wpf,C#,Wpf,我希望能够将结果从我的应用程序粘贴到另一个应用程序。我一直在谷歌上搜索,我能找到的只有那本书。这将粘贴到我的应用程序中,而不是另一个应用程序 背景:我的应用程序需要与非常旧的应用程序交互。此应用程序尚未开发,没有任何API调用。也就是说,“通过DLL链接你的应用程序”这样的答案只有在它还包含一个时间机器时才被排除在外:P所以解决方案是简单地将结果从我的应用程序粘贴到旧的应用程序上 出于工作流原因,客户端希望我的应用程序消失,并自动将结果粘贴到中打开的文本框中(如果失败,则手动将结果粘贴到中) 隐

我希望能够将结果从我的应用程序粘贴到另一个应用程序。我一直在谷歌上搜索,我能找到的只有那本书。这将粘贴到我的应用程序中,而不是另一个应用程序

背景:我的应用程序需要与非常旧的应用程序交互。此应用程序尚未开发,没有任何API调用。也就是说,“通过DLL链接你的应用程序”这样的答案只有在它还包含一个时间机器时才被排除在外:P所以解决方案是简单地将结果从我的应用程序粘贴到旧的应用程序上

出于工作流原因,客户端希望我的应用程序消失,并自动将结果粘贴到中打开的文本框中(如果失败,则手动将结果粘贴到中)


隐藏窗口很简单,但如何找到当前活动的应用程序,然后将其粘贴进去?这可能吗?另请注意,此应用程序不是
而不是.NET(如果我没有错,请使用VB 6)。

您可以打开其他应用程序并发送一个组合键。。。比如:

[DllImport ("User32.dll")]
static extern int SetForegroundWindow(IntPtr hwnd);

public static void PasteToApplication(string appName)
{
  var proc = Process.GetProcessesByName(appName).FirstOrDefault();
  if(proc != null)
  {
    var handle = proc.MainWindowHandle;
    SetForegroundWindow(handle);
    SendKeys.SendWait("^v");
  }
}

这将打开其他应用程序的窗口并发送ctrl-v命令。通过一些实验,您可以找到要将粘贴发送到的控件的确切句柄,并将焦点设置在该控件上

您正在寻找的是“复制”而不是“粘贴”来获取应用程序中的数据。当您在中打开的文本框中说“…如果失败…”时,“中”后面是否缺少一个单词?另一个应用程序是否是您无法修改的现有应用程序?您可以获得文本窗口的句柄并使用WM_SETTEXT。@roryap我想从我的应用程序复制并粘贴到另一个应用程序中。因此,我想进行“粘贴”命令他人app@EdPlunkett这是正确的,我无法修改,它也不会被修改。这看起来像我想要的,两个问题:SendKeys来自System.Windows.Forms,我的应用程序是WPF,所以我没有访问权限。WPF命令是什么?我如何在Windows中找到appName,或者我必须硬编码它?@Xaphan您可以包括windows.forms引用在您的项目中,
SendKeys
应该在没有应用程序域的情况下工作(它只是针对windows API的一个简单包装器)。
appName
应该是要粘贴的应用程序的名称,如任务管理器所示(通常,应用程序的名称不包括
.exe
).
getProcessByName
返回一个进程数组:如果你的应用程序的名称是通用的,那么你必须找出如何找到它(通过进程可执行路径或其他方式)。此外,这只会在其他应用程序中打开主窗口:如果您希望粘贴到辅助窗体或其他内容,则可能不会出现这种情况……但我们没有足够的有关其他应用程序的信息来给出明确的答案:前提是:找到要显示的窗口的句柄(或者找到精确控件的手柄,并使用Windows API将其设置为活动状态),然后发送control-v组合键。我刚刚演示了一种方法,但您的里程数可能会因应用程序的特殊性而有所不同。您将在回答我问题的笔记本上粘贴数据!