Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fond d'écran : recherche de la "petite bête"

4 réponses
Avatar
Gloops
Bonjour tout le monde,

A la suite d'un plantage de Active Desktop (plus de papier de fond=20
d'=E9cran, le bouton cliquez ici pour relancer, le message scripts=20
inactiv=E9s, continuer oui ou non), j'ai =E9crit un programme pour revali=
der=20
mon fond d'=E9cran (apr=E8s coup je r=E9alise que je suis bien avanc=E9 a=
vec =E7a=20
car Active Desktop doit =EAtre g=E9r=E9 explicitement).

En cherchant "Wallpaper" dans MSDN, dans la cat=E9gorie MSDN OnLine=20
(Anglais), en troisi=E8me position je trouve :

http://msdn.microsoft.com/en-us/library/aa932979.aspx

L=E0 on me conseille, apr=E8s avoir renseign=E9 les clefs de registre qui=
vont=20
bien, d'utiliser PostMessage pour aviser les autres applications.

Je ne comprends pas bien l'int=E9r=EAt de ce PostMessage, car si je r=E9u=
ssis=20
=E0 changer le fond d'=E9cran (pas comme dit dans cette fiche d'ailleurs)=
,=20
en revanche je ne r=E9ussis pas =E0 en informer la seule et unique=20
application dont je vois l'int=E9r=EAt de l'informer, =E0 savoir explorer=
=2E En=20
effet, si la bo=EEte des options d'affichage est ouverte, avec le papier =

affich=E9 dans la reproduction du bureau sur les deux premiers panneaux, =

le fait de changer le papier avec mon application ne lui fait ni chaud=20
ni froid, que je mette un PostMessage ou pas. La bo=EEte ne sera=20
rafraichie qu'une fois que je l'aurai ferm=E9e et rouverte. Certes=20
j'imagine que si on utilise un programme on peut se passer de l'autre au =

m=EAme moment, mais tant qu'=E0 dire qu'on avise "toutes les fen=EAtres, =
m=EAme=20
cach=E9es, m=EAme inactives" ...

Je me suis inspir=E9 d'une application propos=E9e toute pr=EAte=20
(http://www.csharpfr.com/code.aspx?ID=3D24385), et notamment sa fonction =

Affichage, pour changer mon papier avec SystemParametersInfo(20), apr=E8s=
=20
avoir toutefois modifi=E9 dans HKCU\Control Panel\Desktop les clefs de=20
registre TileWallpaper et WallpaperStyle pour choisir le mode=20
d'affichage (avec respectivement les valeurs "0" et "0" pour centr=E9, "1=
"=20
et "0" pour mosa=EFque, "0" et "2" pour =E9tir=E9 -pardon, je n'ai plus e=
n=20
t=EAte l'adresse o=F9 j'ai chop=E9 =E7a).

=E7a marche aussi sans PostMessage, je me serais attendu =E0 ce que=20
l'int=E9r=EAt du PostMessage soit d'informer par exemple explorer d'avoir=
=E0=20
rafraichir sa bo=EEte de dialogue. Or, non. Serait-ce une r=E9miniscence =
du=20
pass=E9 qu'on peut carr=E9ment oublier ?

Bien s=FBr j'ai fait les tests en d=E9sactivant les =E9l=E9ments web du b=
ureau=20
s=E9lectionn=E9s, sinon pas de mise =E0 jour du papier (en tout cas sans =

red=E9marrage), il faudrait au minimum se fendre d'une autre version.


A toutes fins utiles voici les d=E9clarations de code non manag=E9 :

[DllImport("user32.dll")]
private static extern IntPtr SystemParametersInfo(uint uiAction, uint=20
uiParam, StringBuilder pvParam, uint fWinIni);

[DllImport("user32.dll", EntryPoint =3D "PostMessageA")]
private static extern int PostMessage(int hwnd, int wMsg, int wParam,=20
int lParam);

