Aprire un Terminale con Desktop.OpenTerminal e passargli una riga di comando
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 Button 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