Использование WINAPI ReadConsole - PullRequest
2 голосов
/ 04 мая 2010

Я пытаюсь использовать 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 ]

3 голосов
/ 04 мая 2010

Работает нормально для меня. Единственный способ получить сбой при использовании ERROR_INVALID_HANDLE - передать STD_OUTPUT_HANDLE вместо STD_INPUT_HANDLE. Вы уверены, что hConsole_c - это дескриптор ввода?

1 голос
/ 04 мая 2010

Ваш метод ожидания нажатия клавиши очень сложен. Используя одиночные вызовы функций C, вы можете сделать это несколькими способами:

  • getch(); (или имя, соответствующее ISO C ++, _getch), которое не зависит от платформы;
  • system("pause");, что зависит от Windows.
1 голос
/ 04 мая 2010

Если вы просто пытаетесь дождаться нажатия клавиши в конце вашего консольного приложения почему бы тебе не попробовать System("Pause");?

...