Привет коллеги.
Вот захотелось вывод одной консоли перебросить на другую консоль.
Тыкался мыкался, читал, в результате перебросил вывод одной консоли в файл в другом процессе.
Вот код.
int main()
{
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
HANDLE h = CreateFile(L"out.log",
FILE_APPEND_DATA,
FILE_SHARE_WRITE | FILE_SHARE_READ,
&sa,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
PROCESS_INFORMATION pi;
STARTUPINFO si;
BOOL ret = FALSE;
DWORD No_Window_FLAG = CREATE_NO_WINDOW;
DWORD With_Window_FLAG = CREATE_NEW_CONSOLE;
HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE); //здесь я попытался получить хендл стандартного потока вывода
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags |= STARTF_USESTDHANDLES;
si.hStdInput = NULL;
si.hStdError = h;
si.hStdOutput = h;
//si.hStdOutput = hstdout; //тут попытался сделать вывод на консоль но не работает
TCHAR cmd[] = L"CGIScript.exe";
ret = CreateProcess(NULL, cmd, NULL, NULL, TRUE, With_Window_FLAG, NULL, NULL, &si, &pi);
int t;
std::cin >> t;
if (ret)
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
return -1;
}
вывод в файл работает, а вот вывод в консоль не работает наверное потому что я толком не дуплюсь что такое stdout и как работать с ним через handle
кстати на С# тут же накропал, все работает, но понятия мне не добавило
class Program
{
static void Main(string[] args)
{
ProcessStartInfo startInfo = new ProcessStartInfo("CGIScript.exe");
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = false;
startInfo.WindowStyle = ProcessWindowStyle.Normal;
Process process = Process.Start(startInfo);
StreamReader outputReader = process.StandardOutput;
StreamReader errorReader = process.StandardError;
string line;
while ((line = outputReader.ReadLine()) != null)
{
Console.WriteLine(line);
}
Console.ReadKey();
}
}
}
в С# все работает, но есть нюанс окно дочерней консоли не выводится, не понял почему.