Megosztás:


Konzol bemeneti puffere

Minden konzol rendelkezik egy bemeneti pufferrel, amely a bemeneti eseményrekordok üzenetsorát tartalmazza. Ha a konzol ablakában van a billentyűzetfókusz, a konzol az egyes bemeneti eseményeket (például egyetlen billentyűleütést, az egér mozgását vagy az egérgomb kattintását) bemeneti rekordként formázja, amelyet a konzol bemeneti pufferében helyez el.

Az alkalmazások közvetve hozzáférhetnek a konzol bemeneti pufferéhez a magas szintű konzol I/O-függvényeivel, vagy közvetlenül az alacsony szintű konzol bemeneti függvényeivel. A magas szintű bemeneti függvények szűrik és feldolgozzák az adatokat a bemeneti pufferben, és csak bemeneti karakterekből álló adatfolyamot ad vissza. Az alacsony szintű bemeneti függvények lehetővé teszik, hogy az alkalmazások közvetlenül a konzol bemeneti pufferéből olvassák be a bemeneti rekordokat, vagy bemeneti rekordokat helyezzenek a bemeneti pufferbe. Ha meg szeretne nyitni egy fogópontot a konzol bemeneti pufferében, adja meg a CONIN$ értéket a CreateFile függvény hívásában.

A bemeneti rekord olyan struktúra, amely információkat tartalmaz az esemény típusáról (billentyűzet, egér, ablak átméretezése, fókusz vagy menüesemény), valamint az esemény konkrét részleteiről. A INPUT_RECORD struktúrában lévő EventType-tag azt jelzi, hogy a rekord melyik eseménytípust tartalmazza.

A fókusz- és menüesemények a konzol bemeneti pufferébe kerülnek a rendszer belső használatra, és az alkalmazásnak figyelmen kívül kell hagynia.

Billentyűzetes események

A billentyűzetesemények akkor jönnek létre, amikor bármelyik billentyűt lenyomják vagy felszabadítják; ez magában foglalja a vezérlőkulcsokat is. Az ALT billentyűnek azonban különleges jelentése van a rendszer számára, ha lenyomja és kiadja anélkül, hogy egy másik karakterrel kombinálja, és nem továbbítja azt az alkalmazásnak. Emellett a CTRL+C billentyűkombináció nem lesz átadva, ha a bemeneti fogópont feldolgozott módban van.

Ha a bemeneti esemény billentyűleütés, a INPUT_RECORDeseménytagja egy KEY_EVENT_RECORD struktúra, amely a következő információkat tartalmazza:

  • Logikai érték, amely azt jelzi, hogy a kulcsot lenyomták vagy feloldották.
  • Ismétlődő szám, amely egynél nagyobb lehet egynél, ha egy kulcs le van tartva.
  • A virtuális kulcs kódja, amely az adott kulcsot eszközfüggetlen módon azonosítja.
  • A virtuális beolvasási kód, amely a billentyűzethardver által létrehozott eszközfüggő értéket jelzi.
  • A lefordított Unicode™ vagy ANSI karakter.
  • A vezérlőkulcsok állapotát jelző jelző változó (ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK és CAPS LOCK billentyűk), amely jelzi, hogy egy továbbfejlesztett kulcs van-e lenyomva. Az IBM® 101- és 102-billentyűs billentyűzetek továbbfejlesztett kulcsai az INS, DEL, HOME, END, PAGE UP, PAGE DOWN és nyílbillentyűk a fürtökben a numerikus billentyűzet bal oldalán, valamint az osztás (/) és az ENTER billentyűk a numerikus billentyűzeten.

Egér Események

Az egéresemények akkor jönnek létre, amikor a felhasználó mozgatja az egeret, vagy lenyomja vagy felengedi az egérgombok egyikét. Az egéresemények csak akkor kerülnek a bemeneti pufferbe, ha teljesülnek a következő feltételek:

  • A konzol bemeneti módja ENABLE_MOUSE_INPUT (az alapértelmezett mód).
  • A konzolablakban van a billentyűzetfókusz.
  • Az egérmutató a konzol ablakának szegélyén belül található.

Ha a bemeneti esemény egéresemény, a INPUT_RECORDeseménytagja egy MOUSE_EVENT_RECORD szerkezet, amely a következő információkat tartalmazza:

  • Az egérmutató koordinátái a konzol képernyőpufferének koordinátarendszerében lévő karaktercellás sor és oszlop szempontjából.
  • Az egérgombok állapotát jelző változó.
  • A vezérlőkulcsok állapotát jelző jelölőváltozó (ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK és CAPS LOCK), amely jelzi, hogy egy továbbfejlesztett kulcs be van-e nyomva. Az IBM 101- és 102-billentyűs billentyűzetek továbbfejlesztett kulcsai az INS, DEL, HOME, END, PAGE UP, PAGE DOWN és nyílbillentyűk a fürtökben a numerikus billentyűzet bal oldalán, valamint az osztás (/) és az ENTER billentyűk a numerikus billentyűzeten.
  • Egy jelzőváltozó, amely azt jelzi, hogy az esemény normál gombnyomásos vagy gombkioldó esemény, egérmozgatási esemény vagy dupla kattintásos esemény második kattintása volt-e.

Megjegyzés:

Az egér helyzetkoordinátái a konzol képernyőpufferében vannak, nem a konzolablakban. Előfordulhat, hogy a képernyőpuffert az ablakhoz képest görgették, így az ablak bal felső sarkában nem feltétlenül a konzol képernyőpufferének (0,0) koordinátája látható. Az egér koordinátáinak az ablak koordinátarendszeréhez viszonyított meghatározásához vonja ki az ablak forráskoordinátáit az egér helyzetkoordinátáiból. Használja a GetConsoleScreenBufferInfo függvényt az ablak forráskoordinátáinak meghatározásához.

A MOUSE_EVENT_RECORD struktúra dwButtonState tagja egy kicsit megfelel az egyes egérgombnak. A bit 1, ha a gomb le van állítva, és 0, ha a gomb fel van állítva. A gombkioldási eseményt a MOUSE_EVENT_RECORD dwEventFlags tagjának 0 értéke, a gomb bitjének 1-ről 0-ra történő módosítása észleli. A GetNumberOfConsoleMouseButtons függvény lekéri az egérgombok számát.

Buffer-Resizing események

A konzolablak menüje lehetővé teszi a felhasználó számára az aktív képernyőpuffer méretének módosítását; ez a módosítás puffer-átméretező eseményt hoz létre. A puffer-átméretező események akkor kerülnek a bemeneti pufferbe, ha a konzol bemeneti módja ENABLE_WINDOW_INPUT (vagyis az alapértelmezett mód le van tiltva).

Ha a bemeneti esemény puffer-átméretezési esemény, a INPUT_RECORDeseménytagja egy WINDOW_BUFFER_SIZE_RECORD szerkezet, amely a konzol képernyőpufferének új méretét tartalmazza, karaktercellás oszlopokban és sorokban kifejezve.

Ha a felhasználó csökkenti a konzol képernyőpufferének méretét, a puffer elvetett részében lévő adatok elvesznek.

A setConsoleScreenBufferSize függvény alkalmazáshívásai miatt a konzol képernyőpufferméretének módosítása nem puffer-átméretező eseményként jön létre.