private const int HWND_BROADCAST =3D 0xFFFF;
private const int WM_WININICHANGE =3D 0x1A;
private const int WM_SETTINGCHANGE =3D WM_WININICHANGE;
private const int SPI_SETDESKWALLPAPER =3D 20;
private const int SPI_GETDESKWALLPAPER =3D 115;

4 réponses

Avatar
Christian Hubert-Hugoud / weabow - Xtrem7
Le PostMessage place un message qui doit être envoyé immédiatement et qui
court-circuite la file d'attente des messages, si mes souvenirs sont exacts.
C'est une réminiscence de Win 16, qui n'avait qu'une file d'attente pour
toutes les applications. Maintenant il y a une file par application.

Il n'empêche que certaines applications peuvent capter le WM_WININICHANGE
(généralement), pour en faire quoi, je ne le sais pas, compte-tenu que c'est
aussi issu du 16 bits.

A l'évidence les noyaux NT ne fonctionnent plus comme cela, mais ils
maintiennent (jusqu'à quand ?) ces processus opérationnels, probablement
pour les anciennes applis. Pour les nouvelles, j'ai lu quelque part que ce
système avait été remplacé par un autre, ce qui expliquerait pourquoi
Explorer ne s'en sert pas.

Bref, je ne sais pas si tout ceci est bien utile, mais c'est un éclairage...

Christian


"Gloops" a écrit dans le message de
news:%
Bonjour tout le monde,

A la suite d'un plantage de Active Desktop (plus de papier de fond
d'écran, le bouton cliquez ici pour relancer, le message scripts
inactivés, continuer oui ou non), j'ai écrit un programme pour revalider
mon fond d'écran (après coup je réalise que je suis bien avancé avec ça
car Active Desktop doit être géré explicitement).

En cherchant "Wallpaper" dans MSDN, dans la catégorie MSDN OnLine
(Anglais), en troisième position je trouve :

http://msdn.microsoft.com/en-us/library/aa932979.aspx

Là on me conseille, après avoir renseigné les clefs de registre qui vont
bien, d'utiliser PostMessage pour aviser les autres applications.

Je ne comprends pas bien l'intérêt de ce PostMessage, car si je réussis
à changer le fond d'écran (pas comme dit dans cette fiche d'ailleurs),
en revanche je ne réussis pas à en informer la seule et unique
application dont je vois l'intérêt de l'informer, à savoir explorer. En
effet, si la boîte des options d'affichage est ouverte, avec le papier
affiché dans la reproduction du bureau sur les deux premiers panneaux,
le fait de changer le papier avec mon application ne lui fait ni chaud
ni froid, que je mette un PostMessage ou pas. La boîte ne sera
rafraichie qu'une fois que je l'aurai fermée et rouverte. Certes
j'imagine que si on utilise un programme on peut se passer de l'autre au
même moment, mais tant qu'à dire qu'on avise "toutes les fenêtres, même
cachées, même inactives" ...

Je me suis inspiré d'une application proposée toute prête
(http://www.csharpfr.com/code.aspx?ID$385), et notamment sa fonction
Affichage, pour changer mon papier avec SystemParametersInfo(20), après
avoir toutefois modifié dans HKCUControl PanelDesktop les clefs de
registre TileWallpaper et WallpaperStyle pour choisir le mode
d'affichage (avec respectivement les valeurs "0" et "0" pour centré, "1"
et "0" pour mosaïque, "0" et "2" pour étiré -pardon, je n'ai plus en
tête l'adresse où j'ai chopé ça).

ça marche aussi sans PostMessage, je me serais attendu à ce que
l'intérêt du PostMessage soit d'informer par exemple explorer d'avoir à
rafraichir sa boîte de dialogue. Or, non. Serait-ce une réminiscence du
passé qu'on peut carrément oublier ?

