Autore Topic: [Risolto] Trovare in Gambas 3 l' ID di una finestra da gestire con Embed  (Letto 1002 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Da quel che sembra, Gambas 3 non supporta più  :hatecomputer: "Desktop.Find", con il quale - come mostrato in qualche discussione nella parte relativa alla programmazione in Gambas 2 - era possibile trovare appunto l' ID di una finestra aperta sul desktop da utilizzare con ''embed'' per inglobare quella finestra in un form.

Qualcuno ha trovato una valida alternativa ?
« Ultima modifica: 21 Settembre 2013, 17:04:38 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Trovare in Gambas 3 il PID di una finestra da gestire con Embed
« Risposta #1 il: 04 Luglio 2011, 19:45:21 »
desktop.findwindow non ti piace?  ;D

Codice: gambas [Seleziona]

Public Sub Button1_Click()


Dim id As New Integer[]

 
  id = Desktop.FindWindow(FMain.Title)
 
  If id.Count > 0 Then
      label1.text = id[0]
  Endif
 
 
End




Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Trovare in Gambas 3 l' ID di una finestra da gestire con Embed
« Risposta #2 il: 05 Luglio 2011, 00:21:12 »
desktop.findwindow non ti piace?  ;D

Molto interessante. Stavo indagando su di lui stamane, ma non avevo capito come funzionava. Bene !

Mi stavo piegando su una soluzione molto... extreme  :death: di questo genere:

Codice: [Seleziona]
Shell "wmctrl -p -l"

e quindi, dopo aver individuato l' ID esadecimale (nella prima colonna dei dati), inserivo manualmente  :'( l' ID, con conversione da esadecimale in decimale, nel comando finale di:

Codice: [Seleziona]
Embedder1.embed(numero_PID_decimale)

Comunque, ho provato il tuo codice senza modificare alcunché, e vorrei porre due questioni:
  • al posto della dicitura "FMain.title" è possibile ottenere risultato utile inserendo proprio il titolo della finestra ? (A me è parso di no);
  • PROBLEMONE: ho notato una cosa strana che avevo constatato sostanzialmente anche con le mie prove mortali mediante il bash wmctrl: sperimentando appunto wmctrl ed inserendo il numero del ID della finestra - preventivamente aperta - del programma "Gedit", ho casualmente scoperto che l'embed funzionava, sì, ma solo se minimizzavo in basso (senza chiuderla ovviamente) preventivamente la finestra di Gedit. Se invece tentavo di inglobare Gedit tenendo aperta ed evidente la sua finestra sul desktop, l'embedding non avveniva !  ???
    Facendo le prove con il tuo codice - lasciando inalterata la dicitura: ...(FMain.title) - e verificando con il comando bash "wmctrl" i valori in Label1 restituiti, ho notato, coerentemente con quanto già notato nelle mie precedenti prove col bash, che mi viene restituito il PID decimale dell'ultima finestra minimizzata !!!  ???
    Insomma, pare che solo l' ID delle finestre minimizzate (più precisamente l'ultima in ordine temporale se ve ne sono più di una) venga intercettato da embed; e quindi solo una finestra minimizzata potrà essere inglobata nel form mediante il comando embed.

Sarebbe interessante sapere se questo medesimo comportamento è riscontrabile anche in altri utenti; però è chiaro che per inglobare una finestra in un form - stando così le cose - io devo procedere alla sua preventiva minimizzazione in basso.  :hatecomputer: ...e dovrò così trovare la strategia, la soluzione (ma mi pare che wmctrl non offra questa possibilità) pure per fare questo.  :rolleyes:

......ma non è strana 'sta cosa ?

Possono anche gli altri verificare questo fatto ? E' un problema mio, o più generale ?

« Ultima modifica: 21 Settembre 2013, 17:05:32 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Trovare in Gambas 3 l' ID di una finestra da gestire con Embed
« Risposta #3 il: 14 Novembre 2011, 23:27:46 »
Aggiornamento:

Dopo alcuni mesi sono tornato sull'argomento ed ho fatto delle prove e verifiche sull'individuazione del ID di una finestra e sul funzionamento di Embed con Gambas 3 (che bisognerà avere cura di aggiornare); e rinvio a questa discussione dove ho descritto i risultati finalmente positivi (con risoluzione dei problemi sopra citati):

http://www.gambas-it.org/smf/index.php?topic=1923.msg21337#msg21337

Sono riuscito a trovare alcuni modi per individuare l' ID della finestra di un programma, che sono visibili in questa pagina:
http://www.gambas-it.org/wiki/index.php?title=Individuare_ed_estrarre_l%27ID_della_finestra_di_un_programma


Consultare anche questa pagina della WIKI: http://www.gambas-it.org/wiki/index.php/Embedder .
« Ultima modifica: 16 Marzo 2014, 19:21:33 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »