Udostępnij przez


funkcje wejściowe konsoli Low-Level

Ważne

W tym dokumencie opisano funkcje platformy konsolowej, które nie są już częścią naszego planu działania ekosystemu. Nie zalecamy używania tej zawartości w nowych produktach, ale będziemy nadal obsługiwać istniejące użycie w przyszłości na czas nieokreślony. Nasze preferowane nowoczesne rozwiązanie koncentruje się na sekwencjach terminali wirtualnych w celu zapewnienia maksymalnej zgodności w scenariuszach międzyplatformowych. Więcej informacji na temat tej decyzji projektowej można znaleźć w naszym dokumencie dotyczącym klasycznej konsoli i terminalu wirtualnego .

Bufor funkcji wejściowych konsoli niskiego poziomu zawiera rekordy wejściowe, które mogą zawierać informacje dotyczące klawiatury, myszy, zmiany rozmiaru buforu, fokusu i zdarzeń menu. Funkcje niskiego poziomu zapewniają bezpośredni dostęp do buforu wejściowego, w przeciwieństwie do funkcji wysokiego poziomu, które filtrować i przetwarzać dane buforu wejściowego, odrzucając wszystkie dane, ale wejściowe klawiatury.

Istnieje pięć funkcji niskiego poziomu na potrzeby uzyskiwania dostępu do buforu wejściowego konsoli:

Funkcje ReadConsoleInput, PeekConsoleInput i WriteConsoleInput używają struktury INPUT_RECORD do odczytu lub zapisu w buforze wejściowym.

Poniżej przedstawiono opisy funkcji wejściowych konsoli niskiego poziomu.

Funkcja Opis
ReadConsoleInput Odczytuje i usuwa rekordy wejściowe z buforu wejściowego. Funkcja nie zwraca, dopóki nie będzie można odczytać co najmniej jednego rekordu. Następnie wszystkie dostępne rekordy są przenoszone do buforu procesu wywołującego, dopóki nie będzie dostępnych żadnych rekordów lub określona liczba rekordów została odczytana. Nieprzeczytane rekordy pozostają w buforze wejściowym dla następnej operacji odczytu. Funkcja zgłasza łączną liczbę odczytanych rekordów. Aby zapoznać się z przykładem, który używa funkcji ReadConsoleInput, zobacz Odczytywanie zdarzeń buforu wejściowego.
PeekConsoleInput Odczyty bez usuwania oczekujących rekordów wejściowych w buforze wejściowym. Wszystkie dostępne rekordy do określonej liczby są kopiowane do buforu procesu wywołującego. Jeśli żadne rekordy nie są dostępne, funkcja zwraca natychmiast. Funkcja zgłasza łączną liczbę odczytanych rekordów.
GetNumberOfConsoleInputEvents Określa liczbę nieprzeczytanych rekordów wejściowych w buforze wejściowym.
WriteConsoleInput Umieszcza rekordy wejściowe w buforze wejściowym za wszystkimi oczekującymi rekordami w buforze. Bufor wejściowy rośnie dynamicznie, w razie potrzeby, do przechowywania tylu rekordów, ile są zapisywane. Aby użyć tej funkcji, określony uchwyt buforu wejściowego musi mieć prawo dostępu GENERIC_WRITE.
FlushConsoleInputBuffer Odrzuca wszystkie nieprzeczytane zdarzenia w buforze wejściowym. Aby użyć tej funkcji, określony uchwyt buforu wejściowego musi mieć prawo dostępu GENERIC_WRITE.

Wątek procesu aplikacji może wykonać operację oczekiwania, aby poczekać, aż dane wejściowe będą dostępne w buforze wejściowym. Aby zainicjować operację oczekiwania, określ uchwyt do buforu wejściowego w wywołaniu dowolnej funkcji oczekiwania. Te funkcje mogą zwracać, gdy stan co najmniej jednego obiektu jest sygnalizowany. Stan uchwytu wejściowego konsoli staje się sygnalizowany, gdy w buforze wejściowym znajdują się nieprzeczytane rekordy. Stan jest resetowany do niesygnalizatora, gdy bufor wejściowy staje się pusty. Jeśli nie ma dostępnych danych wejściowych, wątek wywołujący przechodzi w wydajny stan oczekiwania, zużywając bardzo mało czasu procesora podczas oczekiwania na spełnienie warunków operacji oczekiwania.