Windows : comment interdire de lancer 2 fois un prog (en C ou autre)

Windows : comment interdire de lancer 2 fois un prog (en C ou autre) - Programmation

Marsh Posté le 16-02-2001 à 16:27:46    

tout est dans le sujet


---------------
<a href="http://www.laprise.org">La prise</a> : mets les doigts dedans !
Reply

Marsh Posté le 16-02-2001 à 16:27:46   

Reply

Marsh Posté le 16-02-2001 à 16:32:05    

en delphi, dans ton .DPR, tu ajoutes:

Citation :


var
  FSemaphore: THandle;
begin
  {Only allow one instance of this program to run}
  FSemaphore:= CreateSemaphore(nil, 0, 1, 'LeNomDuProgramme' );
  if ((FSemaphore<>0) and (GetLastError=ERROR_ALREADY_EXISTS)) then
  begin
    CloseHandle(FSemaphore);
    Halt(0);
  end;
  Application.Initialize;
  Application.Run;
end.
 


 
c'est une API windows  , donc j'imagine que tu trouveras la correspondance dans le langage qui te convient !

 

--Message édité par JWhy--


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 16-02-2001 à 16:39:06    

Trop fort JWhy !
 
J'ai testé avec Delphi, c'est nickel
 
le problème est qu'il faut que j'ajoute ça dans un prog Powerbuilder...
 
Si tu as une idée (appel Dll ou autre...)


---------------
<a href="http://www.laprise.org">La prise</a> : mets les doigts dedans !
Reply

Marsh Posté le 16-02-2001 à 16:45:09    

Ouaip, si tu ne peux pas faire des appels aux API windows avec PB, il ne te reste pas trop de choix... il faut en effet que tu externalises l'appel a la fonction: dll, com, etc ...
bonne chance ;)


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 16-02-2001 à 22:33:45    

Normalement, en API Windows pure, 2 des paramètres du WinMain s'appellent "hInstance" et "hPrevInstance", tous deux de type HINSTANCE. Evidemment, dans ce cas, il suffit de tester la valeur de hPrevInstance. Si elle est non nulle, c'est qu'il existe déjà une autre instance de ce programme en mémoire.
 
Problème : la plupart des outils de dev Windows masquent le WinMain...

Reply

Marsh Posté le 16-02-2001 à 22:55:08    

Ca marche plus tout a fait comme ca je crois, il me semble que sur certaines versions recentes de Windows, hPrevInstance est a 0 systematiquement et qu'il faut tester ca autrement.
Il doit y avoir des articles/tips dans le wddj a ce sujet.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-02-2001 à 23:18:55    

D'ailleurs, c'est dans la doc de WinMain:
 
hPrevInstance
 
[in] Handle to the previous instance of the application. For a Win32-based application, this parameter is always NULL.  
 
If you need to detect whether another instance already exists, create a uniquely named mutex using the CreateMutex function. CreateMutex will succeed even if the mutex already exists, but the GetLastError function will return ERROR_ALREADY_EXISTS. This indicates that another instance of your application exists, because it created the mutex first.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-02-2001 à 21:48:28    

gilou > je confirme que la valeur de [in] est forcé à NULL. :sarcastic:  
 
J'ai donc résolu le problème en construisant une foonction en C avec création de sémaphore (merci JWhy ;) )
 
Je l'appelle depuis mon prog en Powerbuilder et :
 
ça marche !  :hap::hap::hap::hap:


---------------
<a href="http://www.laprise.org">La prise</a> : mets les doigts dedans !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed