Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1493 connectés 

 


Dernière réponse
Sujet : Windows : comment interdire de lancer 2 fois un prog (en C ou autre)
darthbob 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:

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
darthbob 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:
gilou 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+,
gilou 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+,
BifaceMcLeOD 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...
JWhy 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 ;)
darthbob 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...)
JWhy 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--

darthbob tout est dans le sujet

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR