Differenze tra le versioni di "Individuare l'ID della finestra di un MessageBox generato da un programma"

Da Gambas-it.org - Wikipedia.
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 un altro programma, si potrà procedere come appresso.
  
 
==con le sole funzioni di Gambas==
 
==con le sole funzioni di Gambas==
Riga 15: Riga 15:
 
   Dim s As String
 
   Dim s As String
 
   Dim ss1, ss2 As String[]
 
   Dim ss1, ss2 As String[]
 
<FONT color=gray>' ''Apre il "MessageBox":''</font>
 
    Message.Info("Questa è una prova con wmctrl !")
 
 
   
 
   
 
  <FONT color=gray>' ''Inserisce nella variabile stringa tutto il risultato del comando "wmctrl"...''</font>
 
  <FONT color=gray>' ''Inserisce nella variabile stringa tutto il risultato del comando "wmctrl"...''</font>

Versione delle 18:06, 26 dic 2021

Per individuare l'ID della finestrina di un MessageBox, generato da un un altro 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[]

' 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