2

ReadConsole()Win32コンソールアプリケーションの最後でキーが押されるのを待つためにWINAPIを使用しようとしています。

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 ++ 2008ExpressEditionを使用しています。ありがとう。

4

3 に答える 3

3

私にとってはうまくいきます。ERROR_INVALID_HANDLEで失敗する唯一の方法は、STD_INPUT_HANDLEではなくSTD_OUTPUT_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 に答える