Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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.