donner le focus à la fenêtre d'un autre programme

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

donner le focus à la fenêtre d'un autre programme

Message 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 :-).
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Arf... on dirait que personne ne sait... :'(
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message 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
Quand on me gonfle trop j'éclate, sinon ça va !
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

SetForeGroundWindow_( ..

mais ça ne marche qu'une seule fois, ms à mis une sécurité dessus :?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

En tout cas voila le retour de ton avatar.

Impec

JL
Quand on me gonfle trop j'éclate, sinon ça va !
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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 :-).
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message 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 :lol: )

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
Denis

Bonne Jounée à tous
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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é]
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message 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
Denis

Bonne Jounée à tous
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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.
Répondre