Newsgroup: it.comp.lang.delphi
Titolo: Portare un'altra applicazione in primo piano

Mi trovo a dover risolvere questo inghippo:
Ho due applicazioni (A e B) dove A, composta da una minuscola form la cui  
caption cambia al variare di alcune elaborazioni, ï¿œ praticamente sempre in  
esecuzione, mentre B la si lancia all'occorrenza per le elaborazioni del  
caso.
Vorrei che B porti A in primo piano quando necessario, ma sino ad ora non  
sono riuscito nell'intento.
Dalle googlate fatte gli esempi propongono sempre una ricerca attraverso  
il nome della form, che io evidentemente non posso conoscere a priori.
Avevo pensato di percorrere la via del ProcessID, ma non sono riuscito  
comunque ad approdare a qualcosa di concreto.
C'ï¿œ qualche anima pia...? ;-)
Grazie in anticipo.
Fede

che io evidentemente non posso conoscere a priori.
-- 
http://www.kiva.org
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

> Parli della famiglia di funzioni FindWindow?
Exact, FindWindow e dintorni.
Io pensavo a qualcosa tipo, partendo dal Filename.exe:
1. GetProcessID,
2. GetProcessHandle,
3. BringToFrontProcess | BringToFrontMainWindow.
Sul primo ci siamo, sul secondo piï¿œ o meno anche, ma poi...

 Sul primo ci siamo, sul secondo pi� o meno anche, ma poi...
Ci sono le API BringWindowToTop oppure SetWindowPos.
ACSH
-- 


 Ci sono le API BringWindowToTop oppure SetWindowPos.
...la quale ha bisogno dell'handle di una window ...che non riesco a  
ricavare.

 ricavare.
Fa in modo che ciascuna applicazione salvi il proprio handle da qualche
parte, in un file .ini comune, oppure nel registry, ad esempio. Un poco
rozza come soluzione :-))
-- 
http://www.kiva.org


"Federico Melillo" ha scritto nel messaggio

1) Usi CreateToolhelp32Snapshot per ottenere la lista dei 
processi attivi
2) Li passi ad un uno ad uno con Process32First e 
Process32Next finch� non trovi
il processo con il nome del file eseguibile che tu conosci.
3) Con EnumWindows scorri tutti gli handle delle finestre 
aperte.
4) Nella sua callback con GetWindowThreadProcessId confronti 
quell'handle
con il ProcessID ottenuto nel punto 2.
L'handle ottenuto nel punto 4 � quello della finestra da 
passare ad una delle due API.
Mi sembra tutto molto semplice ...
ACSH 
--- news://
freenews.netfront.net/
 - complaints: 
ne...@netfront.net
 ---

 Mi sembra tutto molto semplice ...
Oddio... non si può proprio dire che sia una passeggiata farsi 
un'escursione per le montagne delle api win32.. :-)
-- 
Morde

Morde ha scritto:


Era un tentativo di battuta.
Ciao


> Mi sembra tutto molto semplice ...
Innanzitutto grazie per le utili risposte.
in effetti lo ï¿œ ed ï¿œ praticamente lo stesso sistema che avevo giï¿œ messo in  
piedi, ma smanettando un po' ho capito l'inghippo che m'ha sviato e che ad  
ora non vede soluzione utile:
dall'elenco dei processi ho prelevato il ProcessID dell'eseguibile che  
m'interessa, trattandosi di un'applicazione java il  
CreateToolhelp32Snapshot la rileva, mentre GetWindowThreadProcessId no,  
quindi niente "SetForeground".

 Era un tentativo di battuta.
Si si certo, infatti mi ha fatto sorridere, tra l'altro, parlando di 
sarcasmo, c'è lo smiley da usare proprio per questo tipo di battuta:
:->
:-D
-- 
Morde