0
一個應用程序,其中有一個gui窗口和控制檯窗口。窗口可以被點擊,拖動等等。在任何特定時刻,控制檯都可以被選擇,並且輸入一行,將被處理。
什麼我已經有:
的應用程序,分配和重視控制檯本身,然後重定向標準流吧。代碼是:
AllocConsole() ;
AttachConsole(GetCurrentProcessId());
freopen("CONIN$","rb",stdin); // reopen stdin handle as console window input
freopen("CONOUT$","wb",stdout); // reopen stout handle as console window output
freopen("CONOUT$","wb",stderr); // reopen stderr handle as console window output
然後註冊窗口類,創建並顯示一個窗口。輸出到控制檯工作正常,與窗口交互是正確的。
但是,我不能輸入任何東西到控制檯。我可以猜出它:如果我調用類似std :: cin >> my_string的東西,我將能夠輸入一行 - 但與窗口的交互將停止,直到輸入完成。那是對的嗎?我如何使應用程序按照上述方式運行?
更新:
我發現相關的問題:Test if stdin has input for C++ (windows and/or linux)
確定的代碼,是否有控制檯輸入字符被賦予有如下:
bool StdinOpen() {
static HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
DWORD bytes_left;
PeekNamedPipe(handle, NULL, 0, NULL, &bytes_left, NULL);
return bytes_left;
}
但是,它返回一些過高的數字,好像控制檯中總是有輸入。
哦。似乎很明顯。 – Srv19