高階主控台輸入和輸出函式

ReadFile 和 WriteFile 函式或 ReadConsole 和 WriteConsole 函式可讓應用程式以字元數據流的形式讀取主控台輸入和寫入主控台輸出。 ReadConsole 和 WriteConsole 的行為與 ReadFile 和 WriteFile 完全相同,不同之處在於它們可以做為寬字元函式(其中文字自變數必須使用 Unicode)或 ANSI 函式(其中文字自變數必須使用 Windows 字元集的字元)。 需要維護單一來源集以支援 Unicode 或 ANSI 字元集的應用程式應該使用 ReadConsoleWriteConsole

ReadConsole WriteConsole 只能與控制台句柄搭配使用; ReadFileWriteFile 可以與其他句柄一起使用(例如檔案或管道)。 ReadConsole 和 WriteConsole 如果搭配已重新導向且不再是控制台句柄的標準句柄使用,則失敗。

若要取得鍵盤輸入,進程可以使用 ReadFile ReadConsole 搭配主控台輸入緩衝區的句柄,或者如果已重新導向,則可以使用 ReadFile 從檔案或管道STDIN讀取輸入。 這些函式只會傳回可轉譯為 ANSI 或 Unicode 字元的鍵盤事件。 可傳回的輸入包括控制按鍵組合。 函式不會傳回涉及函式按鍵或箭頭鍵的鍵盤事件。 會捨棄滑鼠、視窗、焦點或功能表輸入所產生的輸入事件。

如果啟用行輸入模式(預設模式),ReadFile ReadConsole 在按下 ENTER 鍵之前,不會返回呼叫的應用程式。 如果停用行輸入模式,函式將不會傳回,直到至少有一個字元可用為止。 在任一模式中,所有可用的字元都會讀取,直到沒有其他索引鍵可用或已讀取指定的字元數為止。 未讀取的字元會經過緩衝處理,直到下一個讀取作業為止。 函式會報告實際讀取的字元總數。 如果啟用回應輸入模式,這些函式所讀取的字元會寫入目前游標位置的作用中畫面緩衝區。

進程可以使用 WriteFileWriteConsole 來寫入使用中或非使用中的螢幕緩衝區,或者如果 STDOUT 已重新導向,則可以使用 WriteFile 寫入檔案或管道。 處理輸出模式,並在 EOL 輸出模式中包裝,以控制字元寫入或回應螢幕緩衝區的方式。

WriteFile 或 WriteConsole 所寫入字元,或 ReadFile ReadConsole回應的字元會插入目前游標位置的屏幕緩衝區中。 寫入每個字元時,游標位置會前進到下一個字元儲存格:不過,數據列結尾的行為取決於控制台畫面緩衝區在 EOL 輸出模式中的換行。

您可以透過虛擬終端機序列找到數據指標位置的進一步詳細數據,特別是用於尋找目前位置的查詢狀態類別,以及用於設定目前位置的數據指標定位類別。 或者,應用程式可以使用 GetConsoleScreenBufferInfo 函式來判斷目前的游標位置和 SetConsoleCursorPosition 函式來設定游標位置。 不過, 虛擬終端機 順序機制是所有全新且持續開發的慣用機制。 如需此決策背後的策略詳細數據,請參閱傳統函式與虛擬終端機和生態系統藍圖檔。

如需使用高階控制台 I/O 函式的範例,請參閱 使用高階輸入和輸出函式