Prima di iniziare a simulare la pressione dei tasti della tastiera e del mouse e i movimenti di quest'ultimo, e' importante sapere come intercettare tali eventi. A questo scopo faremo uso di una funzione presente nella libreria user32.dll di windows: il suo nome e' GetAsyncKeyState, e ci fornisce informazioni sullo stato di un pulsante, se e' premuto oppure no. La sua dichiarazione avviene come nel vecchio vb6:

Declare Auto Function GetAsyncKeyState Lib "user32.dll" (ByVal _
vKey As Int32) As Int16

Il parametro accettato costituisce il codice numerico del tasto da controllare. Per sapere il codice di un tasto, e' possibile utilizzare un enumeratore davvero comodo: System.Windows.Forms.Keys. Ad esempio, per sapere se in un determinato momento il tasto A e' premuto, scriveremo:

If GetAsyncKeyState(Keys.A) = -32767 Then
  MsgBox("A e' premuto!", MsgBoxStyle.Information)
Else
  MsgBox("A non e' premuto!", MsgBoxStyle.Information)
End If

Tuttavia, poiche' la funzione restituisce lo stato di un pulsante nel momento in cui viene chiamata, e' opportuno inserire tale codice nell'evento Tick di un timer, allo scopo di monitorarne le modifiche.

Per simulare la pressione di un pulsante della tastiera, dovremo fare uso di questa procedura:

Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)

Solo il primo parametro e' importante: e' il codice del tasto da premere. Tuttavia, anche il secondo parametro, bScan, puo' giocare un ruolo importante: infatti esso comunica quale azione debba essere eseguita sul pulsante, se premuto, rilasciato o entrambi (0).

Per simulare la pressione di un pulsante del mouse, dovremo fare uso di questa procedura:

Declare Auto Sub mouse_event Lib "user32.dll" (ByVal dwFlags As Int32, _
ByVal dx As Int32, ByVal dy As Int32, ByVal cButtons As Int32, _
ByVal dwExtraInfo As IntPtr)

Possiamo prendere come significativi i primi tre parametri: il primo indica quale pulsante e come deve essere premuto, mentre il secondo ed il terzo, se diversi da 0, specificano le coordinate a cui deve avvenire il click. Se queste ultime sono 0, il click sara' generato nella posizione in cui il mouse si trova. Questo enumeratore, specifica i possibili valori di dwFlags:

Public Enum MouseEventTFlags
  LEFTDOWN = 2
  LEFTUP = 4
  MIDDLEDOWN = 32
  MIDDLEUP = 64
  RIGHTDOWN = 8
  RIGHTUP = 16
End Enum


Per simulare il movimento del mouse e' sufficiente far uso della classe Cursor, nella quale si puo' modificare la proprieta' Location a proprio piacimento, cambiando quindi la posizione del mouse sullo schermo.