Sdílet prostřednictvím


Vyrovnávací paměť vstupu konzoly

Každá konzola má vstupní vyrovnávací paměť, která obsahuje frontu vstupních záznamů událostí. Když má okno konzoly fokus klávesnice, konzola naformátuje každou vstupní událost (například jedno stisknutí kláves, pohyb myši nebo kliknutí na tlačítko myši) jako vstupní záznam, který umístí do vstupní vyrovnávací paměti konzoly.

Aplikace mohou přistupovat ke vstupní vyrovnávací paměti konzoly nepřímo pomocí funkcí vstupně-výstupních operací konzoly vysoké úrovně nebo přímo pomocí vstupních funkcí konzoly nízké úrovně. Vstupní funkce vysoké úrovně filtrují a zpracovávají data ve vstupní vyrovnávací paměti a vracejí pouze datový proud vstupních znaků. Vstupní funkce nízké úrovně umožňují aplikacím číst vstupní záznamy přímo ze vstupní vyrovnávací paměti konzoly nebo zadávat vstupní záznamy do vstupní vyrovnávací paměti. Pokud chcete otevřít popisovač vstupní vyrovnávací paměti konzoly, zadejte hodnotu CONIN$ ve volání funkce CreateFile .

Vstupní záznam je struktura obsahující informace o typu události, ke které došlo (klávesnice, myš, změna velikosti okna, fokus nebo událost nabídky) a také konkrétní podrobnosti o události. Člen EventType ve struktuře INPUT_RECORD označuje, který typ události je obsažen v záznamu.

Události fokusu a nabídek se umístí do vstupní vyrovnávací paměti konzoly pro interní použití systémem a aplikace by je měly ignorovat.

Události klávesnice

Události klávesnice se generují při stisknutí nebo uvolnění libovolné klávesy; to zahrnuje řídicí klávesy. Klávesa ALT má však při stisknutí a uvolnění speciální význam pro systém, aniž by byla zkombinována s jiným znakem, a neprochází se do aplikace. Kombinace kláves CTRL+C se také nepředává, pokud je vstupní úchyt v zpracovaném režimu.

Pokud je vstupní událost stisknutí klávesy, člen události v INPUT_RECORD je struktura KEY_EVENT_RECORD obsahující následující informace:

  • Logická hodnota označující, zda byla klávesa stisknuta nebo uvolněna.
  • Počet opakování, který může být větší než jeden, když je klíč podržděný.
  • Kód virtuálního klíče, který identifikuje daný klíč nezávislým na zařízení.
  • Kód pro virtuální kontrolu označující hodnotu závislou na zařízení vygenerovanou hardwarem klávesnice.
  • Přeložený znak Unicode™ nebo ANSI.
  • Proměnná příznaku označující stav řídicích kláves (klávesy ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK a CAPS LOCK) a označující, jestli byla stisknuta rozšířená klávesa. Vylepšené klávesy pro klávesnice IBM® 101-key a 102-key jsou INS, DEL, HOME, END, PAGE UP, PAGE DOWN a šipkové klávesy v clusterech vlevo od numerické klávesnice a dělicí klávesy (/) a ENTER na numerické klávesnici.

Události myši

Události myši se generují vždy, když uživatel přesune myš nebo stiskne nebo uvolní jedno z tlačítek myši. Události myši se umístí do vstupní vyrovnávací paměti pouze v případě, že jsou splněny následující podmínky:

  • Režim vstupu konzoly je nastavený na ENABLE_MOUSE_INPUT (výchozí režim).
  • V okně konzoly je fokus klávesnice.
  • Ukazatel myši je uvnitř ohraničení okna konzoly.

Pokud je vstupní událost událostí myši, člen události v INPUT_RECORD je struktura MOUSE_EVENT_RECORD obsahující následující informace:

  • Souřadnice ukazatele myši z hlediska řádku a sloupce znakové buňky v souřadnicovém systému vyrovnávací paměti konzoly.
  • Proměnná příznaku označující stav tlačítek myši.
  • Proměnná příznaku označující stav řídicích kláves (ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK a CAPS LOCK) a označující, jestli byla stisknuta rozšířená klávesa. Vylepšené klávesy pro klávesnice IBM 101-key a 102-key jsou INS, DEL, HOME, END, PAGE UP, PAGE DOWN a šipkové klávesy v clusterech vlevo od numerické klávesnice a dělicí klávesy (/) a ENTER na numerické klávesnici.
  • Proměnná příznaku označující, jestli byla událost normálním stisknutím tlačítka nebo uvolněním tlačítka, událostí pohybu myši nebo druhým kliknutím na událost poklikání.

Poznámka:

Souřadnice polohy myši jsou v závislosti na vyrovnávací paměti obrazovky konzoly, nikoli okna konzoly. Vyrovnávací paměť obrazovky byla pravděpodobně posunována vzhledem k oknem, takže v levém horním rohu okna nemusí být souřadnice (0,0) vyrovnávací paměti obrazovky konzoly. Chcete-li určit souřadnice myši vzhledem ke souřadnicím systému okna, odečtěte souřadnice původu okna od souřadnic umístění myši. Pomocí funkce GetConsoleScreenBufferInfo určete souřadnice původu okna.

Člen dwButtonState struktury MOUSE_EVENT_RECORD má bit odpovídající každému tlačítku myši. Bit je 1, pokud je tlačítko dolů a 0, pokud je tlačítko nahoru. Událost uvolnění tlačítka je zjištěna hodnotou 0 pro člen dwEventFlagsMOUSE_EVENT_RECORD a změna v bitu tlačítka od 1 do 0. Funkce GetNumberOfConsoleMouseButtons načte počet tlačítek myši.

události Buffer-Resizing

Nabídka okna konzoly umožňuje uživateli změnit velikost aktivní vyrovnávací paměti obrazovky; tato změna vygeneruje událost změny velikosti vyrovnávací paměti. Události změny velikosti vyrovnávací paměti se umístí do vstupní vyrovnávací paměti, pokud je vstupní režim konzoly nastavený na ENABLE_WINDOW_INPUT (to znamená, že výchozí režim je zakázaný).

Pokud je vstupní událost událostí změny velikosti vyrovnávací paměti, člen událostiINPUT_RECORD je WINDOW_BUFFER_SIZE_RECORD struktura obsahující novou velikost vyrovnávací paměti obrazovky konzoly vyjádřenou ve sloupcích a řádcích buněk znaků.

Pokud uživatel zmenšuje velikost vyrovnávací paměti obrazovky konzoly, dojde ke ztrátě všech dat v zahozené části vyrovnávací paměti.

Změny velikosti vyrovnávací paměti konzoly v důsledku volání aplikace do funkce SetConsoleScreenBufferSize se negenerují jako události změny velikosti vyrovnávací paměti.