2010-05-04 81 views
2

我想使用WINAPI ReadConsole()來等待我的Win32控制檯應用程序結束時的任何按鍵。使用WINAPI ReadConsole

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速成版。謝謝。

回答

3

適合我。我唯一能夠通過ERROR_INVALID_HANDLE失敗的方法是將STD_OUTPUT_HANDLE而不是STD_INPUT_HANDLE傳遞給它。你確定hConsole_c是輸入句柄嗎?

+0

就是這樣。謝謝! – 2010-05-04 16:35:55

1

如果你只是想在鍵盤應用程序結束時等待按鍵,爲什麼不試試System("Pause");

+1

是的,但我花了所有編寫WINAPI控制檯函數的包裝類的麻煩。我想使用它。你有什麼建議讓上面的代碼工作? – 2010-05-04 15:45:10

1

您等待擊鍵的方法非常複雜。使用簡單的C函數調用,有幾個方法可以做到這一點:

  • getch();(或ISO C++符合的名稱,_getch),它是獨立於平臺;
  • system("pause");,這是Windows特定的。
+0

是的,我有一個使用ISO調用的工作函數,但我花了所有編寫WINAPI控制檯函數的包裝類的麻煩。我想使用它。你有什麼建議讓上面的代碼工作? – 2010-05-04 15:44:34