Member 12038898 Ответов: 1

Отправьте клавишу клавиатуры в уже запущенное фоновое консольное приложение, которое я создал сам через C#


Простой сценарий, 1 кнопка заключается в создании консольного процесса с аргументами для запуска записи видео ffmpeg. Как мне установить кнопку 2, чтобы остановить процесс записи. Предполагается, что это делается путем отправки клавиши клавиатуры "q" в запущенный процесс. У меня есть он работает, когда окно консоли видно, однако, если окно скрыто, как я могу передать ключ к этому окну?

Что я уже пробовал:

private void button1_Click(object sender, EventArgs e)
       {

           // Desktop and Mic audio recording
           process = new System.Diagnostics.Process();
           startInfo = new System.Diagnostics.ProcessStartInfo();
           startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
           startInfo.FileName = "cmd.exe";
           startInfo.Arguments = "/C ffmpeg -f gdigrab -i desktop -f dshow -i audio=\"Microphone (2- Logitech USB Hea\" -vcodec libx264 D:\\trial\\DesktopMic.mp4 ";
           process.StartInfo = startInfo;


           process.Start();


            private void button2_Click(object sender, EventArgs e)
            {
             ??????????????????
            }

Richard MacCutchan

Вам нужно подключить поток к stdin консольного приложения. Затем вы можете отправить сообщение в приложение. Однако приложение должно будет прослушивать входные данные. Честно говоря, консольные приложения на самом деле не так хорошо работают в этом сценарии, приложение windows было бы лучше.

1 Ответов

Рейтинг:
9

CPallini

Как уже было предложено Ричард, вы должны подключить поток к перенаправленному стандартному входу консольного процесса. Взгляните на это ProcessStartInfo.RedirectStandardInput Свойство (System.Диагностика) | Microsoft Docs[^] (см. пример кода).


Member 12038898

Большое спасибо, чувак, это сработало!
используя streamwriter, я смог выйти из приложения, отправив ключ "q"!

CPallini

Добро пожаловать.