Differenze tra le versioni di "Agire sulla finestra di un qualunque programma"
Riga 4: | Riga 4: | ||
==Agire sulla finestra di un programma qualsiasi== | ==Agire sulla finestra di un programma qualsiasi== | ||
Esporremo una possibile modalità di uso della Classe ''DesktopWindow'' e ''Desktop'' per una ''semplice'' azione su una finestra: | Esporremo una possibile modalità di uso della Classe ''DesktopWindow'' e ''Desktop'' per una ''semplice'' azione su una finestra: | ||
− | + | Public Sub Button1_Click() | |
− | + | Dim dw As DesktopWindow | |
− | + | Dim ii As Integer[] | |
<FONT color=#006400>' ''Individuiamo il numero identificativo della "finestra" del programma, inserendo il nome esatto della finestra (si può utilizzare anche l'asterisco "*":''</font> | <FONT color=#006400>' ''Individuiamo il numero identificativo della "finestra" del programma, inserendo il nome esatto della finestra (si può utilizzare anche l'asterisco "*":''</font> | ||
− | + | ii = Desktop.FindWindow("<FONT color=gray>''nome_della_finestra_del_programma_da_gestire''</font>") | |
− | + | With dw = New DesktopWindow(ii[0]) | |
<FONT color=#006400>' ''Ne vediamo il titolo:''</font> | <FONT color=#006400>' ''Ne vediamo il titolo:''</font> | ||
− | + | Print .VisibleName | |
<FONT color=#006400>' ''Ne vediamo il numero identificativo in decimale ed in esadecimale:''</font> | <FONT color=#006400>' ''Ne vediamo il numero identificativo in decimale ed in esadecimale:''</font> | ||
− | + | Print .Id, hex(.Id) | |
<FONT color=#006400>' ''Impostiamo i valori dello spostamento, ed eventualmente anche il ridimensionamento della finestra (i due parametri relativi al ridimensionamento della finestra sortiscono il loro effetto soltanto se la finestra del programma è ridimensionabile):''</font> | <FONT color=#006400>' ''Impostiamo i valori dello spostamento, ed eventualmente anche il ridimensionamento della finestra (i due parametri relativi al ridimensionamento della finestra sortiscono il loro effetto soltanto se la finestra del programma è ridimensionabile):''</font> | ||
.Move(<FONT color=gray>''valoreX''</font>, <FONT color=gray>''valoreY''</font>, <FONT color=gray>''valoreW''</font>, <FONT color=gray>''valoreY''</font>) | .Move(<FONT color=gray>''valoreX''</font>, <FONT color=gray>''valoreY''</font>, <FONT color=gray>''valoreW''</font>, <FONT color=gray>''valoreY''</font>) | ||
End With | End With | ||
− | + | End | |
E' ovviamente possibile utilizzare anche le altre funzioni e proprietà disponibili per la Classe ''DesktopWindow''. | E' ovviamente possibile utilizzare anche le altre funzioni e proprietà disponibili per la Classe ''DesktopWindow''. | ||
Riga 32: | Riga 32: | ||
− | + | Public Sub Form_Open() | |
Me.Center | Me.Center | ||
Riga 44: | Riga 44: | ||
End With | End With | ||
− | + | End | |
− | + | Public Sub Timer1_Timer() | |
Dim i As Integer | Dim i As Integer | ||
Riga 63: | Riga 63: | ||
End With | End With | ||
− | + | End | |
Riga 95: | Riga 95: | ||
i = Val("&" & x[1]) - Val("&" & y) | i = Val("&" & x[1]) - Val("&" & y) | ||
− | + | End | |
+ | |||
− | + | Public Sub Button1_Click() | |
Dim dw As DesktopWindow | Dim dw As DesktopWindow | ||
Riga 109: | Riga 110: | ||
End With | End With | ||
− | + | End | |
Il puntatore del mouse muterà a forma di crocetta. Si dovrà cliccare una volta sulla finestra interessata. Quindi cliccando successivamente sul Button1, la finestra si sposta alle coordinate X ed Y stabilite. Potrà anche essere previsto il ridimensionamento della finestra ponendo anche i valori relativi a ''Weigth'' e ''Width'': ''.Move(x, y, w, h). | Il puntatore del mouse muterà a forma di crocetta. Si dovrà cliccare una volta sulla finestra interessata. Quindi cliccando successivamente sul Button1, la finestra si sposta alle coordinate X ed Y stabilite. Potrà anche essere previsto il ridimensionamento della finestra ponendo anche i valori relativi a ''Weigth'' e ''Width'': ''.Move(x, y, w, h). | ||
Riga 115: | Riga 116: | ||
===Uso del programma ''wmctrl'' con ''Shell''=== | ===Uso del programma ''wmctrl'' con ''Shell''=== | ||
Si potrà fare anche uso del comando ''wmctrl'' lanciato con ''Shell'': | Si potrà fare anche uso del comando ''wmctrl'' lanciato con ''Shell'': | ||
− | + | Public Sub Button1_Click() | |
<FONT color=#006400>' ''La finestra del programma, in questo esempio, viene posta in basso al centro dello schermo:''</font> | <FONT color=#006400>' ''La finestra del programma, in questo esempio, viene posta in basso al centro dello schermo:''</font> | ||
− | + | Shell "wmctrl -r ''nome_della_finestra_del_programma'' -e 0,500,800,600,300" | |
− | + | End | |
riguardo ai valori inseriti dell'esempio precedente: | riguardo ai valori inseriti dell'esempio precedente: | ||
* 500 = <FONT color=#B22222>coordinate x</font>; | * 500 = <FONT color=#B22222>coordinate x</font>; |
Versione delle 16:44, 8 giu 2024
Per agire sulla finestra di un programma qualsiasi (anche se diverso dall'applicazione.gambas) bisognerà utilizzare la classe DesktopWindow. Per poter attivare questa Classe si dovrà innanzitutto attivare nel progetto anche il componente gb.desktop, il quale ci consentirà l'uso pure di altre funzioni, come quelle della Classe Desktop, utili al nostro scopo.
Indice
Agire sulla finestra di un programma qualsiasi
Esporremo una possibile modalità di uso della Classe DesktopWindow e Desktop per una semplice azione su una finestra:
Public Sub Button1_Click() Dim dw As DesktopWindow Dim ii As Integer[] ' Individuiamo il numero identificativo della "finestra" del programma, inserendo il nome esatto della finestra (si può utilizzare anche l'asterisco "*": ii = Desktop.FindWindow("nome_della_finestra_del_programma_da_gestire") With dw = New DesktopWindow(ii[0]) ' Ne vediamo il titolo: Print .VisibleName ' Ne vediamo il numero identificativo in decimale ed in esadecimale: Print .Id, hex(.Id) ' Impostiamo i valori dello spostamento, ed eventualmente anche il ridimensionamento della finestra (i due parametri relativi al ridimensionamento della finestra sortiscono il loro effetto soltanto se la finestra del programma è ridimensionabile): .Move(valoreX, valoreY, valoreW, valoreY) End With End
E' ovviamente possibile utilizzare anche le altre funzioni e proprietà disponibili per la Classe DesktopWindow.
Agire sulla finestra di un programma qualsiasi operando direttamente con il mouse
In questo caso agiremo sulla finestra di un programma qualsiasi (anche se non quello dell'applicazione.gambas) individuandola con il mouse. Bisognerà fare in modo da sollevare con il mouse la finestra, cliccandoci sopra. Essa, così, diventerà attiva principale rispetto a tutte le altre presenti sul desktop. Quindi, una volta individuata, si operà su di essa attraverso una variabile del tipo della Classe DesktopWindow. Utilizzeremo inoltre un Timer ponendo un ritardo abbastanza basso, e dovremo attivare il componente gb.desktop.
Attenzione, perché anche il desktop è rappresentato da una finestra; pertanto, se cliccheremo su di esso, comporteremo su questo le modifiche previste dal codice sotto mostrato.
Private Timer1 As Timer Public Sub Form_Open() Me.Center Me.show Wait 0.1 With Timer1 = New Timer As "Timer1" .Delay = 100 .Start End With End Public Sub Timer1_Timer() Dim i As Integer Dim dw As DesktopWindow ' Individuiamo l'handle della finestra attiva in primo piano: i = Desktop.ActiveWindow ' ...quindi la gestiamo: With dw = New DesktopWindow(i) Print .VisibleName Print .Id, hex(.Id) .Move(Mouse.ScreenX + 20, Mouse.ScreenY) .Resize(200, 100) End With End
Agire su una finestra anche con comandi bash
E' possibile utilizzare congiuntamente comandi bash specifici e la Classe DesktopWindow
Uso del comando xprop e di DesktopWindow
Vedremo un possibile uso combinato del comando xprop e della classe DesktopWindow:
Private i As Integer Public Sub Form_Open() Dim pr As Process Dim ss, x As New String[] Dim s, y As String pr = Shell "xprop | grep '(WINDOW):'" For Read While Not Eof(pr) Input #pr, s ss.Add(s) Wend ' Dividiamo la stringa contenente il primo valore esadecimale, in modo tale da ottenere la seconda parte utile, priva di “0x”: x = Split(ss[4], "x") ' Dividiamo la stringa contenente il secondo valore esadecimale, in modo tale da ottenere le ultime due cifre più a destra: y = Right(ss[9], 2) ' Individua il valore esadecimale preciso della finestra, lo trasforma in decimale: i = Val("&" & x[1]) - Val("&" & y) End Public Sub Button1_Click() Dim dw As DesktopWindow dw = New DesktopWindow(i) With dw Print .VisibleName Print .Id, hex(.Id) .Move(Mouse.ScreenX + 10, Mouse.ScreenY) End With End
Il puntatore del mouse muterà a forma di crocetta. Si dovrà cliccare una volta sulla finestra interessata. Quindi cliccando successivamente sul Button1, la finestra si sposta alle coordinate X ed Y stabilite. Potrà anche essere previsto il ridimensionamento della finestra ponendo anche i valori relativi a Weigth e Width: .Move(x, y, w, h).
Uso del programma wmctrl con Shell
Si potrà fare anche uso del comando wmctrl lanciato con Shell:
Public Sub Button1_Click() ' La finestra del programma, in questo esempio, viene posta in basso al centro dello schermo: Shell "wmctrl -r nome_della_finestra_del_programma -e 0,500,800,600,300" End
riguardo ai valori inseriti dell'esempio precedente:
- 500 = coordinate x;
- 800 = coordinate y;
- 600 = lunghezza della finestra;
- 300 = altezza della finestra.
Quindi, volendo, è possibile anche far modificare la grandezza della finestra; altrimenti i due ultimi parametri dovrebbero essere posti a -1.