Page 1 sur 1
donner le focus à la fenêtre d'un autre programme
Publié : mer. 03/nov./2004 12:25
par gansta93
Bonjour,
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?
En espèrant avoir été compris

.
Publié : mer. 03/nov./2004 15:00
par gansta93
Arf... on dirait que personne ne sait... :'(
Publié : mer. 03/nov./2004 17:19
par Lukky
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
Publié : mer. 03/nov./2004 17:26
par gansta93
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.
Pour mon avatar, je vais voire ça tout dessuite.
Publié : mer. 03/nov./2004 17:29
par Le Soldat Inconnu
SetForeGroundWindow_( ..
mais ça ne marche qu'une seule fois, ms à mis une sécurité dessus

Publié : mer. 03/nov./2004 19:18
par Lukky
En tout cas voila le retour de ton avatar.
Impec
JL
Publié : mer. 03/nov./2004 21:57
par gansta93
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

.
Publié : jeu. 04/nov./2004 16:40
par brossden
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

)
Code : Tout sélectionner
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
Publié : jeu. 04/nov./2004 19:10
par nico
Une autre solution
Code : Tout sélectionner
#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
[Edit:Modifié]
Publié : dim. 07/nov./2004 19:35
par brossden
Encore plus cours :
Code : Tout sélectionner
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
Publié : lun. 08/nov./2004 10:30
par gansta93
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.