我正在尝试使用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。感谢。
答案 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的。