Newsgroup: it.comp.lang.delphi
Titolo: Verificare se un'applicazione è in esecuzione

Ciao a tutti e grazie in anticipo.
Devo fare un programma in Delphi 5 per sapere se un'applicazione, il cui
nome viene passato tramite un parametro esterno, è in esecuzione oppure no.
Qualcuno saprebbe dirmi se esiste una funzione che a serva a questo scopo?
Alex

 Alex
Dopo molto tempo passato a cercare sull'help di Delphi sono riuscito a
trovare la funzione "FindWindow", però non funziona perché ritorna sempre 0,
invece che NULL se l'applicazione non è in esecuzione e l'handle se è in
esecuzione: forse avrò sbagliato a passargli i parametri? Io la chiamata
della funzione l'ho fatta cosi:
FindWindow(PChar(Application.ExeName),PChar(Application.Title));
e così:
FindWindow(PChar('C:\Prova\Prg.exe'),PChar('Prg'));
Qualcuno saprebbe dirmi cosa ho sbagliato oppure se esiste un'altra funzione
per
ottenere lo stesso scopo?
Grazie.
Alex

> Dopo molto tempo passato a cercare sull'help di Delphi sono riuscito
a trovare la funzione "FindWindow", però non funziona perché ritorna
sempre 0, invece che NULL se l'applicazione non è in esecuzione e
l'handle se è in esecuzione: forse avrò sbagliato a passargli i
parametri? [...]
FindWindow(PChar(Application.ExeName),PChar(Application.Title));
<<
dall'help:
HWND FindWindow(
    LPCTSTR lpClassName, // pointer to class name
    LPCTSTR lpWindowName  // pointer to window name
   );
quindi i parametri sono: nome della classe (es: PChar('TForm1')) se si
tratta della prima form di una applicazione delphi) e nome della
finestra (es: PChar('Form1')).
Per sapere il classname delle applicazioni attive ad un certo momento
puoi ad es. usare EnumWindows in accoppiata a GetClassName e
GetWindowText (queste due chiamate da dentro la callback che hai passato
a EnumWindows).
Per maggiori info v. help di Win32.
Saluti
Paolo Arosio

 Paolo Arosio
Grazie, purtroppo perň ancora mi č chiaro ancora come si usano FindWindow,
EnumWindows, etc. nemmeno adesso (nonostante abbia consultato e riconsultato
l'help di Win32), in particolare per quanto concerne quali parametri debbano
essere passati a queste funzioni, perché gli unici parametri che conosco
sono il nome del file eseguibile e il title dell'applicazione e vorrei che
la funzione mi restituisse il numero di applicazioni in esecuzione con quel
nome.
Premettendo che conosco poco le funzioni di Win32, potresti farmi
eventualmente anche qualche esempio?
Grazie!
Alex

> Grazie, purtroppo però ancora mi è chiaro ancora come si usano
FindWindow, EnumWindows, etc. nemmeno adesso (nonostante abbia
consultato e riconsultato l'help di Win32), in particolare per quanto
concerne quali parametri debbano essere passati a queste funzioni,
perché gli unici parametri che conosco sono il nome del file eseguibile
e il title dell'applicazione e vorrei che la funzione mi restituisse il
numero di applicazioni in esecuzione con quel nome. <<
In questo caso, dovresti creare uno snapshot dei processi attivi (mi
pare venga restituito anche l'exename). Purtroppo non l'ho mai usato
neanch'io e non ho uno straccetto di codice. _credo_ ci sia nelle FAQ.
Eventualmente, cerca CreateToolhelp32Snapshot a) sul ng, b) su
libero.winapi, c) sull'help d) su 
http://www.tamaracka.com/
 e credo ne
potrai venire a capo.
spiacente di non poter essere di maggior aiuto
Saluti
Paolo Arosio

 ottenere lo stesso scopo?
Ricordati che (dall'Help di Delphi5) i PChar debbono puntare a stringhe
Null-terminate, xciň dovresti scrivere una cosa del tipo:
myHandle := FinsWindow(PCar('C:\MyProg.Exe'+#0),PChar('Caption'+#0));
poi controlla che myHandle sia <> NULL e dovresti essere apposto...io l'ho
usata giusto in questi giorni e mi funziona tranquillamente...
Bye

 Paolo Arosio
Grazie.
Ho iniziato a scrivere il codice e anche se ancora non funziona
perfettamente penso di essere sulla buona strada... o almeno spero.
Grazie ancora.
Alex