Differenze tra le versioni di "Spostare da codice il mouse sullo schermo"

Da Gambas-it.org - Wikipedia.
 
(10 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
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...'' .
+
Per poter spostare da codice sia orizzontalmente che verticalmente il puntatore del mouse all'interno dello schermo, si potranno adottare almeno due modalità.
  
 +
===Uso del Metodo ".Move()" della Classe ''Mouse''===
 +
Si potrà utilizzare il Metodo ".Move()" della Classe ''Mouse'', che accetta due parametri formali, i quali rappresentano le coordinate "x" e "y" dall'angolo alto sinistro dello schermo.
 +
 +
Mostriamo un esempio pratico, nel quale il puntatore del mouse sarà spostato al centro dello schermo:
 +
Public Sub Button1_Click()
 +
 
 +
  Mouse.Move(Screen.W / 2, Screen.H / 2)
 +
 
 +
End
 +
 +
 +
===Uso del file-device della periferica mouse===
 +
Quest'altra modalità prevede che agisca sul file-device ''/dev/input/mouse...'' del mouse. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
  
 
Mostriamo di seguito un esempio, nel quale il puntatore viene spostato ripetutamente sia verso destra che in basso:
 
Mostriamo di seguito un esempio, nel quale il puntatore viene spostato ripetutamente sia verso destra che in basso:
Riga 22: Riga 35:
 
    
 
    
 
    
 
    
  '''Public''' Sub Main()   
+
  Public Sub Main()   
 
    
 
    
 
   Dim eventoX, eventoY, fine_evento As New Input_event   
 
   Dim eventoX, eventoY, fine_evento As New Input_event   
   Dim s As String
+
   Dim s, pw As String   
  Dim ss As String[]  
 
 
   Dim fl As File   
 
   Dim fl As File   
 
   Dim b As Byte   
 
   Dim b As Byte   
 
    
 
    
 
 
 
  <FONT color=gray>' ''Individuiamo esattamente il file-device del mouse:''</font>
 
  <FONT color=gray>' ''Individuiamo esattamente il file-device del mouse:''</font>
  s = File.Load("/proc/bus/input/devices")   
+
  s = File.Load("/proc/bus/input/devices")   
   s = Replace$(s, "\n", " ")   
+
    
  ss = Split(s, " ", "", True)  
+
<FONT color=gray>' ''Individuiamo la riga contenente il testo "Handlers=mouse..."; l'ultima parola della riga sarà il nome del file-device del mouse:''</font>
 +
  s = Scan(s, "*Handlers=mouse* * *")[2]
 +
 
 +
<FONT color=gray>' ''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 !):''</font>
 +
  Input pw
 +
 
 +
  If Stat("/dev/input" &/ s).Auth <> "rwsrwxrwx" Then  
 +
    Shell "echo " & pw & " | sudo -S chmod 4777 /dev/input" &/ s Wait 
 +
  Endif  
 
      
 
      
  For b = 0 To ss.Max 
 
<FONT color=gray>' ''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:''</font>
 
    If ss[b] Like "Handlers=mouse*" Then s = ss[b + 1] 
 
  Next 
 
 
    
 
    
   <FONT color=gray>''''''''''''''''</font>
+
   fl = Open "/dev/input" &/ s For Write   
 
+
  If IsNull(fl) Then Error.Raise("Impossibile aprire il file-device !")   
 
 
<FONT color=gray>' ''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 !):''</font>
 
  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 !")   
 
 
    
 
    
 
  <FONT color=gray>' ''Assegna i dati per lo spostamento orizzontale del mouse sullo schermo:''</font>
 
  <FONT color=gray>' ''Assegna i dati per lo spostamento orizzontale del mouse sullo schermo:''</font>
  With eventoX   
+
  With eventoX   
    .type = EV_REL   
+
    .type = EV_REL   
    .code = REL_X   
+
    .code = REL_X   
  <FONT color=gray>' ''Si assegna un valore positivo per lo spostamento a destra,''
+
  <FONT color=gray>' ''Si assegna un valore positivo per lo spostamento a destra, un valore negativo per lo spostamento a sinistra:''</font>
' ''un valore negativo per lo spostamento a sinistra:''</font>
+
    .value = 100   
    .value = 100   
 
 
   End With   
 
   End With   
 
    
 
    
 
  <FONT color=gray>' ''Assegna i dati per lo spostamento verticale del mouse sullo schermo:''</font>
 
  <FONT color=gray>' ''Assegna i dati per lo spostamento verticale del mouse sullo schermo:''</font>
  With eventoY   
+
  With eventoY   
    .type = EV_REL   
+
    .type = EV_REL   
    .code = REL_Y   
+
    .code = REL_Y   
  <FONT color=gray>' ''Si assegna un valore positivo per lo spostamento in basso,''
+
  <FONT color=gray>' ''Si assegna un valore positivo per lo spostamento in basso, un valore negativo per lo spostamento in alto:''</font>
' ''un valore negativo per lo spostamento in alto:''</font>
+
    .value = 100   
    .value = 100   
+
  End With   
  End With   
 
 
    
 
    
  With fine_evento   
+
  With fine_evento   
    .type = EV_SYN   
+
    .type = EV_SYN   
    .code = SYN_REPORT   
+
    .code = SYN_REPORT   
    .value = 0   
+
    .value = 0   
  End With   
+
  End With   
 
    
 
    
  For b = 1 To 5   
+
  For b = 1 To 5   
    Write #fl, eventoX As Input_event        <FONT color=gray>' ''Sposta il mouse orizzontalmente''</font>
+
    Write #fl, eventoX As Input_event        <FONT color=gray>' ''Sposta il mouse orizzontalmente''</font>
    Write #fl, fine_evento As Input_event    <FONT color=gray>' ''Mostra lo spostamento del mouse''</font>  
+
    Write #fl, fine_evento As Input_event    <FONT color=gray>' ''Mostra lo spostamento del mouse''</font>  
    Wait 1   
+
    Wait 1   
    Write #fl, eventoY As Input_event        <FONT color=gray>' ''Sposta il mouse verticalmente''</font>
+
    Write #fl, eventoY As Input_event        <FONT color=gray>' ''Sposta il mouse verticalmente''</font>
    Write #fl, fine_evento As Input_event    <FONT color=gray>' ''Mostra lo spostamento del mouse''</font>
+
    Write #fl, fine_evento As Input_event    <FONT color=gray>' ''Mostra lo spostamento del mouse''</font>
    Wait 1   
+
    Wait 1   
  Next   
+
  Next   
 
    
 
    
 
  <FONT color=gray>' ''Va in chiusura:''</font>
 
  <FONT color=gray>' ''Va in chiusura:''</font>
  fl.Close   
+
  fl.Close   
 
    
 
    
  '''End'''
+
  End
 +
 
 +
 
 +
 
 +
=Note=
 +
[1] Vedere anche: [[Intercettare i dati del mouse dai file-device mouse, mice, event]]
 +
 
 +
 
 +
 
 +
=Riferimenti=
 +
* https://www.kernel.org/doc/Documentation/input/event-codes.txt
 +
* /usr/include/linux/input-event-codes.h

Versione attuale delle 20:55, 27 nov 2023

Per poter spostare da codice sia orizzontalmente che verticalmente il puntatore del mouse all'interno dello schermo, si potranno adottare almeno due modalità.

Uso del Metodo ".Move()" della Classe Mouse

Si potrà utilizzare il Metodo ".Move()" della Classe Mouse, che accetta due parametri formali, i quali rappresentano le coordinate "x" e "y" dall'angolo alto sinistro dello schermo.

Mostriamo un esempio pratico, nel quale il puntatore del mouse sarà spostato al centro dello schermo:

Public Sub Button1_Click()
 
 Mouse.Move(Screen.W / 2, Screen.H / 2)
  
End


Uso del file-device della periferica mouse

Quest'altra modalità prevede che agisca sul file-device /dev/input/mouse... del mouse. [nota 1]

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, pw As String  
 Dim fl As File  
 Dim b As Byte  
  
' Individuiamo esattamente il file-device del mouse:
 s = File.Load("/proc/bus/input/devices")  
  
' Individuiamo la riga contenente il testo "Handlers=mouse..."; l'ultima parola della riga sarà il nome del file-device del mouse:
 s = Scan(s, "*Handlers=mouse* * *")[2]
  
' 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 !):
 Input pw
  
 If Stat("/dev/input" &/ s).Auth <> "rwsrwxrwx" Then  
   Shell "echo " & pw & " | 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


Note

[1] Vedere anche: Intercettare i dati del mouse dai file-device mouse, mice, event


Riferimenti