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

Le
Gloops
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 revali=
der
mon fond d'écran (après coup je réalise que je suis bien avancé a=
vec ç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éu=
ssis
à 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=24385), 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 e=
n
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 b=
ureau
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;
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian Hubert-Hugoud / weabow - Xtrem7
Le #19882951
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" 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;
Jean-Michel Berthier
Le #19887351
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" 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;
Gloops
Le #19888411
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.
Gloops
Le #19888401
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 :)
Publicité
Poster une réponse
Anonyme