Salut,
Je cherche un moyen pour mettre ma fenêtre au premier plan, j'ai essayé le message WM_ACTIVATE et aussi SetForegroundWindow(HWND) mais j'y arrive pas (ni avec l'un ni avec l'autre)
Merci de m'aider![]()
Salut,
Je cherche un moyen pour mettre ma fenêtre au premier plan, j'ai essayé le message WM_ACTIVATE et aussi SetForegroundWindow(HWND) mais j'y arrive pas (ni avec l'un ni avec l'autre)
Merci de m'aider![]()
tu veux dire tout le temps au premier plan ?
Sinon, tu as aussi BringWindowToTop
Non je veut juste faire passer une fenêtre au premier plan quant j'appuye sur une touche (avec le hook)Envoyé par nico-pyright(c)
tu as essayé BringWindowToTop ? ou tout simplement un ShowWindow ?
Pour BringWindowToTop() ça marche pas du tout, et pour ShowWindow je sais pas trop ce qu'il faut mettre, j'ai essayé SW_SHOW et SW_RESTORE la fenêtre passe au premier plan que si elle était (avant) dans le systray ou en tâche d'arrière plan.
Moi je voudrait qu'elle passe devant dès qu'on le lui dit même si elle se trouve dans la barre des tâches (en fait c'est quant elle se trouve dans la barre de tache que ça marche pas)
Rectification: ça marche "comme" avec ShowWindow() (que depuis la systray ou tâche de fond) sauf que la fenêtre ne passe pas au premier plan et la fenêtre active (avant l'appel à BringWindowToTop() ) passe en inactive (donc ausune fenêtre active si vous suivez)Envoyé par damien99
Tout ça pour dire que "BringWindowToTop()" fait quelque chose.
regarde ici ... http://www.developpez.net/forums/vie...ght=showwindow
une bidouille ... mais bon
En combinant :
ça devrait le faire il me semble.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ::SetWindowPos(m_hWnd ,HWND_TOPMOST,...,...,...,...,SWP_SHOWWINDOW); ::SetWindowPos(m_hWnd ,HWND_NOTOPMOST,...,...,...,...,SWP_SHOWWINDOW); //et le code pour setFocus
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
je me suis servi de ça, ça fait un peu bricolo mais ça marche voila mon code :Envoyé par nico-pyright(c)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ShowWindow(hwnd, SW_MINIMIZE); ShowWindow(hwnd, SW_SHOWNORMAL);![]()
En fait pour que "SetForegroundWindow(HWND)" fonctionne il ne faut pas l'appeller depuis l'instance de la fenêtre que l'on veut mettre au premier plan.
La solution que j'ai trouvé est d'appeller cette fonction depuis une DLL.
![]()
En fait j'ai eu d'autre problème avec SetForegroundWindow(HWND) et après 4h d'acharnement (j'ai fait une cinquantaines de test et X recherches) j'ai réussit à comprendre mon problème :Envoyé par damien99
En fait Windows interndit à l'application de mettre des fenêtres au premiers plan si l'application elle même n'est pas à l'avant plan.
L'astuce consiste donc à attacher un thread sur l'application qui est à l'avant plan et d'y executer notre fonction SetForegroundWindow(HWND) :
Ce code doit être placé dans la boucle principale du programme et non pas dans un thread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 ShowWindow(hwnd, SW_RESTORE); //la fenêtre doit être restaurée pour que SetForegroundWindow fonctionne DWORD foregroundThreadID = GetWindowThreadProcessId(GetForegroundWindow(), 0); //ID du thread au premier plan DWORD ourThreadID = GetCurrentThreadId(); //ID de notre thread (thread de l'application) if (foregroundThreadID != ourThreadID) //si notre application n'est pas à l'avant plan { AttachThreadInput(foregroundThreadID, ourThreadID, TRUE); //on attache le thread de notre application sur le thread de l'application qui est au premier plan SetForegroundWindow(hwnd); //maitenant on peut faire passer notre fenêtre au premier plan AttachThreadInput(foregroundThreadID, ourThreadID, FALSE); //on détache le thread } else SetForegroundWindow(hwnd); //si notre notre application est à l'avant plan on utilise directement SetForegroundWindow![]()
PS: Si on utilise SetForegroundWindow dans un hook (comme je faisait avant) on a pas ce problème car un hook c'est toujours à l'avant plan.
![]()
Salut,
qu'est ce qui se passe si ton application est dans la barre des tâches et qu'il n'y a aucune autre application qui tourne ? Ca marche quand même ?
Partager