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 un altro programma, si potrà procedere come appresso.
+
Per individuare l'ID della finestrina di un ''MessageBox'', generato da un un altro programma (diverso dal nostro programma Gambas), si potrà procedere come appresso.
  
 
==con le sole funzioni di Gambas==
 
==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:
+
Si potrà utilizzare la classe ''Desktop''. In tal caso bisognerà attivare anche i Componente "gb.desktop" e "gb.desktop.x11".
 +
<BR>In questo esempio si farà in modo da filtrare le finestre eventualmente aperte, prendendo in considerazione soltanto quella del "MessageBox", purché tale finestra abbia un nome visibile (solitamente sul bordo in alto). 
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
   Print Desktop.Windows[Desktop.Windows.Count - 1].Id
+
   Dim dw As DesktopWindow
 
   
 
   
'''End'''
+
   For Each dw In Desktop.Windows
 
+
    If dw.VisibleName = "<FONT color=gray>''nome_visibile_della_finestra_del_MessageBox''</font>" Then Print Hex(dw.Id, 6)
==con il comando "wmctrl"==
+
   Next
Il programma ''wmctrl'' sarà lanciato con i comandi ''Shell'' o ''Exec'':
 
'''Public''' Sub Button1_Click()
 
 
   Dim s As String
 
  Dim ss1, ss2 As String[]
 
 
<FONT color=gray>' ''Inserisce nella variabile stringa tutto il risultato del comando "wmctrl"...''</font>
 
  Shell " wmctrl -l" To s
 
 
<FONT color=gray>' ...''e lo "spezzetta" nelle sue righe componenti:''</font>
 
  ss1 = Split(s, "\n", "", True)
 
 
<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], " ")
 
 
<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'''
 
 
 
==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 <FONT color=#B22222>XKLAVIER_STATE</font>" For Read 
 
 
 
  While Not Eof(pr)     
 
    Input #pr,
 
<FONT color=gray>' ''Individua il valore decimale della finestra del "MessageBox":''</font>
 
    If Eof(pr) Then i = CInt(s)
 
   Wend
 
 
   
 
   
<FONT color=gray>' ''...e lo mostra in console:''</font>
 
  Print i
 
 
 
 
  '''End'''
 
  '''End'''

Versione delle 18:30, 26 dic 2021

Per individuare l'ID della finestrina di un MessageBox, generato da un un altro programma (diverso dal nostro programma Gambas), si potrà procedere come appresso.

con le sole funzioni di Gambas

Si potrà utilizzare la classe Desktop. In tal caso bisognerà attivare anche i Componente "gb.desktop" e "gb.desktop.x11".
In questo esempio si farà in modo da filtrare le finestre eventualmente aperte, prendendo in considerazione soltanto quella del "MessageBox", purché tale finestra abbia un nome visibile (solitamente sul bordo in alto).

Public Sub Button1_Click()

 Dim dw As DesktopWindow

 For Each dw In Desktop.Windows
   If dw.VisibleName = "nome_visibile_della_finestra_del_MessageBox" Then Print Hex(dw.Id, 6)
 Next

End