Bonjour à tous,
J'avance doucement mais surement dans mon projet d'afficher du contenu Web en arrière plan du bureau (Dont j'ai déjà parlé ici) et j'ai une nouvelle interrogation.
Je récupère donc le handle de la fenêtre située sous les icônes du bureau de Windows grâce au morceau de code suivant :
L'idée est ensuite d'y ajouter une fenêtre fille plein écran et sans bordure y affichant du Web grâce à WebView2 (Ça peut changer, Ultralight me fait de l’œil 👀 ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { HWND p = FindWindowEx(hwnd, NULL, L"SHELLDLL_DefView", NULL); HWND* ret = (HWND*)lParam; if (p) { *ret = FindWindowEx(NULL, hwnd, L"WorkerW", NULL); } return true; } HWND get_wallpaper_window() { HWND progman = FindWindow(L"ProgMan", NULL); SendMessageTimeout(progman, 0x052C, 0, 0, SMTO_NORMAL, 1000, nullptr); HWND wallpaper_hwnd = nullptr; EnumWindows(EnumWindowsProc, (LPARAM)&wallpaper_hwnd); return wallpaper_hwnd; }
Et là c'est le drame : je n'ai pas un affichage satisfaisant en récupérant les dimensions de la fenêtre wallpaper_hwnd.
Il semblerait que d'une façon ou d'une autre, le paramètre d'affichage Windows "Mise à l'échelle" ai une influence sur les dimensions de la fenêtre.
Si ce paramètre est à 100% tout va bien, les dimensions obtenues par GetClientRect(wallpaper_hwnd, &wallpaperClientRect); sont (à peu près) celles attendues, à savoir deux moniteurs 4k.
Si ce paramètre est à 125% (ce qui est mon cas si je ne veux pas me bousiller la rétine), les dimensions obtenues ne sont plus que de 80%.
Lorsque je donne ces dimensions à ma fenêtre fille lors de sa création, si la mise à l'échelle est de 125%, celle-ci n'occupe plus tout mon bureau mais bien 80% (à la louche).
J'ai tenté autre chose : donner le style WS_MAXIMIZE et la position et taille à CW_USEDEFAULT à ma fenêtre fille.
Le résultat est étrange : mon bureau devient intégralement blanc, comme si la fenêtre occupait effectivement tout l'espace mis rien n'y est dessiné. Je ne peux pas changer sa couleur dans WM_PAINT ni y afficher mon contenu Web. Lorsque je demande les dimensions de ma fenêtre fille, je n'ai que des 0.
Si je donne le style WS_MAXIMIZE mais que je donne une dimension (mettons 500 sur 500), j'ai toujours mon bureau intégralement blanc mais mon contenu s'affiche bien dans un carré de 500 par 500.
J'ai essayé de récupérer les dimensions à donner à ma fenêtre grâce à MonitorFromWindow() et GetDesktopWindow() mais là encore je n'ai que du 80% lorsque la mise à l'échelle est à 125%.
Avez-vous une solution ou des pistes pour donner les dimensions de l'arrière plan de mon bureau à ma fenêtre fille ?
Merci !
Partager