J'ai déjà fais tout le programme, mais il ne me manque qu'une chose.
J'ai bien fais la détection de si oui ou non il était déjà lancé (Lib AppRunning) mais maintenant je voudrais faire comme tous les autres programmes font: quand une instance est déjà ouverte, elle est ramenée au premier plan.
Comment pourais-je faire ça?
Lukky a écrit :Ou alors que personne ne t'a compris (moi si mais j'ai pas la réponse).
Sinon c'est bizarre mais depuis un certain temps je n'ai plus l'affichage de ton avatar.
JL
Ben traduit... j'voi pas comment dire ça autrment appart: ouvre une fenêtre de Winamp, et reclique sur l'icône, sauf si tu as activé pour avoir plusieurs instances, c la fenêtre ouverte précédemment qui s'ouvrira.
Pour PureBasic... je ne sais pas si ça le fait.
Le Soldat Inconnu a écrit :SetForeGroundWindow_( ..
mais ça ne marche qu'une seule fois, ms à mis une sécurité dessus
Et avec SetForAgroundWindow... je peux dire à un programme de mettrre au premier plan la fenêtre de l'autre instance de lui-même?
Mais... si ça ne marche qu'une foie... Comment font Winamp et les autres?
Vais rechercher dans CodeArchiv mais il me semble qu'il n'y a pas ça.
[edit]Je vien de chercher, et sauf erreur cherchation (vive le français!) de ma part, ç n'y est pas... et à paremment le SetForEgroundWindow_(hwnd) ça a l'hair d'être pas compréhensible pour moi... pourtant l'anglais ne me pause pas trop de problèmes (quelques uns quand même).[/edit]
:...: je vien d'inventer ma balise .
Voici peut être ce que tu cherche à faire, et pour l'avoir testé après avoir réalisé un exécutable, cela fonctionne à l'infini (enfin pas mal de fois )
Global Prog.s
Prog.s = "Programme"
Procedure MonoProcess(MonProg.s)
Hwnd = FindWindow_( 0, 0 )
While Hwnd <> 0
Txt.s = Space(256)
GetWindowText_(Hwnd, Txt, 256)
If FindString(Txt,MonProg,1) > 0
Res=1
Handle=Hwnd
EndIf
Hwnd = GetWindow_(Hwnd, #GW_HWNDNEXT)
Wend
ProcedureReturn Handle
EndProcedure
Procedure Open_Window_0()
If OpenWindow(0, 431, 186, 325, 214, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , Prog.s)
If CreateGadgetList(WindowID())
ButtonGadget(1, 81, 147, 162, 29, "Fin du Programme")
EndIf
EndIf
EndProcedure
;************** Test si le programme est déjà lancé et si oui activation de celui-ci
ret = SetForegroundWindow_(MonoProcess(Prog))
Delay(10)
If ret >0
End
EndIf
;************************** Sinon continuation du programme ci après en exemple
Open_Window_0()
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
;Debug "WindowID: " + Str(EventWindowID())
GadgetID = EventGadgetID()
If GadgetID = 1
End
EndIf
EndIf
Until Event = #PB_EventCloseWindow
End
#MUTEX_ALL_ACCESS = $1F0001
Application.s="Mon application"
If OpenMutex_(#MUTEX_ALL_ACCESS,#False,Application)=0
;Si le mutex existe alors l'application est déjà lancée.
;sinon on le crée
If CreateMutex_(#Null, #True, Application)= 0
;Fin du programme mutex non créer
End
EndIf
Else
;On recherche l'application
;pour la mettre au premier plan.
Handle=FindWindow_(#Null,"Mon 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
Application.s="Mon application"
If SetForegroundWindow_(FindWindow_(#Null,"Mon application"))<> 0
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
End
Merci beaucoup... j'ai finalemant opté pour le dernier code de Nico mais je vais quand même tous les enregistrer et les examiner pour bien comprendre... encore merci à tous.