我使用QProcess
类在Windows上运行外部应用程序。
此外部应用程序在此之后立即崩溃。
这个外部应用程序崩溃在这样的代码上:
HANDLE sh = GetStdHandle(STD_INPUT_HANDLE);
if (sh == INVALID_HANDLE_VALUE)
abort();
DWORD eventsNum;
if (!GetNumberOfConsoleInputEvents(sh, &eventsNum))
abort();
GetNumberOfConsoleInputEvents
失败,GetLastError
返回6 =无效句柄。所以看起来GetNumberOfConsoleInputEvents
不适用于管道?
是否可以以统一的方式使用控制台句柄,因此我可以在stdin中接收可用字节数而不知道这是管道/控制台?
换句话说,我希望我的应用程序适用于两种情况:当我从cmd.exe
运行它时,当我从另一个使用管道的应用程序运行它时(或者使用QProcess
重定向子项的其他应用程序)标准输入)。
我无法使用FILE *stdin
,因为我需要WaitFor...
函数来处理stdin。