Simulare la pressione dei tasti
Per simulare la pressione dei pulsanti della tastiera è necessario usare la seguente dichiarazione API:
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
con le seguenti costanti:
Const KEYEVENTF_EXTENDEDKEY = &H1 'pressione del tasto (keyDown)
Const KEYEVENTF_KEYUP = &H2 'rilascio del tasto premuto (keyUp)
La funzione keybd_event utilizza come argomenti il codice virtuale del tasto da “premere e/o rilasciare” (bVk), il codice di scansione del tasto (bScan), un flag per indicare se il tasto deve essere premuto o rilasciato (dwFlags) e, per ultimo, eventuali informazioni opzionali (dwExtraInfo) non usate dal Visual Basic.
L’esempio di codice seguente mostra come utilizzare la funzione keybd_event per scrivere “API”, simulando la pressione dei tasti della tastiera, in una textbox:
Sub ScriviText()
Text1.SetFocus
keybd_event vbKeyA, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "A"
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "A"
keybd_event vbKeyP, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "P"
keybd_event vbKeyP, 0, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "P"
keybd_event vbKeyI, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "I"
keybd_event vbKeyI, 0, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "I"
End Sub
Allo stesso modo è possibile cambiare lo stato del tasto “CapsLock”
Sub InvertiCapsLock()
keybd_event vbKeyCapital, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "CapsLock"
keybd_event vbKeyCapital, 0, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "CapsLock"
End Sub
Essendo il tasto CapsLock, al pari dei tasti NumLok e ScrollLock, un tasto “interruttore”, la sub InvertiCapsLock ne inverte la posizione. Per determinare anticipatamente lo stato di questi tasti è possibile usare la funzione GetKeyState
In questo ultimo esempio, invece, viene descritto come simulare un “PrintScreen” in modo da copiare in memoria (clipboard) l’intero contenuto dello schermo o della sola finestra attiva:
Sub PrintScreen()
'copia nella clipboard l'intero contenuto dello schermo
keybd_event vbKeySnapshot, 1, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "Stamp" o "Print"
keybd_event vbKeySnapshot, 1, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "Stamp" o "Print"
‘istruzioni da utilizzare in alternativa alle precedenti
'copia nella clipboard il solo contenuto della finestra attiva
keybd_event vbKeySnapshot, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione dei tasti "Alt" +"Stamp" o "Print"
keybd_event vbKeySnapshot, 1, KEYEVENTF_KEYUP, 0 'simula il rilascio dei tasti "Alt" +"Stamp" o "Print"
End Sub
ricordarsi sempre di usare, dopo la prima chiamata alla funzione con l’argomento bScan = KEYEVENTF_EXTENDEDKEY (premi tasto), una seconda chiamata alla funzione con l’argomento bScan = KEYEVENTF_KEYUP (rilascia tasto) altrimenti la tastiera si trova nelle condizioni di simulare continuamente la pressione del tasto.
consultare la guida in linea di Visual Basic alla voce “tasti, costanti” per avere la lista completa dei codici virtuali dei tasti.