Ok, da quel che ho capito è un problema di windows non risolvibile via codice. Potresti per caso indicarmi una qualche procedura o funzione che mi avvisi quando un'applicazione viene eseguita? Quella che uso io è la seguente ma, come ho detto, crea dei problemi con la memoria
codice:
//------------------------------------------------------------------------------
Function ApplicazioneInEsecuzione ;
//------------------------------------------------------------------------------
Var
Data : TProcessEntry32 ;
Handler : THandle ;
ProcessoTrovato : Boolean ;
Begin
ProcessoTrovato := False ;
Try
Handler := CreateToolHelp32Snapshot ( TH32CS_SNAPALL, 0 ) ;
Data.dwSize := SizeOf ( TPROCESSENTRY32 ) ;
If Process32First( Handler, Data )
Then Begin
While Process32Next ( Handler, Data )
Do Begin
If ( GetName ( Data, Length ( NomeApplicazione ) ) =
UpperCase ( NomeApplicazione ) )
Then Begin
ProcessoTrovato := True ;
ProcessID := Data.th32ProcessID ;
End;
End;
End;
Except
//
End;
ApplicazioneInEsecuzione := ProcessoTrovato ;
End;
La funzione GetName() non fa altro che cercare la stringa NomeApplicazione all'interno della lista dei processi in esecuzione:
codice:
//------------------------------------------------------------------------------
Function GetName ;
//------------------------------------------------------------------------------
Var
Posizione : Byte ;
NomeProcesso : String ;
Begin
NomeProcesso := '' ;
For Posizione := 0 to Lunghezza - 1
Do Begin
NomeProcesso := NomeProcesso + Data.szExeFile [ Posizione ] ;
End;
GetName := UpperCase ( NomeProcesso ) ;
End;