Member 12681347 Ответов: 1

Как я могу отправить ввод с клавиатуры из unity (C#) в файл .exe?


Всем привет.

У меня есть базовый exe-файл, который требует нажатия буквенной клавиши, а затем клавиши возврата для ввода этого выбора. Я пытаюсь управлять этим входом с помощью игры, которую я построил в Unity, в частности, с помощью функций, которые я вызываю нажатием клавиш.

В настоящее время, когда я нажимаю "пробел", вызывается следующая функция, которая открывает exe-файл:
public static void runStim ()

{
    ProcessStartInfo startInfo = new ProcessStartInfo("C:\\Users\\Nathan\\Desktop\\stim_data_receiver.exe", "NO_STIMULATOR 1000000 REMOTE");
    startInfo.RedirectStandardOutput = false;
    startInfo.RedirectStandardError = false;
    startInfo.RedirectStandardInput = true;
    startInfo.UseShellExecute = false;
    startInfo.CreateNoWindow = false;

    Process stim = new Process();
    stim.StartInfo = startInfo;    
    stim.Start();
}


Пока он открыт и возвращается в игру, клавиша возврата вызывает функцию "enterCommand". Мне нужно это, чтобы написать письмо программе так же, как вы можете, когда exe-файл открывается сам по себе. Я не был успешным в этом.

Мне посоветовали, чтобы мои опробованные методы (ниже) пытались отправить данные в процесс, записывая их в сам exe - файл, а не в входной поток процесса-может ли кто-нибудь помочь мне достичь этого?

Я должен упомянуть, что мой метод действительно работает с записью строки в txt-файл.

Любая помощь очень ценится. Спасибо.

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

public static void enterCommand()

{
    using (StreamWriter outputfile = new StreamWriter("C:\\Users\\Nathan\\Desktop\\stim_data_receiver.exe", true))
    {
        outputfile.Write("%/Hello");
    }
}

public static void enterCommand()

{
    StreamWriter w;
    w = new StreamWriter(@"C:\\Users\\Nathan\\Desktop\\stim_data_receiver.exe");
    w.WriteLine("hello");
}

1 Ответов

Рейтинг:
12

Richard Deeming

Вам нужно написать команду на StandardInput собственность компании Process пример:

ProcessStartInfo startInfo = new ProcessStartInfo("C:\\Users\\Nathan\\Desktop\\stim_data_receiver.exe", "NO_STIMULATOR 1000000 REMOTE");
startInfo.RedirectStandardOutput = false;
startInfo.RedirectStandardError = false;
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = false;

Process stim = Process.Start(startInfo);
stim.StandardInput.WriteLine("hello");

Если вам нужно отправить входные данные из другого метода, то вам нужно будет сохранить Process экземпляр в поле:
private static Process _stim;

public static void runStim()
{
    ...
    _stim = Process.Start(startInfo);
}

public static void enterCommand()
{
    if (_stim != null && !_stim.HasExited)
    {
        _stim.StandardInput.WriteLine("hello");
    }
}


Member 12681347

Большое спасибо за помощь, Ричард.