質問

私はウィナピを使おうとしています 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を使用しています。ありがとう。

役に立ちましたか?

解決

私のためにはうまくいきます。 error_invalid_handleで失敗する唯一の方法は、std_input_handleの代わりにstd_output_handleに渡すことでした。 hconsole_cは入力ハンドルですか?

他のヒント

コンソールアプリの最後にキープレスを待っているだけなら、なぜあなたは試さないのですか System("Pause"); ?

キーストロークを待つ方法は非常に複雑です。単一のC関数呼び出しを使用すると、これを行う方法はいくつかあります。

  • getch(); (またはISO C ++コンフォーマント名、 _getch)、プラットフォームに依存しない。
  • system("pause");, 、Windows固有です。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top