Bien sûr j'ai fait les tests en désactivant les éléments web du bureau
sélectionnés, sinon pas de mise à jour du papier (en tout cas sans
redémarrage), il faudrait au minimum se fendre d'une autre version.


A toutes fins utiles voici les déclarations de code non managé :

[DllImport("user32.dll")]
private static extern IntPtr SystemParametersInfo(uint uiAction, uint
uiParam, StringBuilder pvParam, uint fWinIni);

[DllImport("user32.dll", EntryPoint = "PostMessageA")]
private static extern int PostMessage(int hwnd, int wMsg, int wParam,
int lParam);

private const int HWND_BROADCAST = 0xFFFF;
private const int WM_WININICHANGE = 0x1A;
private const int WM_SETTINGCHANGE = WM_WININICHANGE;
private const int SPI_SETDESKWALLPAPER = 20;
private const int SPI_GETDESKWALLPAPER = 115;
Avatar
Jean-Michel Berthier
Bonjour,
Cela fait des années que je n'ai plus joué à ça, mais concernant le
PostMessage broadcast, il est prévu pour informer les applications ouvertes
qu'il y a eu un changement de paramètre système, au cas où l'une d'entre
elles serait concernée car devant gérer ce paramètre.
Comme on ne sait à priori pas lesquelles cela peut intéresser, un broascast
l'informe - encore faut-il qu'elle soit à l'écoute !

La différence entre PostMessage et SendMessage est que le premier est mis
dans la file des messages et la main est immédiatement rendue à
l'application. Le second attend la fin de traitement du message avant de
revenir.

Ceci dit, Active desktop est un truc de Windows 98 qui, me semble-t-il,
n'existe plus - au moins depuis Vista.



"Gloops" a écrit dans le message de
news:%
Bonjour tout le monde,

A la suite d'un plantage de Active Desktop (plus de papier de fond
d'écran, le bouton cliquez ici pour relancer, le message scripts
inactivés, continuer oui ou non), j'ai écrit un programme pour revalider
mon fond d'écran (après coup je réalise que je suis bien avancé avec ça
car Active Desktop doit être géré explicitement).

En cherchant "Wallpaper" dans MSDN, dans la catégorie MSDN OnLine
(Anglais), en troisième position je trouve :

http://msdn.microsoft.com/en-us/library/aa932979.aspx

Là on me conseille, après avoir renseigné les clefs de registre qui vont
bien, d'utiliser PostMessage pour aviser les autres applications.

Je ne comprends pas bien l'intérêt de ce PostMessage, car si je réussis
à changer le fond d'écran (pas comme dit dans cette fiche d'ailleurs),
en revanche je ne réussis pas à en informer la seule et unique
application dont je vois l'intérêt de l'informer, à savoir explorer. En
effet, si la boîte des options d'affichage est ouverte, avec le papier
affiché dans la reproduction du bureau sur les deux premiers panneaux,
le fait de changer le papier avec mon application ne lui fait ni chaud
ni froid, que je mette un PostMessage ou pas. La boîte ne sera
rafraichie qu'une fois que je l'aurai fermée et rouverte. Certes
j'imagine que si on utilise un programme on peut se passer de l'autre au
même moment, mais tant qu'à dire qu'on avise "toutes les fenêtres, même
cachées, même inactives" ...

Je me suis inspiré d'une application proposée toute prête
(http://www.csharpfr.com/code.aspx?ID$385), et notamment sa fonction
Affichage, pour changer mon papier avec SystemParametersInfo(20), après
avoir toutefois modifié dans HKCUControl PanelDesktop les clefs de
registre TileWallpaper et WallpaperStyle pour choisir le mode
d'affichage (avec respectivement les valeurs "0" et "0" pour centré, "1"
et "0" pour mosaïque, "0" et "2" pour étiré -pardon, je n'ai plus en
tête l'adresse où j'ai chopé ça).

