我正在嘗試使用Win API ReadConsole(...)
,我想傳遞一個分隔字符來暫停控制檯的輸入。 下面的代碼有效,但它僅停止讀取\r\n
上的輸入。 我希望它停止閱讀例如'.'
上的控制檯輸入。win api readConsole()
void read(char *cIn, char delim)
{
HANDLE hFile;
DWORD charsRead;
DWORD charsToRead = MAX_PATH;
CONSOLE_READCONSOLE_CONTROL cReadControl;
cReadControl.nLength = sizeof(CONSOLE_READCONSOLE_CONTROL);
cReadControl.nInitialChars = 0;
cReadControl.dwCtrlWakeupMask = delim;
cReadControl.dwControlKeyState = NULL;
DWORD lpMode;
// char cIn[MAX_PATH]; //-- buffer to hold data from the console
hFile = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL);
GetConsoleMode(hFile,&lpMode);
// lpMode &= ~ENABLE_LINE_INPUT; //-- turns off this flag
// SetConsoleMode(hFile, lpMode); //-- set the mode with the new flag off
bool read = ReadConsole(hFile, cIn, charsToRead * sizeof(TCHAR), &charsRead, &cReadControl);
cIn[charsRead - 2] = '\0';
}
我知道還有其他簡便的方法來做到這一點,但我只是想了解一些贏API函數,以及如何使用它們。
謝謝。
如果你想完全控制控制檯輸入,並獲得關於任何按鍵的信息,只要按下(但不等待* VK_RETURN *),您需要使用* ReadConsoleInput *而不是* ReadConsole * – RbMm
@RbMm謝謝,這很有幫助。 – dmaelect