Использование WINAPI ReadConsole
Я пытаюсь использовать WINAPI ReadConsole()
ждать любого нажатия клавиши в конце моего консольного приложения Win32.
CONSOLE_READCONSOLE_CONTROL tControl;
char pStr[65536];
DWORD dwBufLen = 1;
DWORD dwCtl;
tControl_c.nLength = sizeof( CONSOLE_READCONSOLE_CONTROL );
tControl_c.nInitialChars = 0;
tControl_c.dwControlKeyState = 0;
tControl_c.dwCtrlWakeupMask = NULL;
pBuf[0] = 0x00;
do
{
ReadConsole( hConsole_c, pStr, (*pBufLen) * sizeof(TCHAR), pBufLen, &tControl );
}
while ( pStr[0] == 0x00 );
Код выполняется без исключения. Тем не менее, когда ReadConsole()
функция выполняет код ошибки ERROR_INVALID_HANDLE
(0x06) помечен. Я подтвердил hConsole_c
быть действительной ручкой. У кого-нибудь есть понимание того, что я делаю неправильно? Я использую Visual C++ 2008 Express Edition. Благодарю.
3 ответа
У меня отлично работает. Единственный способ получить сбой при использовании ERROR_INVALID_HANDLE - передать STD_OUTPUT_HANDLE вместо STD_INPUT_HANDLE. Вы уверены, что hConsole_c является дескриптором ввода?
Если вы просто пытаетесь дождаться нажатия клавиши в конце вашего консольного приложения, почему бы вам не попробовать System("Pause");
?
Ваш метод ожидания нажатия клавиши очень сложен. Используя одиночные вызовы функций C, вы можете сделать это несколькими способами:
getch();
(или имя, соответствующее ISO C++,_getch
), который не зависит от платформы;system("pause");
, который является специфичным для Windows.