Donner le focus à une fenêtre

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Donner le focus à une fenêtre

Message par Le Soldat Inconnu »

Salut,

je cherche le moyeu pour donner le focus à une fenêtre appartenant à un autre process.

SetForegroundWindow_ et GetForegroundWindow_ c'est du MS. en clair ça ne marche que quand ça veut :(
même le code de Fred sur ce sujet ne marche pas dans mon cas(SetReallyForegroundWindow)

pour donner le focus, j'ai un moyen paaliatif qui marche pratiquement à 100 %
mais c'est GetForeGroundWindow_() qui plante donc je ne peux pas vérifier que j'ai bien donner le focus (ce qui est absolument nécessaire dans mon programme)

alors si quelqu'un à une solution miracle (à part formater le dur et installer linux :mrgreen: ) merci d'avance :wink:
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)]
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

alors si quelqu'un à une solution miracle (à part formater le dur et installer linux ) merci d'avance
L'herbe est toujours plus verte dans le près du voisin :wink:
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Voici une de mes routine que j'utilise pour mettre en premier plan des fenêtre du system.

Le code marche et ne plante pas (sur une config normale :wink: )

Code : Tout sélectionner


Procedure premier_plan(nom_fenetre$)
SetForegroundWindow_(FindWindow_(0,nom_fenetre$))
EndProcedure


premier_plan("Nom_de_ta_fenetre")
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

je confirme, sa marche ;)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ben, c'est ce qui ne marche pas chez moi que ce soit sous 98, 2000, ou XP
ça ne marche que quand ça veut :(

je pense que mon problème vient du fait que je cherche à mettre au premier un autre process que j'ai mis en fenêtre enfant de mon programme.

tiens, ça me donne une idée, je vais essayer.
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)]
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

il me semble qu'il y'a une autre fonction pour les chils ?! :?:

Le code c pour les fenêtres principales ! :D
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Microsoft a modifié le comportement de ces fonctions pour eviter qu'une appli qui se lance en arriere plan vole le focus alors qu'on est en train de bosser tranquillement. C'est pour cela que le SetReallyForegroundWindwo() est a utiliser avec parcimonie. C'est pour eviter les derives : une bonne appli ne devrait pas forcer le focus :).
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

Je suis d'accord avec toi Fred mais bon tu peux avoir besoin de cette fonction de façon légitime, le Soldat a surement une bonne raison dans ce cas et c'est tout de même vraiment chiant cette manie de modifier les API toutes les 5 minutes.

Comment tu gère la compatibilité entre les version avec ce genre de politique !

JL
Quand on me gonfle trop j'éclate, sinon ça va !
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

moi, 'jen ai besoin pour envoyer des infos clavier pour mon bi-exploreur (une fenêtre qui met en child 2 explorateurs l'un au dessus de l'autre)

il faut donc que je donne le focus à la fenêtre pour envoyer des infos clavier afin de modifier l'affichage de l'explorateur automatiquement ou à la demande de l'utilisateur. comme je n'arrive pas à passer par un sendmessage_(window, #KeyDown, ....), je passe par ce principe.

l'astuce que j'ai trouvé pour donner le focus, c'est la suivante :
je récupère le texte de la barre d'adresse et je le remet dedans, puis je fais un appui sur la touche enter par le biais d'un sendmessage (tiens la ça marche, super comme comportement, c'est très constant)
et avec ceci, je donne toujours le focus à la fenêtre mais je n'arrive pas à le valider par getforegroungwindow_(), chercher l'erreur.

enfin, j'ai finis par trouver une astuce dans l'organisation de mon code qui me permet de m'en passer, ouf :roll:
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)]
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

pour donner le focus "clavier" a une fenetre, il faut utiliser SetFocus, je sais pas si sa marche pour une fenetre qui n'et pa du meme process, a essayer
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Non, justement :(
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)]
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour
Pourriez vous essayer cela et me donner le résultat SVP !

Code : Tout sélectionner

Procedure devant(hand)
  res = SetForegroundWindow_(hand)  
Delay(1000)
EndProcedure


RunProgram("Sol.exe")
RunProgram("freecell.exe")

Sol=FindWindow_(0,"Solitaire")
Delay(100)
fre=FindWindow_(0,"FreeCell")
res.b=0
Delay(100)
For n=1 To 10
  devant(Sol)
  devant(fre)
Next
Denis

Bonne Jounée à tous
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ben, en fait, je peux me servir de setforegroundwindow une fois mais une seule fois, je ne peux pas le rappeler après car il ne marchera pas :(
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)]
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour

Tu tournes avec quel OS ? 98 Me Xp ??
Denis

Bonne Jounée à tous
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

problème constaté sous 2000 et XP :wink:
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)]
Répondre