在 Windows 下用 C 語言開發控制台窗口界面 (TUI),第一步就是獲取標準輸入、輸出、錯誤設備的句柄。所有後續的顏色設置、光標控制、字符繪製、輸入事件讀取,都建立在這三個句柄之上。本系列改編自《C語言控制台窗口界面編程(修正版)》,去繁就簡,聚焦核心實用技術。
GetStdHandleHANDLE GetStdHandle(DWORD nStdHandle);
nStdHandle 三大標準設備常量:| 常量 | 值 | 用途 |
|---|---|---|
STD_INPUT_HANDLE | -10 | 標準輸入 (鍵盤/重定向輸入) |
STD_OUTPUT_HANDLE | -11 | 標準輸出 (控制台顯示/重定向輸出) |
STD_ERROR_HANDLE | -12 | 標準錯誤 (錯誤信息輸出,可單獨重定向) |
#include <windows.h>
#include <stdio.h>
HANDLE hStdin, hStdout, hStderr;
int main() {
// 1. 獲取三大標準句柄
hStdin = GetStdHandle(STD_INPUT_HANDLE);
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
hStderr = GetStdHandle(STD_ERROR_HANDLE);
if (hStdin == INVALID_HANDLE_VALUE ||
hStdout == INVALID_HANDLE_VALUE ||
hStderr == INVALID_HANDLE_VALUE) {
fprintf(stderr, "獲取標準句柄失敗, 錯誤碼: %lu\n", GetLastError());
return 1;
}
// 2. 後續所有控制台操作都基於這些句柄
// 例如:設置標題、顏色、光標位置、讀取輸入事件...
SetConsoleTitle(TEXT("My Console GUI"));
return 0;
}
WriteConsole, SetConsoleTextAttribute, SetConsoleCursorPosition, FillConsoleOutputCharacter 等繪圖/顏色/光標 API 都需它。ReadConsoleInput 讀取鍵盤/鼠標/窗口事件,SetConsoleMode 啟用 ENABLE_MOUSE_INPUT 等模式。stdin/stdout/stderr (FILE*) 混淆:C Runtime 的流指針有緩衝,Win32 句柄無緩衝直接對話內核,兩套體系不可混用 (除非 _get_osfhandle 轉換)。INVALID_HANDLE_VALUE。拿到三大句柄,就是拿到了控制台的「遙控器」。下一篇將講解 SetConsoleMode 啟用鼠標/窗口/擴展輸入模式,以及 ReadConsoleInput 事件循環架構,開啟真正的交互式 TUI 開發之旅。
系列導航: