Udostępnij przez


Tryby konsoli High-Level

Zachowanie funkcji konsoli wysokiego poziomu ma wpływ na tryby wejściowe i wyjściowe konsoli. Wszystkie następujące tryby wprowadzania konsoli są włączone dla buforu wejściowego konsoli podczas tworzenia konsoli:

  • Tryb wprowadzania linii
  • Przetworzony tryb wprowadzania
  • Tryb wprowadzania echa

Oba następujące tryby danych wyjściowych konsoli są włączone dla buforu ekranu konsoli podczas jego tworzenia:

  • Przetworzony tryb danych wyjściowych
  • Zawijanie w trybie wyjściowym EOL

Wszystkie trzy tryby wejściowe, wraz z przetworzonym trybem wyjściowym, są przeznaczone do współpracy. Najlepiej włączyć lub wyłączyć wszystkie te tryby jako grupę. Po włączeniu wszystkich aplikacji mówi się, że jest w trybie "gotowane", co oznacza, że większość przetwarzania jest obsługiwana dla aplikacji. Gdy wszystkie są wyłączone, aplikacja jest w trybie "nieprzetworzonym", co oznacza, że dane wejściowe są niefiltrowane, a wszystkie operacje przetwarzania pozostają w aplikacji.

Aplikacja może użyć funkcji GetConsoleMode , aby określić bieżący tryb buforu wejściowego lub buforu ekranu konsoli. Można włączyć lub wyłączyć dowolny z tych trybów, używając następujących wartości w funkcji SetConsoleMode . Należy pamiętać, że ustawienie trybu wyjściowego jednego buforu ekranu nie wpływa na tryb wyjściowy innych ekranu.

Jeśli parametr hConsoleHandle jest uchwytem wejściowym, tryb może być co najmniej jedną z następujących wartości. Po utworzeniu konsoli wszystkie tryby wejściowe z wyjątkiem ENABLE_WINDOW_INPUT i ENABLE_VIRTUAL_TERMINAL_INPUT są domyślnie włączone.

Wartość Znaczenie
ENABLE_ECHO_INPUT 0x0004 Znaki odczytywane przez funkcję ReadFile lub ReadConsole są zapisywane w aktywnym buforze ekranu podczas wpisywania ich w konsoli. Ten tryb może być używany tylko wtedy, gdy jest również włączony tryb ENABLE_LINE_INPUT .
ENABLE_INSERT_MODE 0x0020 Po włączeniu tekstu wprowadzonego w oknie konsoli zostanie wstawiony w bieżącej lokalizacji kursora, a cały tekst po tej lokalizacji nie zostanie zastąpiony. Po wyłączeniu zostanie zastąpiony cały następujący tekst.
ENABLE_LINE_INPUT 0x0002 Funkcja ReadFile lub ReadConsole zwraca tylko wtedy, gdy odczytany jest znak powrotu karetki. Jeśli ten tryb jest wyłączony, funkcje zwracają co najmniej jeden znak.
ENABLE_MOUSE_INPUT 0x0010 Jeśli wskaźnik myszy znajduje się w granicach okna konsoli, a okno ma fokus klawiatury, zdarzenia myszy generowane przez ruch myszy i naciśnięcia przycisków są umieszczane w buforze wejściowym. Te zdarzenia są odrzucane przez funkcję ReadFile lub ReadConsole, nawet jeśli ten tryb jest włączony. Funkcja ReadConsoleInput może służyć do odczytywania MOUSE_EVENT rekordów wejściowych z buforu wejściowego.
ENABLE_PROCESSED_INPUT 0x0001 CTRL+C są przetwarzane przez system i nie są umieszczane w buforze wejściowym. Jeśli bufor wejściowy jest odczytywany przez plik ReadFile lub ReadConsole, inne klucze sterowania są przetwarzane przez system i nie są zwracane w buforze ReadFile lub ReadConsole . Jeśli tryb ENABLE_LINE_INPUT jest również włączony, funkcja backspace, powrót karetki i znaki zestawienia wierszy są obsługiwane przez system.
ENABLE_QUICK_EDIT_MODE 0x0040 Ta flaga umożliwia użytkownikowi wybieranie i edytowanie tekstu za pomocą myszy. Aby włączyć ten tryb, użyj polecenia ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS. Aby wyłączyć ten tryb, użyj ENABLE_EXTENDED_FLAGS bez tej flagi.
ENABLE_WINDOW_INPUT 0x0008 Interakcje użytkownika, które zmieniają rozmiar buforu ekranu konsoli, są zgłaszane w buforze wejściowym konsoli. Informacje o tych zdarzeniach mogą być odczytywane z buforu wejściowego przez aplikacje przy użyciu funkcji ReadConsoleInput , ale nie przy użyciu funkcji ReadFile lub ReadConsole.
ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200 Ustawienie tej flagi powoduje, że aparat przetwarzania terminali wirtualnych konwertuje dane wejściowe użytkownika odebrane przez okno konsoli na sekwencje terminali wirtualnych , które można pobrać przez aplikację pomocniczą za pomocą funkcji ReadFile lub ReadConsole .

Typowe użycie tej flagi jest zamierzone w połączeniu z ENABLE_VIRTUAL_TERMINAL_PROCESSING na dojściu wyjściowym w celu nawiązania połączenia z aplikacją, która komunikuje się wyłącznie za pośrednictwem sekwencji terminali wirtualnych.

