Page 1 sur 2

Comment fait on pour ne pas lancer deux fois le même prog

Publié : lun. 03/janv./2005 11:48
par Patix
Comment fait on pour ne pas lancer deux fois le même prog ?

ya t'il une commande ds pure ou faut il créer une procédure avec des commandes que je n'ai pas eu l'occasion de découvrir :-) ?

Publié : lun. 03/janv./2005 13:10
par nico

Code : Tout sélectionner

#MUTEX_ALL_ACCESS =  $1F0001 

Application.s="Mon application" 

Hmutex = OpenMutex_(#MUTEX_ALL_ACCESS,#False,Application)
If Hmutex=0
  ;Si le mutex existe alors l'application est déjà lancée. 
  ;sinon on le crée 
  Hmutex = CreateMutex_(#Null, #True, Application)
  If Hmutex=0
    ;Fin du programme mutex non créer 
    End 
  EndIf 
Else 
  ;On recherche l'application 
  ;pour la mettre au premier plan. 
  Handle=FindWindow_(#Null, Application) 
  ShowWindow_(Handle,#sw_hide)  
  ShowWindow_(Handle,#sw_minimize) 
  ShowWindow_(Handle,#sw_restore)  
  End 
EndIf 

;Le reste du code ici 
If OpenWindow(0, 431, 186, 325, 214,  #PB_Window_SystemMenu, Application) 
  Repeat 
    Event=WaitWindowEvent() 
  Until Event = #PB_EventCloseWindow 
EndIf  

CloseHandle_(Hmutex) 
End

Publié : lun. 03/janv./2005 17:53
par Oliv
Sur www.purearea.net il y a une librarie qui le fait si tu ne veux pas t'embêter avec du code, mais c'st bien de savoir comment ça fonctionne

Publié : lun. 03/janv./2005 19:15
par Le Soldat Inconnu
oui, intéressant comme code.

(je peux le mettre sur 2Dev ?)

Publié : lun. 03/janv./2005 20:22
par nico
Tous les codes que je poste sont libres de tous droits; donc tu peux mettre le code sur 2Dev sans m'en demander la permission; je te demanderai juste de me le faire savoir, que je sois au courant pour d'éventuelles mise à jour.

Aussi quand on poste un code sur le Forum dont une partie reprend un code posté par un autre; c'est bien d'en donner l'origine par respect pour celui qui l'a posté.

Publié : mar. 04/janv./2005 18:56
par Oliv
Tu as du aire une erreur :wink:

Code : Tout sélectionner

CloseHandle_(Hmutex)
C'est n'est pas handle qui faut fermer et non hmutex ?

Publié : mar. 04/janv./2005 19:06
par Oliv
Et pour les processus quelqu'un sait ? :oops:

Publié : mar. 04/janv./2005 19:11
par Le Soldat Inconnu
ben, pareil non ?

suffit de retirer la partie qui met le prog au premier plan

Publié : mar. 04/janv./2005 19:26
par nico
J'ai corrigé le code suite au post d' Oliv.

Publié : mar. 04/janv./2005 20:03
par Oliv
Le Soldat Inconnu a écrit :ben, pareil non ?

suffit de retirer la partie qui met le prog au premier plan
Non justement :(

Publié : mar. 04/janv./2005 20:41
par nico
Si tu as un exemple Oliv, je veux bien regarder ça de plus près.

:)

Publié : mar. 04/janv./2005 20:55
par Oliv
Non justement j'ai pas d'exemple et comme ce soir je n'avais pas envie de chrcher, je me suis dit que vous alliez savoir :roll: . Enfin je chercherait demain :wink:

Publié : jeu. 06/janv./2005 0:43
par Patix
Nico,

Je te remercie pour ton code mais étant débutant, dans pure, je ne comprend pas pour commencer les lignes :
Hmutex = OpenMutex_(#MUTEX_ALL_ACCESS,#False,Application)
Hmutex = CreateMutex_(#Null, #True, Application)

OpenMutex_ et Create_Mutex_
ceux sont des commandes pure ou ....

Excuse mon ignorance :-)

Publié : jeu. 06/janv./2005 1:11
par Backup
toute les commandes qui s'ecrivent avec un "_" a la fin sont des appels
a l'API Windows !!
ex : CreateMutex_( )



en pure ont utilise les apis comme des commandes , elle ne font pas partie du language, ce sont des commande liés au system d'exploitation
des commandes externe au language purebasic en fait !!


:)

Publié : jeu. 06/janv./2005 9:02
par hardy
J'avais écrit un petit tuto sur les mutex (mutual exclusion). Fais une recherche avec mot clé.
Les mutexs sont des objets destinés à la synchronisation, et effectivement, il peuvent servir ici.

Ceci-dit, si ton prog ouvre une fenêtre, le plus simple, c'est d'utiliser un FindWindow_(0,titre$)

Pour les processus, on peut en obtenir la liste vie des comandes API :

voir doc Microsoft sur CreateToolhelp32Snapshot, Process32First, Process32Next.

Pour utiliser les fonctions Windows, tu as intérêt à télécharger la doc : plateforme SDK. Je n'ai pas le lien sous la main. Qui peut le mettre?