使用WINAPI ReadConsole

时间:2010-05-04 15:21:57

标签: c++ winapi console-application keyboard-input

我正在尝试使用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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

等待击键的方法过于复杂。使用单个C函数调用,有几种方法可以执行此操作:

  • getch();(或符合ISO C ++标准的名称_getch),与平台无关;
  • system("pause");,这是特定于Windows的。