Jeśli parametr hConsoleHandle jest uchwytem buforu ekranu, tryb może być co najmniej jedną z następujących wartości. Po utworzeniu buforu ekranu oba tryby wyjściowe są domyślnie włączone.

Wartość Znaczenie
ENABLE_PROCESSED_OUTPUT 0x0001 Znaki zapisane przez funkcję WriteFile lub WriteConsole lub powtórzone przez funkcję ReadFile lub ReadConsole są analizowane dla sekwencji kontrolek ASCII, a wykonywana jest prawidłowa akcja. Przetwarzane są znaki backspace, tabulacji, dzwonka, powrotu karetki i wiersza. Należy ją włączyć w przypadku używania sekwencji kontrolek lub ustawiania ENABLE_VIRTUAL_TERMINAL_PROCESSING .
ENABLE_WRAP_AT_EOL_OUTPUT 0x0002 Podczas pisania za pomocą polecenia WriteFile lub WriteConsole lub echo z funkcją ReadFile lub ReadConsole kursor przechodzi na początek następnego wiersza, gdy osiągnie koniec bieżącego wiersza. Powoduje to, że wiersze wyświetlane w oknie konsoli są automatycznie przewijane w górę, gdy kursor przechodzi poza ostatni wiersz w oknie. Powoduje to również przewinięcie zawartości buforu ekranu konsoli (.). /odrzucenie górnego wiersza buforu ekranu konsoli), gdy kursor przechodzi poza ostatni wiersz w buforze ekranu konsoli. Jeśli ten tryb jest wyłączony, ostatni znak w wierszu zostanie zastąpiony wszelkimi kolejnymi znakami.
ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 Podczas pisania przy użyciu funkcji WriteFile lub WriteConsole znaki są analizowane dla wersji VT100 i podobnych sekwencji znaków sterujących ruchem kursora, trybem koloru/czcionki i innymi operacjami, które mogą być również wykonywane za pośrednictwem istniejących interfejsów API konsoli. Aby uzyskać więcej informacji, zobacz Konsola virtual terminal sequences (Sekwencje terminali wirtualnych konsoli).
Upewnij się , że ENABLE_PROCESSED_OUTPUT jest ustawiona podczas korzystania z tej flagi.
DISABLE_NEWLINE_AUTO_RETURN 0x0008 Podczas pisania za pomocą polecenia WriteFile lub WriteConsole dodaje dodatkowy stan opakowujący koniec wiersza, który może opóźnić operacje przewijania kursora i buforu.

Zwykle, gdy ENABLE_WRAP_AT_EOL_OUTPUT jest ustawiona, a tekst osiągnie koniec wiersza, kursor natychmiast przejdzie do następnego wiersza, a zawartość buforu będzie przewijać w górę po jednym wierszu. W przeciwieństwie do tego zestawu flag kursor nie przechodzi do następnego wiersza, a operacja przewijania nie jest wykonywana. Zapisany znak zostanie wydrukowany w końcowej pozycji w wierszu, a kursor pozostanie nad tym znakiem tak, jakby ENABLE_WRAP_AT_EOL_OUTPUT był wyłączony, ale następny znak drukowalny będzie drukowany tak, jakby ENABLE_WRAP_AT_EOL_OUTPUT jest włączony. Nie zostanie zastąpione. W szczególności kursor szybko przechodzi w dół do następującego wiersza, przewijanie jest wykonywane w razie potrzeby, znak jest drukowany, a kursor przechodzi jeszcze jedną pozycję.

Typowe użycie tej flagi jest zamierzone w połączeniu z ustawieniem ENABLE_VIRTUAL_TERMINAL_PROCESSING w celu lepszego emulowania emulatora terminalu, gdzie pisanie końcowego znaku na ekranie (.. /w prawym dolnym rogu) bez wyzwalania natychmiastowego przewijania jest pożądane zachowanie.
ENABLE_LVB_GRID_WORLDWIDE 0x0010 Interfejsy API do pisania atrybutów znaków, w tym WriteConsoleOutput i WriteConsoleOutputAttribute , umożliwiają używanie flag z atrybutów znaków w celu dostosowania koloru pierwszego planu i tła tekstu. Ponadto określono zakres flag DBCS z prefiksem COMMON_LVB. W przeszłości flagi te działały tylko na stronach kodowych DBCS dla języków chińskich, japońskich i koreańskich.

Z wyjątkiem flag bajtów wiodących i końcowych bajtów pozostałe flagi opisujące rysunek linii i odwrotne wideo (.. /swap pierwszego planu i kolorów tła) może być przydatny dla innych języków, aby podkreślić fragmenty danych wyjściowych.

Ustawienie tej flagi trybu konsoli umożliwi używanie tych atrybutów na każdej stronie kodu w każdym języku.

Domyślnie można zachować zgodność ze znanymi aplikacjami, które historycznie korzystały z konsoli, ignorując te flagi na maszynach innych niż CJK do przechowywania bitów w tych polach do własnych celów lub przez przypadek.

Należy pamiętać, że użycie trybu ENABLE_VIRTUAL_TERMINAL_PROCESSING może spowodować ustawienie siatki LVB i odwróconych flag wideo, gdy ta flaga jest nadal wyłączona, jeśli dołączona aplikacja żąda podkreślenia lub odwrotnego wideo za pośrednictwem sekwencji terminali wirtualnych konsoli.