Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Elke console heeft een invoerbuffer die een wachtrij met invoergebeurtenisrecords bevat. Wanneer het venster van een console de toetsenbordfocus heeft, wordt elke invoergebeurtenis (zoals één toetsaanslag, een beweging van de muis of een muisklik) opgemaakt als invoerrecord die in de invoerbuffer van de console wordt geplaatst.
Toepassingen hebben indirect toegang tot de invoerbuffer van een console met behulp van de I/O-functies op hoog niveau of rechtstreeks met behulp van de consoleinvoerfuncties op laag niveau. De invoerfuncties op hoog niveau filteren en verwerken de gegevens in de invoerbuffer en retourneren alleen een stroom invoertekens. Met de invoerfuncties op laag niveau kunnen toepassingen invoerrecords rechtstreeks vanuit de invoerbuffer van een console lezen of invoerrecords in de invoerbuffer plaatsen. Als u een ingang wilt openen naar de invoerbuffer van een console, geeft u de CONIN$ -waarde op in een aanroep naar de functie CreateFile .
Een invoerrecord is een structuur met informatie over het type gebeurtenis dat heeft plaatsgevonden (toetsenbord, muis, venstergrootte wijzigen, focus of menugebeurtenis) en specifieke details over de gebeurtenis. Het EventType-lid in een INPUT_RECORD structuur geeft aan welk type gebeurtenis zich in de record bevindt.
Focus- en menugebeurtenissen worden in de invoerbuffer van een console geplaatst voor intern gebruik door het systeem en moeten worden genegeerd door toepassingen.
Toetsenbordevenementen
Toetsenbordgebeurtenissen worden gegenereerd wanneer een toets wordt ingedrukt of vrijgegeven; dit omvat besturingssleutels. De Alt-toets heeft echter speciale betekenis voor het systeem wanneer ingedrukt en vrijgegeven zonder te worden gecombineerd met een ander teken, en het wordt niet doorgegeven aan de toepassing. Ook wordt de toetsencombinatie Ctrl+C niet doorgegeven als de invoergreep zich in de verwerkte modus bevindt.
Als de invoer gebeurtenis een toetsaanslag is, is het gebeurtenislid in INPUT_RECORD een KEY_EVENT_RECORD structuur met de volgende informatie:
- Een Booleaanse waarde die aangeeft of de toets is ingedrukt of vrijgegeven.
- Een herhalingsaantal dat groter kan zijn dan één wanneer een toets wordt ingedrukt.
- De code van de virtuele sleutel, waarbij de opgegeven sleutel op een apparaatonafhankelijke manier wordt geïdentificeerd.
- De code van de virtuele scan, die de apparaatafhankelijke waarde aangeeft die door de toetsenbordhardware wordt gegenereerd.
- Het vertaalde Unicode- of ANSI-teken™.
- Een vlagvariabele die de status van de besturingstoetsen aangeeft (de toetsen Alt, Ctrl, Shift, NUM LOCK, SCROLL LOCK en CAPS LOCK) en waarmee wordt aangegeven of er een verbeterde toets is ingedrukt. Verbeterde toetsen voor de IBM® 101-toets en 102-toetstoetsen zijn de INS-, DEL-, HOME-, END-, PAGE UP-, PAGE DOWN- en pijltoetsen in de clusters links van het numerieke toetsenblok en de scheidingstoetsen (/) en ENTER-toetsen in het numerieke toetsenblok.
Muisevenementen
Muis gebeurtenissen worden gegenereerd wanneer de gebruiker de muis verplaatst of drukt of een van de muisknoppen loslaat. Muis gebeurtenissen worden alleen in de invoerbuffer geplaatst als aan de volgende voorwaarden wordt voldaan:
- De consoleinvoermodus is ingesteld op ENABLE_MOUSE_INPUT (de standaardmodus).
- Het consolevenster heeft de toetsenbordfocus.
- De muis aanwijzer bevindt zich binnen de grenzen van het consolevenster.
Als de invoer gebeurtenis een muis gebeurtenis is, is het gebeurtenislid in INPUT_RECORD een MOUSE_EVENT_RECORD structuur met de volgende informatie:
- De coördinaten van de muiswijzer in termen van de rij en kolom van de tekencel in het coördinaatsysteem van de consoleschermbuffer.
- Een vlagvariabele die de status van de muisknoppen aangeeft.
- Een vlagvariabele die de status van de besturingstoetsen aangeeft (Alt, Ctrl, Shift, NUM LOCK, SCROLL LOCK en CAPS LOCK) en die aangeeft of er een verbeterde toets is ingedrukt. Verbeterde toetsen voor de IBM 101-toets en 102-toetstoetsen zijn de INS-, DEL-, HOME-, END-, PAGE UP-, PAGE DOWN- en pijltoetsen in de clusters links van het numerieke toetsenblok en de scheidingstoetsen (/) en ENTER-toetsen in het numerieke toetsenblok.
- Een vlagvariabele die aangeeft of de gebeurtenis een normale gebeurtenis is die op een knop drukt of loslaat, een gebeurtenis voor de muisverplaatsing of de tweede klik op een gebeurtenis met dubbelklikken.
Opmerking
De coördinaten van de muispositie zijn in termen van de consoleschermbuffer, niet het consolevenster. De schermbuffer is mogelijk gescrold met betrekking tot het venster, dus de linkerbovenhoek van het venster is niet noodzakelijkerwijs de (0,0) coördinaat van de consoleschermbuffer. Als u de coördinaten van de muis ten opzichte van het coördinaatsysteem van het venster wilt bepalen, trekt u de coördinaten van de oorspronkelijke vensters af van de coördinaten van de muispositie. Gebruik de functie GetConsoleScreenBufferInfo om de coördinaten van de oorsprong van het venster te bepalen.
Het lid dwButtonState van de MOUSE_EVENT_RECORD structuur heeft een bit die overeenkomt met elke muisknop. De bit is 1 als de knop omlaag is en 0 als de knop omhoog is. Er wordt een knopreleasegebeurtenis gedetecteerd door een 0-waarde voor het lid dwEventFlags van MOUSE_EVENT_RECORD en een wijziging in de bit van een knop tussen 1 en 0. De functie GetNumberOfConsoleMouseButtons haalt het aantal knoppen op de muis op.
gebeurtenissen Buffer-Resizing
Met het menu van een consolevenster kan de gebruiker de grootte van de actieve schermbuffer wijzigen; met deze wijziging wordt een gebeurtenis voor buffergrootte gegenereerd. Gebeurtenissen voor het wijzigen van het formaat van de buffer worden in de invoerbuffer geplaatst als de invoermodus van de console is ingesteld op ENABLE_WINDOW_INPUT (de standaardmodus is uitgeschakeld).
Als de invoergebeurtenis een buffergrootte van een gebeurtenis is, is het gebeurtenislid van INPUT_RECORD een WINDOW_BUFFER_SIZE_RECORD structuur met de nieuwe grootte van de consoleschermbuffer, uitgedrukt in kolommen en rijen met tekens.
Als de gebruiker de grootte van de consoleschermbuffer vermindert, gaan alle gegevens in het genegeerde gedeelte van de buffer verloren.
Wijzigingen in de buffergrootte van het consolescherm als gevolg van toepassingsaanroepen naar de functie SetConsoleScreenBufferSize worden niet gegenereerd als gebeurtenissen voor het wijzigen van de buffergrootte.