Buffer di input della console
Ogni console ha un buffer di input che contiene una coda di record eventi di input. Quando la finestra di una console ha lo stato attivo della tastiera, una console formatta ogni evento di input (ad esempio una singola sequenza di tasti, uno spostamento del mouse o un clic con il pulsante del mouse) come record di input che inserisce nel buffer di input della console.
Le applicazioni possono accedere indirettamente al buffer di input di una console usando le funzioni di I/O della console di alto livello o direttamente usando le funzioni di input della console di basso livello. Le funzioni di input di alto livello filtrano ed elaborano i dati nel buffer di input, restituendo solo un flusso di caratteri di input. Le funzioni di input di basso livello consentono alle applicazioni di leggere i record di input direttamente dal buffer di input di una console o di inserire i record di input nel buffer di input. Per aprire un handle nel buffer di input di una console, specificare il valore CONIN$ in una chiamata alla funzione CreateFile .
Un record di input è una struttura contenente informazioni sul tipo di evento che si è verificato (tastiera, mouse, ridimensionamento della finestra, stato attivo o evento di menu) e dettagli specifici sull'evento. Il membro EventType in una struttura INPUT_RECORD indica quale tipo di evento è contenuto nel record.
Gli eventi di stato attivo e di menu vengono inseriti nel buffer di input di una console per l'uso interno del sistema e devono essere ignorati dalle applicazioni.
Eventi della tastiera
Gli eventi della tastiera vengono generati quando un tasto viene premuto o rilasciato; sono inclusi i tasti di controllo. Tuttavia, il tasto ALT ha un significato speciale per il sistema quando viene premuto e rilasciato senza essere combinato con un altro carattere e non viene passato all'applicazione. Inoltre, la combinazione di tasti CTRL+C non viene passata se l'handle di input è in modalità elaborata.
Se l'evento di input è una sequenza di tasti, il membro Event in INPUT_RECORD è una struttura KEY_EVENT_RECORD contenente le informazioni seguenti:
- Valore booleano che indica se il tasto è stato premuto o rilasciato.
- Numero di ripetizioni che può essere maggiore di uno quando si tiene premuta una chiave.
- Codice della chiave virtuale, che identifica la chiave specificata in modo indipendente dal dispositivo.
- Codice di analisi virtuale, che indica il valore dipendente dal dispositivo generato dall'hardware della tastiera.
- Carattere Unicode™ o ANSI tradotto.
- Variabile flag che indica lo stato dei tasti di controllo (ALT, CTRL, MAIUSC, BLOC NUM, BLOC DI SCORRIMENTo e C piattaforma di strumenti analitici LOCK) e indica se è stato premuto un tasto avanzato. I tasti avanzati per le tastiere IBM® 101-key e 102-key sono i tasti INS, DEL, HOME, END, PAGE UP, PAGE DOWN e freccia nei cluster a sinistra del tastierino numerico e i tasti di divisione (/) e INVIO nel tastierino numerico.
Eventi del mouse
Gli eventi del mouse vengono generati ogni volta che l'utente sposta il mouse o preme o rilascia uno dei pulsanti del mouse. Gli eventi del mouse vengono inseriti nel buffer di input solo se vengono soddisfatte le condizioni seguenti:
- La modalità di input della console è impostata su ENABLE_MOUedizione Standard_INPUT (modalità predefinita).
- La finestra della console ha lo stato attivo della tastiera.
- Il puntatore del mouse si trova all'interno dei bordi della finestra della console.
Se l'evento di input è un evento del mouse, il membro Event in INPUT_RECORD è una struttura MOU edizione Standard_EVENT_RECORD contenente le informazioni seguenti:
- Coordinate del puntatore del mouse in termini di riga e colonna della cella di caratteri nel sistema di coordinate del buffer dello schermo della console.
- Variabile flag che indica lo stato dei pulsanti del mouse.
- Variabile flag che indica lo stato dei tasti di controllo (ALT, CTRL, MAIUSC, BLOC NUM, BLOCCO SCORRIMENTo e C piattaforma di strumenti analitici LOCK) e indica se è stato premuto un tasto avanzato. I tasti avanzati per le tastiere IBM 101-key e 102-key sono i tasti INS, DEL, HOME, END, PAGE UP, PAGE DOWN e freccia nei cluster a sinistra del tastierino numerico e i tasti di divisione (/) e INVIO nel tastierino numerico.
- Variabile flag che indica se l'evento è stato un evento normale di pressione o rilascio del pulsante, un evento di spostamento del mouse o il secondo clic di un evento con doppio clic.
Nota
Le coordinate della posizione del mouse sono in termini di buffer dello schermo della console, non della finestra della console. Il buffer dello schermo potrebbe essere stato scorrevole rispetto alla finestra, quindi l'angolo superiore sinistro della finestra non è necessariamente la coordinata (0,0) del buffer dello schermo della console. Per determinare le coordinate del mouse relative al sistema di coordinate della finestra, sottrarre le coordinate di origine della finestra dalle coordinate di posizione del mouse. Usare la funzione GetConsoleScreenBufferInfo per determinare le coordinate dell'origine della finestra.
Il membro dwButtonState della struttura MOU edizione Standard_EVENT_RECORD ha un bit corrispondente a ogni pulsante del mouse. Il bit è 1 se il pulsante è in basso e 0 se il pulsante è attivo. Un evento di rilascio del pulsante viene rilevato da un valore 0 per il membro dwEventFlags di MOU edizione Standard_EVENT_RECORD e una modifica del bit di un pulsante da 1 a 0. La funzione GetNumberOfConsoleMouseButtons recupera il numero di pulsanti del mouse.
Eventi di ridimensionamento del buffer
Il menu di una finestra della console consente all'utente di modificare le dimensioni del buffer dello schermo attivo; questa modifica genera un evento di ridimensionamento del buffer. Gli eventi di ridimensionamento del buffer vengono inseriti nel buffer di input se la modalità di input della console è impostata su ENABLE_WINDOW_INPUT ( ovvero la modalità predefinita è disabilitata).
Se l'evento di input è un evento di ridimensionamento del buffer, il membro Event di INPUT_RECORD è una struttura WINDOW_BUFFER_SIZE_RECORD contenente le nuove dimensioni del buffer dello schermo della console, espresso in colonne e righe di celle di caratteri.
Se l'utente riduce le dimensioni del buffer dello schermo della console, tutti i dati nella parte eliminata del buffer andranno persi.
Le modifiche apportate alle dimensioni del buffer dello schermo della console in seguito alle chiamate dell'applicazione alla funzione SetConsoleScreenBufferSize non vengono generate come eventi di ridimensionamento del buffer.