ça marche aussi sans PostMessage, je me serais attendu à ce que
l'intérêt du PostMessage soit d'informer par exemple explorer d'avoir à
rafraichir sa boîte de dialogue. Or, non. Serait-ce une réminiscence du
passé qu'on peut carrément oublier ?

Bien sûr j'ai fait les tests en désactivant les éléments web du bureau
sélectionnés, sinon pas de mise à jour du papier (en tout cas sans
redémarrage), il faudrait au minimum se fendre d'une autre version.


A toutes fins utiles voici les déclarations de code non managé :

[DllImport("user32.dll")]
private static extern IntPtr SystemParametersInfo(uint uiAction, uint
uiParam, StringBuilder pvParam, uint fWinIni);

[DllImport("user32.dll", EntryPoint = "PostMessageA")]
private static extern int PostMessage(int hwnd, int wMsg, int wParam,
int lParam);

private const int HWND_BROADCAST = 0xFFFF;
private const int WM_WININICHANGE = 0x1A;
private const int WM_SETTINGCHANGE = WM_WININICHANGE;
private const int SPI_SETDESKWALLPAPER = 20;
private const int SPI_GETDESKWALLPAPER = 115;
Avatar
Gloops
Jean-Michel Berthier a écrit, le 05/08/2009 19:21 :
Bonjour,
Cela fait des années que je n'ai plus joué à ça, mais concernan t le
PostMessage broadcast, il est prévu pour informer les applications
ouvertes qu'il y a eu un changement de paramètre système, au cas où
l'une d'entre elles serait concernée car devant gérer ce paramètr e.
Comme on ne sait à priori pas lesquelles cela peut intéresser, un
broascast l'informe - encore faut-il qu'elle soit à l'écoute !



Effectivement, il m'a semblé que explorer n'était pas à l'écoute, en ce
sens que la boîte de dialogue de paramétrage des options d'affichage
n'est pas mise à jour. Il faut reconnaître que ce n'est pas d'une gra nde
gravité, juste la petite bête comme je disais ...


La différence entre PostMessage et SendMessage est que le premier est
mis dans la file des messages et la main est immédiatement rendue à
l'application. Le second attend la fin de traitement du message avant d e
revenir.



Oui, c'est vrai qu'on n'attend pas une plombe et c'est tant mieux.


Ceci dit, Active desktop est un truc de Windows 98 qui, me semble-t-il,
n'existe plus - au moins depuis Vista.



Pourtant, dans l'onglet Bureau des options d'affichage, il y a bien un
bouton Personnalisation du bureau, et la boîte de dialogue qu'il ouvre a
bien un onglet web. Il m'a bien semblé que lorsque cette affaire-là s e
plante, l'écran qui s'affiche signale que Active Desktop est désactiv é.
Le bouton qui est proposé à côté a été désactivé par je n e sais plus
exactement quelle mise à jour de sécurité (il y a je crois deux ou trois
ans ? ou un peu plus ?)




Bon, pour résumer, ce n'est pas bien sûr qu'on va trouver quelqu'un p our
être catégorique sur la question, mais il semble que si je ne mets pa s
le PostMessage dans mon programme qui change le fond d'écran, ce n'est
pas spécialement grave, et semble-t-il je peux me dire que si ça marc he,
c'est que c'est bon.
Avatar
Gloops
Christian Hubert-Hugoud / weabow - Xtrem7 a écrit, le 04/08/2009 21:19 :
A l'évidence les noyaux NT ne fonctionnent plus comme cela, mais ils
maintiennent (jusqu'à quand ?) ces processus opérationnels, probabl ement
pour les anciennes applis. Pour les nouvelles, j'ai lu quelque part que
ce système avait été remplacé par un autre,



semble-t-il justement SystemParametersInfo(20) ?

ce qui expliquerait pourquoi
Explorer ne s'en sert pas.

Bref, je ne sais pas si tout ceci est bien utile, mais c'est un
éclairage...




Merci d'éclairer ma lanterne :)