OVH Cloud OVH Cloud

Empecher la minimisation d'une fenetre

4 réponses
Avatar
Aurélien REGAT-BARREL
Bonjour à tous,
Comment certains softs font-ils pour ne pas se faire minimiser lors d'un
clic sur le racourci bureau ou lors d'un "<Windows> + M" ? Comment Explorer
fait-il pour forcer la minimisation des fenêtres ?
Merci.

--
Aurélien REGAT-BARREL

4 réponses

Avatar
Christian ASTOR
Aurélien REGAT-BARREL a écrit:

Comment certains softs font-ils pour ne pas se faire minimiser lors d'un
clic sur le racourci bureau ou lors d'un "<Windows> + M" ?



Cela dépend de la façon de minimiser.
Par ex, une Tool Window n'est pas minimisée par VK_RWIN + M

Comment Explorer
fait-il pour forcer la minimisation des fenêtres ?



Ca dépend aussi.
Soit par IShellDispatch::MinimizeAll(), soit, Quick Launch par ex, en
postant DTM_RAISE au Desktop (le faisant alors passer en HWND_TOP)
Avatar
Aurélien Regat-Barrel
> > Comment certains softs font-ils pour ne pas se faire minimiser lors d'un
> clic sur le racourci bureau ou lors d'un "<Windows> + M" ?

Cela dépend de la façon de minimiser.
Par ex, une Tool Window n'est pas minimisée par VK_RWIN + M



Quelles sont les façons de minimiser ?

> Comment Explorer
> fait-il pour forcer la minimisation des fenêtres ?

Ca dépend aussi.
Soit par IShellDispatch::MinimizeAll(), soit, Quick Launch par ex, en
postant DTM_RAISE au Desktop (le faisant alors passer en HWND_TOP)



IShellDispatch::MinimizeAll(), je me doute qu'elle fait une énumération des
fenêtres, puis ShowWindow( SW_MINIMIZE ).
Mais apparement les fenêtres modales VB sont minimisées au dessus de la
barre des tâches, ce serait une gestion particumière de VB.
En fait je crois que c'est IShellDispatch4::ToggleDesktop() qui est appelé,
et là ça marche pour les fenêtres VB. Mais c'est dispo que sous XP.
Apparement l'équivalent "portable" c'est :
PostMessage(FindWindow("Shell_TrayWnd", NULL), WM_COMMAND, MAKELONG(415,
0), 0);
Mais c'est pas documenté. Je cherche une méthode plus propre.

Je n'ai trouvé aucune doc (google, msdn) sur DTM_RAISE, aurais-tu un lien ?
Merci.


--
Aurélien REGAT-BARREL
Avatar
Christian ASTOR
Aurélien Regat-Barrel a écrit:

En fait je crois que c'est IShellDispatch4::ToggleDesktop() qui est appelé,
et là ça marche pour les fenêtres VB. Mais c'est dispo que sous XP.
Apparement l'équivalent "portable" c'est :
PostMessage(FindWindow("Shell_TrayWnd", NULL), WM_COMMAND, MAKELONG(415,
0), 0);



Non, ça appelle ::MinimizeAll() (Tool Windows pas réduites)

Je n'ai trouvé aucune doc (google, msdn) sur DTM_RAISE, aurais-tu un lien ?



J'ai un lien, mais ça pointe vers mon disque dur...

#define DTM_RAISE (WM_USER + 83)
0 en lParam sur "Progman"
Associé à SetForegroundWindow(), ça correspond à un toggle du Desktop
sur Win 9x, qui réduit tout dans ce cas, bien que le foreground soit en
réalité mis sur une Tool Window cachée créée par SHCreateWorkerWindow()
(classe "WorkerA" ou "WorkerW"), dans l'espace d'adressage de l'Explorer
(donc hook si on voulait refaire exactement la même chose)
Avatar
Aurélien Regat-Barrel
> > Apparement l'équivalent "portable" c'est :
> PostMessage(FindWindow("Shell_TrayWnd", NULL), WM_COMMAND,


MAKELONG(415,
> 0), 0);

Non, ça appelle ::MinimizeAll() (Tool Windows pas réduites)



Comment sais-tu que 415 = MinimizeAll ?

J'ai un lien, mais ça pointe vers mon disque dur...



C'est pas un problème. Clic droit -> partager :-)

#define DTM_RAISE (WM_USER + 83)
0 en lParam sur "Progman"
Associé à SetForegroundWindow(), ça correspond à un toggle du Desktop
sur Win 9x, qui réduit tout dans ce cas, bien que le foreground soit en
réalité mis sur une Tool Window cachée créée par SHCreateWorkerWindow()
(classe "WorkerA" ou "WorkerW"), dans l'espace d'adressage de l'Explorer
(donc hook si on voulait refaire exactement la même chose)



DTM_RAISE, SHCreateWorkerWindow...
Ou as-tu ces infos ? Google et MSDN restent muets.
Tu as accès au source Windows ? (les MVP le peuvent il me semble)

--
Aurélien REGAT-BARREL