Differenze tra le versioni di "Aprire un Terminale con Desktop.OpenTerminal e passargli una riga di comando"

Da Gambas-it.org - Wikipedia.
 
(3 versioni intermedie di uno stesso utente non sono mostrate)
Riga 32: Riga 32:
 
La linea di comando apparirà nel Terminale e potrà essere utilizzata efficacemente cliccando come di consueto sul tasto "''Invio''" della tastiera. Qualora si intenda attivare il comando nel Terminale immediatamente dopo la sua stampa, si aggiungerà il carattere escape "\n" nell'argomento del Metodo ''.SendKeys( )'' immediatamente dopo il comando, ossia:
 
La linea di comando apparirà nel Terminale e potrà essere utilizzata efficacemente cliccando come di consueto sul tasto "''Invio''" della tastiera. Qualora si intenda attivare il comando nel Terminale immediatamente dopo la sua stampa, si aggiungerà il carattere escape "\n" nell'argomento del Metodo ''.SendKeys( )'' immediatamente dopo il comando, ossia:
 
  Desktop.SendKeys("ls<FONT Color=#B22222>\n</font>")
 
  Desktop.SendKeys("ls<FONT Color=#B22222>\n</font>")
 
+
----
 
In quest'altro esempio dopo aver atteso l'apertura del Terminale, cliccando sul "Buutton" il programma Gambas richiederà l'immissione in un ''ImputBox'' del numero identificativo della finestra del Terminale aperto. Tale ID può essere copiato nella Console dell'IDE di Gambas (se il programma è stato ovviamente lanciato come progetto, oppure dal Terminale come eseguibile .gambas).
 
In quest'altro esempio dopo aver atteso l'apertura del Terminale, cliccando sul "Buutton" il programma Gambas richiederà l'immissione in un ''ImputBox'' del numero identificativo della finestra del Terminale aperto. Tale ID può essere copiato nella Console dell'IDE di Gambas (se il programma è stato ovviamente lanciato come progetto, oppure dal Terminale come eseguibile .gambas).
 
<BR>Nel copiare il numero identificativo della finestra del Terminale - al quale trasferire la stringa di caratteri - si dovrà avere cura di copiare, e incollare nell'InputBox'', anche i caratteri "&h" che precedono il valore esadecimale riportato.
 
<BR>Nel copiare il numero identificativo della finestra del Terminale - al quale trasferire la stringa di caratteri - si dovrà avere cura di copiare, e incollare nell'InputBox'', anche i caratteri "&h" che precedono il valore esadecimale riportato.
Riga 72: Riga 72:
 
   id = Val(s)
 
   id = Val(s)
 
   
 
   
'''End'''
+
  X11.ActiveWindow = id
 
'''Public''' Sub TextArea1_KeyRelease()
 
 
   
 
   
   If (IsNull(TextArea1.Text)) Or (Key.Code <> Key.Enter) Then Return
+
   Wait 0.1
  X11.ActiveWindow = id
 
 
   
 
   
 
  <FONT Color=gray>' ''Il Metodo ".SendKeys()" consente l'invio di uno o più caratteri alla volta:</font>
 
  <FONT Color=gray>' ''Il Metodo ".SendKeys()" consente l'invio di uno o più caratteri alla volta:</font>
   X11.SendKeys(TextArea1.Text[pos, TextArea1.Text.Len - pos])
+
   X11.SendKeys("ls\n")
 
<FONT Color=gray>' ''Si potrà anche usare il Metodo ".SendKey()", che consente però l'invio di un carattere alla volta:''
 
' '''For i As Integer = pos To Len(TextArea1.Text) - 1'''
 
'  '''X11.SendKey(TextArea1.Text[i, 1], True)'''
 
'  '''X11.SendKey(TextArea1.Text[i, 1], False)'''
 
'  '''Next'''</font>
 
 
  pos = TextArea1.Text.Len
 
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione attuale delle 09:05, 31 ago 2022

Dopo aver aperto un Terminale mediante il Metodo .OpenTerminal( ) della Classe Desktop, è possibile inviargli una linea di comando eseguibile ed efficace utilizzando il Metodo .SendKeys( ) della predetta Classe.

Ovviamente è necessario attivare i Componenti gb.desktop.x11 e gb.desktop.


Mostriamo un esempio:

Private b As Byte


Public Sub Form_Open()
 
' Apprendiamo il numero dei file-device pseudoterminale nella cartella "/dev/pts":
 b = Dir("/dev/pts", "*", gb.Device).Count
 
End


Public Sub Button1_Click()
 
 Desktop.OpenTerminal

' L'apertura del Terminale determina la creazione di un altro e nuovo file-device "pts".
' Restiamo in attesa fino alla sua creazione, dato che il nuovo file-device "pts" = nuovo Terminale aperto !
 Repeat
   Wait 0.01
 Until Dir("/dev/pts", "*", gb.Device).Count > b
 
' Una volta che il Terminale è stato aperto, gli inviamo la linea di comando (ad esempio "ls"):
 Desktop.SendKeys("ls")
  
End

La linea di comando apparirà nel Terminale e potrà essere utilizzata efficacemente cliccando come di consueto sul tasto "Invio" della tastiera. Qualora si intenda attivare il comando nel Terminale immediatamente dopo la sua stampa, si aggiungerà il carattere escape "\n" nell'argomento del Metodo .SendKeys( ) immediatamente dopo il comando, ossia:

Desktop.SendKeys("ls\n")

In quest'altro esempio dopo aver atteso l'apertura del Terminale, cliccando sul "Buutton" il programma Gambas richiederà l'immissione in un ImputBox del numero identificativo della finestra del Terminale aperto. Tale ID può essere copiato nella Console dell'IDE di Gambas (se il programma è stato ovviamente lanciato come progetto, oppure dal Terminale come eseguibile .gambas).
Nel copiare il numero identificativo della finestra del Terminale - al quale trasferire la stringa di caratteri - si dovrà avere cura di copiare, e incollare nell'InputBox, anche i caratteri "&h" che precedono il valore esadecimale riportato.

Private id As Integer
Private pos As Integer

Public Sub Form_Open()

 Desktop.OpenTerminal

End

Public Sub Button1_Click()

 Dim n As Integer
 Dim ob As Object
 Dim s As String

 For Each n In X11.GetWindowProperty(X11.RootWindow, "_NET_CLIENT_LIST")
' Di ciascuna finestra aperta mostra in console:
'   - l'ID (in esadecimale);
'   - il desktop (numero d'indice) nel quale è aperta;
'   - il nome;
   Write "\e[31m&h" & Hex(n, 8) &
         "\e[0m  " &
         Format(X11.GetWindowProperty(n, "_NET_WM_DESKTOP")[0], "-#") & "  "
' Verifica se vi sono finestre, come messaggi di errore dal sistema, che non posseggono nome:
   ob = X11.GetWindowProperty(n, "_NET_WM_NAME")
   If Object.IsValid(ob) Then Write ob[0]
   Print 
 Next

 Repeat 
' Attende l'immissione nell'InputBox dell'ID della finestra, ove inviare successivamente i dati stringa.
' Se si immette il numero dell'ID in rappresentazione esadecimale, bisognerà farlo precedere dal simbolo "&".
   s = InputBox("Inserire il numero identificativo della finestra prescelta:")
 Until IsNumber(s)

 id = Val(s)

 X11.ActiveWindow = id

 Wait 0.1

' Il Metodo ".SendKeys()" consente l'invio di uno o più caratteri alla volta:
 X11.SendKeys("ls\n")

End