控制台应用程序可以对WPF应用程序使用Process.StandaardInput吗?

时间:2017-02-20 19:16:35

标签: c# wpf process

我想将数据从控制台exe(下面的代码)发送到WPF应用程序。测试wpf exe有3个输入文本框。但是以下代码,直接来自在线示例,并且看起来非常简单,并没有填写表单上的第一个文本框 - 它仍然是空白的。 WPF是否接受StandardInput?

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "C:\\temp\\testWPF.exe";
info.CreateNoWindow = false;   
info.WindowStyle = ProcessWindowStyle.Normal;
info.RedirectStandardInput = true;
//info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.UseShellExecute = false;

Process p = new Process();
p.StartInfo = info;
p.Start();

p.StandardInput.WriteLine("Hello World");
p.StandardInput.Flush();

1 个答案:

答案 0 :(得分:0)

  

WPF是否接受StandardInput?

不正常,不。也就是说,每个Windows进程实际上都可以支持标准的I / O流,但是GUI程序通常不会用它们做任何事情。他们将通过窗口消息接收输入。因此,除非您正在处理已明确为标准I / O流添加支持的奇数球WPF程序,否则使用Process.StandardInput将无法正常工作。您可以写入流,但没有人在听。

更有可能的是,您希望使用多个进程间自动化方案之一。最基本的方法是使用一种低级消息发送API,例如, System.Windows.Forms.SendKeys(我不会使用原生的SendMessage()功能......它太低级了,需要大量的摆弄才能正常工作,因为你需要直接在单个控制窗口句柄级别进行交互。)

更强大的机制是UI Automation。这可以通过System.Windows.Automation namespace

通过.NET获得