Differenze tra le versioni di "Lanciare un programma senza Shell, ma da una finestra di un Terminale"

Da Gambas-it.org - Wikipedia.
 
(23 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per poter lanciare un programma senza usare l'istruzione ''Shell'' o ''Exec'', bensì da un ''Terminale'', si potrà adottare un codice come quello che segue, attivando innanzitutto il componente ''gb.desktop'' ed usando, così, il metodo ''.SendKeys'' della Classe ''Desktop''.
+
Per poter lanciare un programma <SPAN Style="text-decoration:underline">senza</span> usare l'istruzione ''Shell'' o ''Exec'', bensì da un ''Terminale'', si potrà adottare un codice come quello che segue, attivando innanzitutto il componente ''gb.desktop'' e usando, così, il Metodo ".SendKeys()" della Classe ''Desktop''.
<BR>Il metodo ''Desktop.SendKeys()'' simula da codice effettivamente l'invio di caratteri attraverso la tastiera (come se si fosse fatta pressione sui tasti alfanumerici della tastiera in propria dotazione).
+
<BR>Il Metodo "Desktop.SendKeys()" simula da codice effettivamente l'invio di caratteri attraverso la tastiera (come se si fosse fatta pressione sui tasti alfanumerici della tastiera in propria dotazione).
  
Nell'esempio che segue si lancerà da Terminale - senza ''Shell'' - il programma di scrittura "''Gedit''":
+
Nell'esempio che segue si lancerà da Terminale - <SPAN Style="text-decoration:underline">senza ''Shell''</span> - ad esempio il programma di scrittura ''Gedit'':
  '''Public''' Sub Button1_Click()   
+
  Public Sub Button1_Click()   
 
        
 
        
  <FONT color=gray>' ''Apro la finestra di un Terminale:''</font>
+
  <FONT color=gray>' ''Apre la finestra del Terminale:''</font>
    Desktop.OpenTerminal
+
  Desktop.OpenTerminal
 
        
 
        
  '''End'''
+
  End
 
    
 
    
 
    
 
    
  '''Public''' Sub Button2_Click()     
+
  Public Sub Button2_Click()     
 
        
 
        
 
   Dim c As Integer[]   
 
   Dim c As Integer[]   
 
    
 
    
  <FONT color=gray>' ''Trova l'identificativo della finestra del Terminale aperta prima...:''</font>
+
  <FONT color=gray>' ''Trova il numero identificativo della finestra del Terminale, che prima è stata aperta, inserendo nel 1° argomento del Metodo "FindWindow()" il "nome <SPAN Style="text-decoration:underline">esatto</span> della finestra" del Terminale <SPAN Style="text-decoration:underline">'''oppure'''</span> inserendo nel 2° argomento il "nome <SPAN Style="text-decoration:underline">esatto</span> del programma Terminale". A tal fine si potrà usare anche il carattere ''jolly'' dell'asterisco "*" (all'inizio e/o alla fine del nome).''</font>
  c = Desktop.FindWindow("Terminale")   
+
  c = Desktop.FindWindow("<FONT color=gray>''nome_esatto_della_finestra_del_terminale''</font>", "<FONT color=gray>''nome_esatto_del_terminale''</font>", Null)
 
+
   
<FONT color=gray>' ''...e procede al suo inglobamento come stratagemma,''   
+
  If c.Count > 0 Then
  ' ''affinché possa successivamente attribuirle il "Focus":''</font>
+
  <FONT color=gray>' ''Attribuisce il "Focus" alla finestra del Terminale:''</font>
  Embedder1.Embed(c[0]
+
    Desktop.ActiveWindow = c[c.Max]
 
+
  <FONT color=gray>' ''Il ciclo garantisce che la finestra del Terminale risulti quella che ha il "focus":''</font>
  Wait 0.5 
+
    While Desktop.ActiveWindow <> c[c.Max]
 
+
      Wait 0.01
  <FONT color=gray>' ''Attribuisce il "Focus" alla finestra del Terminale ora inglobato:''</font>
+
    Wend
  Embedder1.SetFocus 
+
    With Desktop
 
 
  With Desktop
 
 
  <FONT color=gray>' ''Scrive nel Terminale la parola "gedit":''</font>
 
  <FONT color=gray>' ''Scrive nel Terminale la parola "gedit":''</font>
    .SendKeys("{gedit}")
+
      .SendKeys("gedit")
 
  <FONT color=gray>' ''Simula l'emissione del comando di "Invio":''</font>
 
  <FONT color=gray>' ''Simula l'emissione del comando di "Invio":''</font>
    .SendKeys("[Return]")
+
      .SendKeys("[Return]")
  End With
+
    End With
 +
<FONT color=gray>' ''Ma più brevemente le due precedenti righe potranno essere sostituite dalla seguente, che prevede alla fine il carattere di "nuova linea a capo":''
 +
'  '''Desktop.SendKeys("gedit\n")'''</font>
 +
  Endif
 
   
 
   
  <FONT color=gray>' ''Ma più brevemente le due precedenti righe potranno essere sostituite dalla seguente,
+
  End
' ''che prevede alla fine il carattere di "nuova linea a capo":''
 
    '''Desktop.SendKeys("{gedit\n}")'''</font>
 
 
 
'''End'''
 

Versione attuale delle 12:36, 23 nov 2023

Per poter lanciare un programma senza usare l'istruzione Shell o Exec, bensì da un Terminale, si potrà adottare un codice come quello che segue, attivando innanzitutto il componente gb.desktop e usando, così, il Metodo ".SendKeys()" della Classe Desktop.
Il Metodo "Desktop.SendKeys()" simula da codice effettivamente l'invio di caratteri attraverso la tastiera (come se si fosse fatta pressione sui tasti alfanumerici della tastiera in propria dotazione).

Nell'esempio che segue si lancerà da Terminale - senza Shell - ad esempio il programma di scrittura Gedit:

Public Sub Button1_Click()  
     
' Apre la finestra del Terminale:
 Desktop.OpenTerminal
      
End
 
 
Public Sub Button2_Click()    
      
 Dim c As Integer[]  
 
' Trova il numero identificativo della finestra del Terminale, che prima è stata aperta, inserendo nel 1° argomento del Metodo "FindWindow()" il "nome esatto della finestra" del Terminale oppure inserendo nel 2° argomento il "nome esatto del programma Terminale". A tal fine si potrà usare anche il carattere jolly dell'asterisco "*" (all'inizio e/o alla fine del nome).
 c = Desktop.FindWindow("nome_esatto_della_finestra_del_terminale", "nome_esatto_del_terminale", Null)

 If c.Count > 0 Then
' Attribuisce il "Focus" alla finestra del Terminale:
   Desktop.ActiveWindow = c[c.Max]
' Il ciclo garantisce che la finestra del Terminale risulti quella che ha il "focus":
   While Desktop.ActiveWindow <> c[c.Max]
     Wait 0.01
   Wend
   With Desktop
' Scrive nel Terminale la parola "gedit":
     .SendKeys("gedit")
' Simula l'emissione del comando di "Invio":
     .SendKeys("[Return]")
   End With
' Ma più brevemente le due precedenti righe potranno essere sostituite dalla seguente, che prevede alla fine il carattere di "nuova linea a capo":
'  Desktop.SendKeys("gedit\n")
 Endif

End