2

我正在尝试使用 WINAPIReadConsole()在我的 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 速成版。谢谢。

4

3 回答 3

3

对我来说很好。我可以让它因 ERROR_INVALID_HANDLE 而失败的唯一方法是将 STD_OUTPUT_HANDLE 而不是 STD_INPUT_HANDLE 传递给它。你确定 hConsole_c 是输入句柄吗?

于 2010-05-04T16:23:56.087 回答
1

您等待击键的方法非常复杂。使用单个 C 函数调用,有几种方法可以做到这一点:

  • getch();(或符合 ISO C++ 的名称,_getch),与平台无关;
  • system("pause");,这是特定于 Windows 的。
于 2010-05-04T15:38:18.490 回答
1

如果您只是想在控制台应用程序结束时等待按键,为什么不尝试System("Pause");呢?

于 2010-05-04T15:26:47.720 回答