2017-02-20 33 views
1

Я хочу отправить данные из консоли exe, код ниже, в приложение WPF. Тест wpf exe имеет 3 входных текстовых поля. Но следующий код, прямо из онлайн-примеров и который кажется очень простым, не заполняет первое текстовое поле формы - оно остается пустым. Принимает ли WPF стандартный вход?Может ли консольное приложение использовать Process.StandaardInput против приложения WPF?

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(); 
+0

_ «Принимает ли WPF стандартный вход?» _ - да, но StandardInput не выполняет то, что вы ожидаете от него. Пожалуйста, объясните, в чем проблема, которую вы пытаетесь решить, позволяя одной программе записывать элементы управления пользовательского интерфейса другой программы. – CodeCaster

+0

Итак, что вы делаете в приложении wpf для заполнения текстового поля со стандартного ввода? – Evk

+0

Что вы хотите - это не вход/выход в standad, а параметры выполнения, передача значений в качестве параметров в приложение, а затем их восстановление по главной функции, вам решать, как заполнить текстовые поля данными. – Gusman

ответ

0

ли принимать WPF StandardInput?

Не нормально, нет. То есть каждый процесс Windows может фактически поддерживать стандартные потоки ввода-вывода, но программы GUI обычно не содержат do что-нибудь с ними. Вместо этого они получат ввод через оконные сообщения. Поэтому, если вы не имеете дело с программой WPF с нечетным шаром, которая явно добавила поддержку для стандартных потоков ввода-вывода, использование Process.StandardInput не будет работать. Вы можете писать в поток, но никто не слушает.

Скорее всего, вы хотите использовать одну из нескольких схем автоматизации между процессами. Наиболее примитивным подходом было бы использование одного из низкоуровневых API-сообщений для отправки сообщений, например. System.Windows.Forms.SendKeys (я бы не использовал встроенную функцию SendMessage() & hellip, она слишком низкоуровневая и потребует много усилий, чтобы работать правильно, потому что вы взаимодействуете непосредственно на уровне управления отдельным окном управления).

Более надежный механизм будет UI Automation. Это доступно через .NET через System.Windows.Automation namespace.

+0

Спасибо. Это сделало это и удовлетворило мое желание учиться. Единственный трюк, в котором я нуждался, заключался в том, чтобы добавить небольшой сон, в то время как приложение wpf было SetForegroundWindow(), прежде чем делать SendKeys. В дальнейшем я буду читать UI Automation. – user610342