Inviare dati stringa da un programma Gambas a un programma esterno avente un'area di testo o a un Terminale

Da Gambas-it.org - Wikipedia.

Per inviare dati stringa da un programma Gambas a un programma esterno avente un'area di testo o a un Terminale, si potrà usare il Componente gb.desktop.x11.

Invio dati stringa a un programma esterno contenente un'area di testo

Nel seguente esempio il programma Gambas dispone di una TextArea nella quale l'utente può scrivere un testo qualsiasi e inviarlo poi ad un programma esterno contenente un'area di testo (ad esempio un semplice editor di testo).
Occorrerà lanciare prima il ptogramma esterno, poi il codice Gambas dell'esempio.
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.editor di testo - 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.
Dopo aver scritto il testo nella TextArea del programma Gambas, sotto riportato, per trasferire tale stringa di caratteri all'editor di testo esterno, basterà premere il tasto "Invio" del tastierino numerico presente sulla tastiera.

Private id As Integer
Private pos As Integer

Public Sub Form_Open()

 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)

End

Public Sub TextArea1_KeyRelease()

 If (IsNull(TextArea1.Text)) Or (Key.Code <> Key.Enter) Then Return
 X11.ActiveWindow = id

' Il Metodo ".SendKeys()" consente l'invio di uno o più caratteri alla volta:
 X11.SendKeys(TextArea1.Text[pos, TextArea1.Text.Len - pos])

' 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

 pos = TextArea1.Text.Len

End

Invio dati stringa a un programma esterno contenente un'area di testo mentre si scrive nella TextArea del programma Gambas

Se si desidera inviare a un programma esterno, avente un'area di testo (ad esempio un Editor di testo), caratteri ASCII contemporaneamente si scrivono gli stessi nella TextArea del programma Gambas, si potrà adottare il seguente esempio, molto simile al precedente, attivando il Componente gb.desktop.x11.
Bisognerà lanciare prima il programma esterno (editor di testo) e successivamente il seguente codice.
Mentre si scrive nella TextArea del programma Gambas, si dovrà avere cura di procedere lentamente.

Private id As Integer

Public Sub Form_Open()

 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)

End

Public Sub TextArea1_Cursor()

 X11.ActiveWindow = id

 Wait 0.1

 X11.SendKey(Right(TextArea1.Text, 1), True)
 X11.SendKey(Right(TextArea1.Text, 1), False)

 X11.ActiveWindow = Me.Handle

End


Invio dati stringa a un Terminale

Nel caso in cui il programma esterno, al quale inviare i dati stringa sia un Terminale, vale comunque il codice sopra esposto, ma si vedano anche le seguenti pagine: