Donner le focus à une fenêtre
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Donner le focus à une fenêtre
Salut,
Gros problème : je n'arrive pas à donner le focus correctement à une fenêtre.
j'utilise pour le moment l'Api SetForeGroundWindow() mais ça marche que quand ça veut et ça m'énerve
Quelqu'un a-t-il une autre solution, merci
Mon but étant de donner le focus à une fenêtre afin de pouvoir envoyer des informations de la part du clavier vers la fenêtre.
Gros problème : je n'arrive pas à donner le focus correctement à une fenêtre.
j'utilise pour le moment l'Api SetForeGroundWindow() mais ça marche que quand ça veut et ça m'énerve
Quelqu'un a-t-il une autre solution, merci
Mon but étant de donner le focus à une fenêtre afin de pouvoir envoyer des informations de la part du clavier vers la fenêtre.
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
j'ai ça, et visiblement, c'est de toi :
et ça marche en plus ouf.
Code : Tout sélectionner
Procedure SetForegroundWindow(Window)
hWnd = WindowID(Window)
; If the window is in a minimized state, maximize now
If GetWindowLong_(hWnd, #GWL_STYLE) & #WS_MINIMIZE
ShowWindow_(hWnd, #SW_MAXIMIZE)
UpdateWindow_(hWnd)
EndIf
; Check To see If we are the foreground thread
foregroundThreadID = GetWindowThreadProcessId_(GetForegroundWindow_(), 0)
ourThreadID = GetCurrentThreadId_()
; If not, attach our thread's 'input' to the foreground thread's
If (foregroundThreadID <> ourThreadID)
AttachThreadInput_(foregroundThreadID, ourThreadID, #TRUE);
EndIf
; Bring our window To the foreground
SetForegroundWindow_(hWnd)
; If we attached our thread, detach it now
If (foregroundThreadID <> ourThreadID)
AttachThreadInput_(foregroundThreadID, ourThreadID, #FALSE)
EndIf
; Force our window To redraw
InvalidateRect_(hWnd, #NULL, #TRUE)
EndProcedure
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
enfin, ça marche, il faut ajouter un delay derrière ce code, sinon, la fenêtre n'a pas le temps de passer au premier plan et de prendre le focus et ça gatouille
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Attention lorsque une API renvoie une valeur il faut imperativement l'attribuer à une variable sous PB sinon cela ne marche pas !
Exemple
SetForegroundWindow_(hand) ne fonctionne pas ou mal, mais
res = SetForegroundWindow_(hand) fonctionne parfaitement
Le code suivant pour donner le focus au jeux du solitaire préalablement lancer sur la machine puis l'avoir plein écran :
Exemple
SetForegroundWindow_(hand) ne fonctionne pas ou mal, mais
res = SetForegroundWindow_(hand) fonctionne parfaitement
Le code suivant pour donner le focus au jeux du solitaire préalablement lancer sur la machine puis l'avoir plein écran :
Code : Tout sélectionner
hand = FindWindow_(0,"Solitaire")
res=SetForegroundWindow_(hand)
res=ShowWindow_(hand, #SW_MAXIMIZE)
Denis
Bonne Jounée à tous
Bonne Jounée à tous
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Non Fred, je t'assure que ce que j'ai écrit est vrai , mais je n'ai pas d'exemples foireux sous la main .
Ca fait un moment que c'est arrivé et je n'ai pas eu de nouveau ce problème.
Moi non plus je n'explique pas pourquoi, mais je maintiens ce que je dis. Je n'ai aucune raison de raconter des salades.
Ca fait un moment que c'est arrivé et je n'ai pas eu de nouveau ce problème.
Moi non plus je n'explique pas pourquoi, mais je maintiens ce que je dis. Je n'ai aucune raison de raconter des salades.
Je viens de me rappeler comment je m'étais aperçu de ça.
J'utilisais l'API et ca marchait pas et donc j'ai fait un débug pour voir le résultat de l'API et là ça marchait.
J'enlève le debug et ça marche plus.
J'ai ensuite mis a = SetwindowLong_(...) et ça marchait.
ça marchait, raison pour laquelle lorsque j'utilise cette API je met toujours a =
C'est surement à tort mais comme je n'ai pas cherché la vrai raison, j'en suis resté là.
J'utilisais l'API et ca marchait pas et donc j'ai fait un débug pour voir le résultat de l'API et là ça marchait.
J'enlève le debug et ça marche plus.
J'ai ensuite mis a = SetwindowLong_(...) et ça marchait.
ça marchait, raison pour laquelle lorsque j'utilise cette API je met toujours a =
C'est surement à tort mais comme je n'ai pas cherché la vrai raison, j'en suis resté là.
Je suis d'accord avec toi Fred,
j'ai écrit assez de code asm pour comprendre que l'affectation d'une valeur à eax ne génère pas d'erreur si on ne la retourne pas bien qu'elle soit retournée sans être affectée à une variable.
ca me rapelle le code de Régis qui utilisait une structure LV_Coulumn (de mémoire) sous XP et qui générait une erreur car on écrasait les données de la pile et en particulier l'adresse de retour.
En utilisant la déclaration LVCOLUMN de MS, plus de problèmes.
SI j'arrive à recréer le problème, je t'envoie le code.
j'ai écrit assez de code asm pour comprendre que l'affectation d'une valeur à eax ne génère pas d'erreur si on ne la retourne pas bien qu'elle soit retournée sans être affectée à une variable.
ca me rapelle le code de Régis qui utilisait une structure LV_Coulumn (de mémoire) sous XP et qui générait une erreur car on écrasait les données de la pile et en particulier l'adresse de retour.
En utilisant la déclaration LVCOLUMN de MS, plus de problèmes.
SI j'arrive à recréer le problème, je t'envoie le code.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
tient, au fait, pour le coup de l'attente, j'ai eu 2 problèmes à la suite.
il faut attendre que la fenêtre prenne le focus et après j'envoyais l'info clavier ctrl V puis ctrl C et bien il faut aussi attendre que le ctrl V soit effectué.
faut que je reteste juste avec le delai pour le ctrl V mais à mon avis, il faut les 2 car y'a des fois ou ça arrive à m'afficher que je m'ai plus d'une seconde pour donner le focus
il faut attendre que la fenêtre prenne le focus et après j'envoyais l'info clavier ctrl V puis ctrl C et bien il faut aussi attendre que le ctrl V soit effectué.
faut que je reteste juste avec le delai pour le ctrl V mais à mon avis, il faut les 2 car y'a des fois ou ça arrive à m'afficher que je m'ai plus d'une seconde pour donner le focus
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Bonjour à tous
Je ne sais pas pourquoi Fred se refuse à accepter l'évidence. Je ne sais pas pourquoi, n'ai aucune explication ) donner, mais c'est ainsi si on affecte pas une variable à certaines API, elles ne fonctionnent pas pour certaine et fontionnent d'une manière aléatoire pour d'autre.
Je ne sais pas pourquoi Fred se refuse à accepter l'évidence. Je ne sais pas pourquoi, n'ai aucune explication ) donner, mais c'est ainsi si on affecte pas une variable à certaines API, elles ne fonctionnent pas pour certaine et fontionnent d'une manière aléatoire pour d'autre.
Denis
Bonne Jounée à tous
Bonne Jounée à tous