Afficher un message
Vieux 11/10/2007, 15h29   #14
TedIF
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Comment obtenir le hwindow d'une application à partir d'un processId

>
> Le but était de fournir un menu "outil" paramétrable, avec une option
> (checkbox) pour n'autoriser qu'une seule instance de l'outil, par exemple
> pour un module de comm qui réserve ses ressources i/o, auquel cas il fallait
> juste remettre en avant-plan l'instance déjà lancée.
>
> A l'époque (et de mémoire, ça date un peu), je n'ai pas réussi à trouver une
> info qui identifie de façon bijective une applic.
>
> Il me semble que j'avais cherché à récupérer le chemin de l'exe, mais que les
> infos que j'avais réussi à récupérer changeaient selon l'origine du lancement :
> directement par l'exe ou par un raccourci (lnk) ou par .bat
>
> La difficulté vient du fait que l'outil a pu être lancé auparavant et/ou en
> dehors du contrôle de mon programme, en particulier par un bat ou un lnk.
>
> Bref, j'ai capitulé et laissé l'utilisateur se débrouiller s'il ouvre 2 fois
> la même applic.
>
> Mais ça me titille encore la glande de la programmation, de temps en temps.
> :-)


Et quelque chose comme ceci ne suffit pas ?

//----------------------------------------------------------------------
function VerifExeTourne(const FileName: string): Boolean;
//----------------------------------------------------------------------
var
ContinueLoop : Boolean;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
ProcName : string;
PathProcName : string;
begin

Result := False;
FSnapshotHandle := CreateTool32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);

while Integer(ContinueLoop) <> 0 do
begin
ProcName :=
UpperCase(ExtractFileName(FProcessEntry32.szExeFil e));
PathProcName := UpperCase(FProcessEntry32.szExeFile);

if (ProcName = UpperCase(FileName))
or (PathProcName = UpperCase(FileName)) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);

end;
//----------------------------------------------------------------------

--

Dominique


  Réponse avec citation
 
Page generated in 0,06752 seconds with 9 queries