【问题标题】:Using WINAPI ReadConsole使用 WINAPI ReadConsole
【发布时间】:2011-02-15 12:48:03
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,我有一个使用 ISO 调用的工作函数,但是我费尽心思为 WINAPI 控制台函数编写了一个包装类。我想用它。您对使上述代码正常工作有什么建议吗?
      【解决方案3】:

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

      【讨论】:

      • 是的,但是我费尽心思为 WINAPI 控制台函数编写了一个包装类。我想用它。您对使上述代码正常工作有什么建议吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2020-04-09
      • 1970-01-01
      相关资源
      最近更新 更多