Spostare da codice il mouse sullo schermo

Da Gambas-it.org - Wikipedia.

Per poter spostare da codice sia orizzontalmente che verticalmente il puntatore del mouse all'interno dello schermo, si dovrà agire sul suo file-device /dev/input/mouse... .


Mostriamo di seguito un esempio, nel quale il puntatore viene spostato ripetutamente sia verso destra che in basso:

Public Struct timeval  
  tv_sec As Long     ' secondi
  tv_usec As Long    ' microsecondi
End Struct  
 
Public Struct input_event  
  tv As Struct Timeval  
  type As Short  
  code As Short  
  value As Integer  
End Struct  
 
Private Const EV_SYN As Short = 0  
Private Const EV_REL As Short = 2  
Private Const REL_X As Short = 0  
Private Const REL_Y As Short = 1  
Private Const SYN_REPORT As Short = 0  
 
 
Public Sub Main()  
 
 Dim eventoX, eventoY, fine_evento As New Input_event  
 Dim s As String  
 Dim ss As String[]  
 Dim fl As File  
 Dim b As Byte  
  
 
' Individuiamo esattamente il file-device del mouse:
  s = File.Load("/proc/bus/input/devices")  
  s = Replace$(s, "\n", " ")  
  ss = Split(s, " ", "", True)  
    
  For b = 0 To ss.Max  
' Individuiamo la riga contenente il testo "Handlers=mouse...",  
' e quindi raccogliamo l'ultima parola della riga medesima.
' Tale parola sarà in nome del file-device del mouse:
    If ss[b] Like "Handlers=mouse*" Then s = ss[b + 1]  
  Next  
 
 '''''''''''
 
 
' Per leggere il file-device individuato, bisogna avere i necessari permessi.
' Pertanto, se non sono stati modificati i permessi del file-device, allora vengono modificati
' (bisognerà inserire la propria password !):
  If Stat("/dev/input" &/ s).Auth <> "rwsrwxrwx" Then  
    Shell "echo 'password' | sudo -S chmod 4777 /dev/input"  &/ s Wait  
  Endif  
    
  
  fl = Open "/dev/input"  &/ s For Write  
  If IsNull(fl) Then Error.Raise("Impossibile aprire il file-device !")  
  
' Assegna i dati per lo spostamento orizzontale del mouse sullo schermo:
  With eventoX  
    .type = EV_REL  
    .code = REL_X  
' Si assegna un valore positivo per lo spostamento a destra,
' un valore negativo per lo spostamento a sinistra:
    .value = 100  
 End With  
  
' Assegna i dati per lo spostamento verticale del mouse sullo schermo:
  With eventoY  
    .type = EV_REL  
    .code = REL_Y  
' Si assegna un valore positivo per lo spostamento in basso,
' un valore negativo per lo spostamento in alto:
    .value = 100  
  End With  
  
  With fine_evento  
    .type = EV_SYN  
    .code = SYN_REPORT  
    .value = 0  
  End With  
  
  For b = 1 To 5  
    Write #fl, eventoX As Input_event        ' Sposta il mouse orizzontalmente
    Write #fl, fine_evento As Input_event    ' Mostra lo spostamento del mouse 
    Wait 1  
    Write #fl, eventoY As Input_event        ' Sposta il mouse verticalmente
    Write #fl, fine_evento As Input_event    ' Mostra lo spostamento del mouse
    Wait 1  
  Next  
  
' Va in chiusura:
  fl.Close  
 
End