Differenze tra le versioni di "Individuare l'ID della finestra di un MessageBox generato da un programma"
Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Per individuare l'ID della finestrina di un ''MessageBox'', generato da un programma, si potrà procedere come appresso. ==con le sole funzioni di Gambas== Si potrà utilizz...') |
|||
Riga 1: | Riga 1: | ||
Per individuare l'ID della finestrina di un ''MessageBox'', generato da un programma, si potrà procedere come appresso. | Per individuare l'ID della finestrina di un ''MessageBox'', generato da un programma, si potrà procedere come appresso. | ||
− | |||
==con le sole funzioni di Gambas== | ==con le sole funzioni di Gambas== | ||
Riga 6: | Riga 5: | ||
'''Public''' Sub Button1_Click() | '''Public''' Sub Button1_Click() | ||
− | + | Print Desktop.Windows[Desktop.Windows.Count - 1].Id | |
− | + | ||
'''End''' | '''End''' | ||
− | |||
− | |||
==con il comando "wmctrl"== | ==con il comando "wmctrl"== | ||
Riga 19: | Riga 16: | ||
Dim ss1, ss2 As String[] | Dim ss1, ss2 As String[] | ||
− | + | <FONT color=gray>' ''Apre il "MessageBox":''</font> | |
− | <FONT color= | ||
Message.Info("Questa è una prova con wmctrl !") | Message.Info("Questa è una prova con wmctrl !") | ||
− | <FONT color= | + | <FONT color=gray>' ''Inserisce nella variabile stringa tutto il risultato del comando "wmctrl"...''</font> |
Shell " wmctrl -l" To s | Shell " wmctrl -l" To s | ||
− | <FONT color= | + | <FONT color=gray>' ...''e lo "spezzetta" nelle sue righe componenti:''</font> |
ss1 = Split(s, "\n", "", True) | ss1 = Split(s, "\n", "", True) | ||
− | <FONT color= | + | <FONT color=gray>' ''Poiché la finestra del "MessageBox" è stata l'ultima a mostrarsi, viene presa in considerazione l'ultima riga della lista, che è spezzettata nelle sue parole componenti:''</font> |
− | |||
− | |||
ss2 = Split(ss1[ss1.Max], " ") | ss2 = Split(ss1[ss1.Max], " ") | ||
− | <FONT color= | + | <FONT color=gray>' ''Viene mostrato il numero dell'ID esadecimale ed in decimale:''</font> |
− | + | Print Right(ss2[0], 8), Val("&" & Right(ss2[0], 8)) | |
'''End''' | '''End''' | ||
− | + | ==con il comando "xprop"== | |
− | |||
− | ==con il | ||
'''Public''' Sub Button1_Click() | '''Public''' Sub Button1_Click() | ||
Riga 48: | Riga 40: | ||
Dim s As String | Dim s As String | ||
Dim i As Integer | Dim i As Integer | ||
− | + | ||
− | + | pr = Shell "xprop | grep <FONT color=#B22222>XKLAVIER_STATE</font>" For Read | |
− | |||
While Not Eof(pr) | While Not Eof(pr) | ||
Input #pr, s | Input #pr, s | ||
− | <FONT color= | + | <FONT color=gray>' ''Individua il valore decimale della finestra del "MessageBox":''</font> |
If Eof(pr) Then i = CInt(s) | If Eof(pr) Then i = CInt(s) | ||
Wend | Wend | ||
− | <FONT color= | + | <FONT color=gray>' ''...e lo mostra in console:''</font> |
− | + | Print i | |
'''End''' | '''End''' |
Versione delle 23:36, 25 dic 2021
Per individuare l'ID della finestrina di un MessageBox, generato da un programma, si potrà procedere come appresso.
con le sole funzioni di Gambas
Si potrà utilizzare la classe Desktop. In tal caso bisognerà attivare anche il componente gb.desktop. Se si intende ottenere l'ID del "MessageBox" immediatamente dopo la sua apertura, allora si farà riferimento all'ultimo numero di "indice", il quale è relativo appunto alla finestra del "MessageBox", essendo stata ovviamente l'ultima in ordine di apparizione:
Public Sub Button1_Click() Print Desktop.Windows[Desktop.Windows.Count - 1].Id End
con il comando "wmctrl"
Il programma wmctrl sarà lanciato con i comandi Shell o Exec:
Public Sub Button1_Click() Dim s As String Dim ss1, ss2 As String[] ' Apre il "MessageBox": Message.Info("Questa è una prova con wmctrl !") ' Inserisce nella variabile stringa tutto il risultato del comando "wmctrl"... Shell " wmctrl -l" To s ' ...e lo "spezzetta" nelle sue righe componenti: ss1 = Split(s, "\n", "", True) ' Poiché la finestra del "MessageBox" è stata l'ultima a mostrarsi, viene presa in considerazione l'ultima riga della lista, che è spezzettata nelle sue parole componenti: ss2 = Split(ss1[ss1.Max], " ") ' Viene mostrato il numero dell'ID esadecimale ed in decimale: Print Right(ss2[0], 8), Val("&" & Right(ss2[0], 8)) End
con il comando "xprop"
Public Sub Button1_Click() Dim pr As Process Dim x As New String[] Dim s As String Dim i As Integer pr = Shell "xprop | grep XKLAVIER_STATE" For Read While Not Eof(pr) Input #pr, s ' Individua il valore decimale della finestra del "MessageBox": If Eof(pr) Then i = CInt(s) Wend ' ...e lo mostra in console: Print i End