У меня есть программа на C / C ++, которая запускается в окне консоли и предлагает пользователю нажать любую клавишу для продолжения или «q» для выхода.В настоящее время он использует _kbhit (), чтобы определить, была ли нажата клавиша, а затем использует _getch (), чтобы определить, какой это был символ.
Теперь я хочу иметь возможность автоматизировать эту программу (из приложения на C #, используяПроцесс с установленными RedirectStandardInput и CreateNoWindow).Очевидно, я больше не могу полагаться на _kbhit (), так как он использует ReadConsoleInput (), который завершается ошибкой при запуске с использованием моего приложения на C #.В моем приложении на C # я использую process.StandardInput.Write ("A"), чтобы вставить что-то в поток, пытаясь продолжить работу моего консольного приложения.
В консольном приложении я использовал SetConsoleMode () дляочистите флаг ENABLE_LINE_INPUT, чтобы я мог использовать getchar () для возврата сразу после нажатия символа, и это работает достаточно хорошо (когда я нажимаю символьную клавишу в окне консоли, а также когда выполняется вызов из приложения c #)).Тем не менее, у него есть недостатки в том, что теперь он принимает только символьные клавиши (т. Е. Не клавиши F, Alt, Shift и т. Д.), Что не является большой проблемой, но более того, мне кажется, что мне приходится нажимать клавишу возврата дважды (и это клавишачто многие люди, скорее всего, захотят нажать в любой ситуации).
Кто-нибудь знает, как я могу заставить консольное приложение реагировать на клавишу (любой бонус, символ и возврат только приемлемы)нажал ОДИН РАЗ, в то время как все еще отвечает на единственный символ, помещенный в поток из моего приложения C #?
Что-то, что я заметил, вызывая систему («ПАУЗА»), дает точное поведение, которое я хочу, кроме знания, какая клавиша быланажал, чтобы я мог выйти на «д».Я не знаю, как это делает PAUSE, и это также не позволяет мне использовать мое собственное сообщение: (.
Я уверен, что есть действительно очевидное решение, но оно сводит меня с ума.Любые мысли очень ценятся!