Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Każda konsola ma bufor wejściowy zawierający kolejkę wejściowych rekordów zdarzeń. Gdy okno konsoli ma fokus klawiatury, konsola formatuje każde zdarzenie wejściowe (takie jak pojedyncze naciśnięcie, ruch myszy lub kliknięcie przycisku myszy) jako rekord wejściowy, który umieszcza w buforze wejściowym konsoli.
Aplikacje mogą uzyskiwać dostęp do buforu wejściowego konsoli pośrednio przy użyciu funkcji we/wy konsoli wysokiego poziomu lub bezpośrednio przy użyciu funkcji wejściowych konsoli niskiego poziomu. Funkcje wejściowe wysokiego poziomu filtrować i przetwarzać dane w buforze wejściowym, zwracając tylko strumień znaków wejściowych. Funkcje wejściowe niskiego poziomu umożliwiają aplikacjom odczytywanie rekordów wejściowych bezpośrednio z buforu wejściowego konsoli lub umieszczanie rekordów wejściowych w buforze wejściowym. Aby otworzyć dojście do buforu wejściowego konsoli, określ wartość CONIN$ w wywołaniu funkcji CreateFile .
Rekord wejściowy to struktura zawierająca informacje o typie zdarzenia, które wystąpiło (klawiatura, mysz, zmiana rozmiaru okna, fokus lub zdarzenie menu), a także szczegółowe informacje o zdarzeniu. Element członkowski EventType w strukturze INPUT_RECORD wskazuje, który typ zdarzenia znajduje się w rekordzie.
Zdarzenia koncentracji uwagi i menu są umieszczane w buforze wejściowym konsoli do użytku wewnętrznego przez system i powinny być ignorowane przez aplikacje.
Zdarzenia klawiatury
Zdarzenia klawiatury są generowane w przypadku naciśnięcia lub zwolnienia dowolnego; Obejmuje to klucze sterowania. Jednak ALT ma specjalne znaczenie dla systemu po naciśnięciu i zwolnieniu bez połączenia z innym znakiem i nie jest przekazywany do aplikacji. Ponadto kombinacja CTRL+C nie jest przekazywana, jeśli uchwyt wejściowy jest w trybie przetwarzania.
Jeśli zdarzenie wejściowe jest naciśnięciem, element członkowski zdarzenia w INPUT_RECORD jest strukturą KEY_EVENT_RECORD zawierającą następujące informacje:
- Wartość logiczna wskazująca, czy został naciśnięty, czy zwolniony.
- Liczba powtórzeń, która może być większa niż jedna, gdy klucz jest trzymany w dół.
- Kod klucza wirtualnego identyfikujący dany klucz w sposób niezależny od urządzenia.
- Kod skanowania wirtualnego wskazujący wartość zależną od urządzenia wygenerowaną przez sprzęt klawiaturowy.
- Przetłumaczony znak Unicode™ lub ANSI.
- Zmienna flaga wskazująca stan sterowania (ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK i CAPS LOCK) i wskazująca, czy rozszerzony został naciśnięty. Ulepszone dla klawiatur IBM® 101-key i 102-klawiszowych to INS, DEL, HOME, END, PAGE UP, PAGE DOWN i strzałek w klastrach po lewej stronie klawiatury liczbowej i dzielenia (/) i ENTER w klawiaturze liczbowej.
Zdarzenia myszy
Zdarzenia myszy są generowane za każdym razem, gdy użytkownik przesuwa mysz lub naciska lub zwalnia jeden z przycisków myszy. Zdarzenia myszy są umieszczane w buforze wejściowym tylko wtedy, gdy spełnione są następujące warunki:
- Tryb wprowadzania konsoli jest ustawiony na ENABLE_MOUSE_INPUT (tryb domyślny).
- Okno konsoli ma fokus klawiatury.
- Wskaźnik myszy znajduje się w granicach okna konsoli.
Jeśli zdarzenie wejściowe jest zdarzeniem myszy, element członkowski zdarzenia w INPUT_RECORD jest strukturą MOUSE_EVENT_RECORD zawierającą następujące informacje:
- Współrzędne wskaźnika myszy pod względem wiersza i kolumny komórki znaków w systemie współrzędnych buforu ekranu konsoli.
- Zmienna flagowa wskazująca stan przycisków myszy.
- Zmienna flagi wskazująca stan sterowania (ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK i CAPS LOCK) i wskazująca, czy został naciśnięty rozszerzony. Ulepszone dla klawiatur IBM 101-key i 102-klawiszowych to INS, DEL, HOME, END, PAGE UP, PAGE DOWN i strzałek w klastrach po lewej stronie klawiatury liczbowej i dzielenia (/) i ENTER w klawiaturze liczbowej.
- Zmienna flaga wskazująca, czy zdarzenie było normalnym zdarzeniem naciśnięcia przycisku lub zwolnienia przycisku, zdarzeniem ruchu myszy, czy drugim kliknięciem zdarzenia dwukrotnego kliknięcia.
Uwaga / Notatka
Współrzędne położenia myszy są pod względem buforu ekranu konsoli, a nie okna konsoli. Bufor ekranu mógł zostać przewinięty w odniesieniu do okna, więc lewy górny róg okna nie musi być współrzędną (0,0) buforu ekranu konsoli. Aby określić współrzędne myszy względem układu współrzędnych okna, odejmij współrzędne źródła okna ze współrzędnych położenia myszy. Użyj funkcji GetConsoleScreenBufferInfo , aby określić współrzędne źródła okna.
Element członkowski dwButtonState struktury MOUSE_EVENT_RECORD ma nieco odpowiadający każdemu przyciskowi myszy. Bit ma wartość 1, jeśli przycisk nie działa i 0, jeśli przycisk jest w górę. Zdarzenie zwolnienia przycisku jest wykrywane przez wartość 0 dla elementu członkowskiego dwEventFlagsMOUSE_EVENT_RECORD i zmianę bitu przycisku z zakresu od 1 do 0. Funkcja GetNumberOfConsoleMouseButtons pobiera liczbę przycisków myszy.
zdarzenia Buffer-Resizing
Menu okna konsoli umożliwia użytkownikowi zmianę rozmiaru aktywnego buforu ekranu; ta zmiana generuje zdarzenie zmiany rozmiaru buforu. Zdarzenia zmiany rozmiaru buforu są umieszczane w buforze wejściowym, jeśli tryb wejściowy konsoli jest ustawiony na ENABLE_WINDOW_INPUT (czyli tryb domyślny jest wyłączony).
Jeśli zdarzenie wejściowe jest zdarzeniem zmiany rozmiaru buforu, element członkowski zdarzeniaINPUT_RECORD jest strukturą WINDOW_BUFFER_SIZE_RECORD zawierającą nowy rozmiar buforu ekranu konsoli, wyrażoną w kolumnach i wierszach komórek znaków.
Jeśli użytkownik zmniejszy rozmiar buforu ekranu konsoli, wszelkie dane w odrzuconej części buforu zostaną utracone.
Zmiany rozmiaru buforu ekranu konsoli w wyniku wywołań aplikacji do funkcji SetConsoleScreenBufferSize nie są generowane jako zdarzenia zmiany rozmiaru buforu.