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
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 ?

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

. Enfin je chercherait demain

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?