Comment puis-je changer mon fond d'écran Windows par programmation?
J'avais souhaitez mettre un fond d'écran pour Windows XP à l'aide de C#. J'ai développé le code de sorte qu'il fonctionne parfaitement sous Windows 7, mais apparemment ce n'est pas la même pour XP. J'ajoute que fond d'écran comme une ressource, définir son action compilation comme Contenu et comme Toujours exemplaire. C', curieusement, définit le bon papier Peint de nom à l'intérieur du Bureau de la boîte de dialogue propriétés. Cependant, le papier peint n'est pas définie. Mon code ressemble à ceci:
public sealed class Wallpaper
{
Wallpaper() { }
const int SPI_SETDESKWALLPAPER = 20;
const int SPIF_UPDATEINIFILE = 0x01;
const int SPIF_SENDWININICHANGE = 0x02;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
public enum Style : int
{
Tiled,
Centered,
Stretched
}
public static void Set(string wpaper, Style style)
{
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
if (style == Style.Stretched)
{
key.SetValue(@"WallpaperStyle", 2.ToString());
key.SetValue(@"TileWallpaper", 0.ToString());
}
if (style == Style.Centered)
{
key.SetValue(@"WallpaperStyle", 1.ToString());
key.SetValue(@"TileWallpaper", 0.ToString());
}
if (style == Style.Tiled)
{
key.SetValue(@"WallpaperStyle", 1.ToString());
key.SetValue(@"TileWallpaper", 1.ToString());
}
string tempPath = "Resources\\"+wpaper;
SystemParametersInfo(SPI_SETDESKWALLPAPER,
0,
tempPath,
SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
}
}
Lors de l'appel de fond d'écran.("Wpapername"), il obtient le fond d'écran à partir des ressources du projet. Il fonctionne sur Win7, mais pas sur WinXP. Suis-je en train de faire quelque chose de mal?
J'ai basé mon code à partir de celui-là, mais mes fonds d'écran doivent être déployés à l'aide de l'application.
Il se pourrait que XP ne gère pas le chemin d'accès relatif, et vous devrez peut-être spécifier le chemin d'accès complet vers le fond d'écran.
possible en double stackoverflow.com/questions/1061678/...
OriginalL'auteur Korcholis | 2011-12-07
Vous devez vous connecter pour publier un commentaire.
Bien, c'est un peu maladroit, mais je vais répondre à ma propre question avec ce que j'ai trouvé.
J'ai dû réutiliser du code de la accepté de répondre à ici.
Fondamentalement, le problème de XP a été qu'il fallait utiliser un fichier bmp, donc j'ai réussi à convertir une ressource de projet dans un fichier bmp à l'aide que l'exemple précédent et un peu de peaufinage. L'Ensemble fonctionne parfaitement de cette façon:
L'important, c'est sur la troisième ligne de ce code (
System.Drawing.Image.FromFile(Path.GetFullPath(wpaper));
).OriginalL'auteur Korcholis
Pour une bonne solution fiable.
Ajouter le foillowing classe à votre projet
Remarque: Remplacer XXXNAMESPACEXXX avec l'espace de noms par défaut de votre projet.
Alors il peut être utilisé comme suit:
Il peut également être utilisé comme ceci:
C'est verfied de travail sur Windows XP, 7, 8, 8.1 et Windows 10.
Note Il est important de garder à l'esprit que cette méthode sera de contourner papier peint de bureau de la sécurité restrictions appliquées par l'administrateur réseau.
Ce travail sur Windows 10 ?
oui, il fonctionne avec windows 10,
Windows 10 a introduit de nouvelles façons d'organiser une image, par exemple, étendue. Cela nécessite WallpaperStyle pour 22. Cela ne fonctionne pas sur Windows 7.
OriginalL'auteur Knickerless-Noggins