У меня давно запущено консольное приложение, которое запускается с Windows или может быть запущено приложением, которое я пишу.
У меня был ограниченный успех при отправке ключей в консольное приложение, и я даже не знаю, с чего начать чтение результатов из него. Возможно ли чтение вывода из консольного приложения, которое даже не запускается запрашивающим приложением?
В любом случае, два вопроса …
Как я могу эмулировать ключ возврата? (Вот то, что я должен отправить конкретные ключи в приложение, и приложение получает ключи, но я не могу найти, как эмулировать клавишу ВВОД.
do {
hwndCurrentWindow = FindWindowA("ConsoleWindowClass", "My Other Console App");
if (hwndCurrentWindow == 0) {
break;
}
iStringLen = GetWindowTextW (hwndCurrentWindow, wcharWindowText, 500);
if (iStringLen == 0) {
continue;
}
SetActiveWindow(hwndCurrentWindow);
printf("Sending '?'");
SendMessage(hwndCurrentWindow, WM_CHAR, '?', 0);
// '?' shows up in console app
printf("Sending 'a'");
SendMessage(hwndCurrentWindow, WM_CHAR, 'a', 0);
// 'a' shows up in console app.
//printf("Sending RETURN");
//SendMessage(hwndCurrentWindow, WM_CHAR, VK_RETURN, 0);
// nothing happens
break;
} while (hwndCurrentWindow);
Как я могу прочитать данные из консольного приложения? (Если бы другое консольное приложение не работало непрерывно, я просто записал бы вывод в файл и прочитал бы это … черт, это может все еще работать)
Я рассмотрел несколько вариантов, но многие из тех, что я прочитал, предназначены для C #, и, к сожалению, я не могу позволить себе роскошь менять языки. Есть ли похожие варианты для C ++?
Собирать вывод stdout из консольного приложения с C ++
Этот не работает, потому что приложение не закрывается. Так что просто висит и ждет. Постоянно добавляя больше в буфер.
Захват исполняемого файла c # из другой программы на C #
Спасибо за любую помощь, вы можете предоставить!
Вам нужно перенаправить ввод / вывод из этого приложения в основное приложение. Вот статья о том, что: Создание дочернего процесса с перенаправленным вводом и выводом
Других решений пока нет …