[vb.net] Changer de wallpapers

cs_bloodaxe Messages postés 17 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 25 juillet 2006 - 7 déc. 2004 à 17:08
cs_bloodaxe Messages postés 17 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 25 juillet 2006 - 11 févr. 2005 à 18:04
Salut tous, je viens demander conseil a des spécialiste de visual basic .net. J'ai fait un programme qui change le wallpaper de Windows (jusque la rien d'exeptionnelle), j'utilise donc la fonction SystemParametersInfo que j'ai importer de la dll user32.dll. Ca compile nikel mais ca ne change pas le fond d'écran.
Voila le source:
'j'inclus la dll user32.dll
'<DllImport("User32.dll", EntryPoint:="SystemParametersInfo", _
    'SetLastError:=True, CharSet:=CharSet.Auto, _
    'CallingConvention:=CallingConvention.StdCall)> _
    'Public Shared Function Change_Wallpaper(ByVal uiAction As Long, _
    'ByVal uiParam As Long, ByRef pvParam As Any, ByVal fWinIni As Long)
    'Cette fonction change le fond d'écran (Wallpaper) de Windows.
    'elle fait un apelle à la fonction SystemParametersInfo dans la dll User32.dll
    'BOOL SystemParametersInfo( UINT uiAction, UINT uiParam, _ 
    'PVOID pvParam, UINT fWinIni);
    'End Function

    Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" ( _
    ByVal uAction As Long, _
    ByVal uParam As Long, _
    ByRef lpvParam As String, _
    ByVal fuWinIni As Long) As Long

' ici j'apelle la fonction SystemParametersInfo:
fichier = "D:\\Images\\Synthèse\\@.bmp"
        SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, fichier, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)


Le bureau se rafraichis, mais le fond d'écran reste le même, J'ai essayer la fonction SystemParametersInfo avec visual c++ en utilisant la même syntaxe ca passe. Je capte pas pouquoi avec vb .net sa ne fait rien.

merci de votre aide.

10 réponses

valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
7 déc. 2004 à 17:57
Salut,
Essayes en rajoutant Auto dans ta déclaration.

Declare Auto Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" ( _
ByVal uAction As Long, _
ByVal uParam As Long, _
ByRef lpvParam As String, _
ByVal fuWinIni As Long) As Long


________________________________________________________________________________

Cordialement, Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 déc. 2004 à 18:09
fichier = "D:\Images\Synthèse\@.bmp"

une simple barre suffit !

Daniel
0
cs_bloodaxe Messages postés 17 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 25 juillet 2006
7 déc. 2004 à 18:40
J'ai mis auto et qu'une seule barre, ca fait toujours pareil :-(.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 déc. 2004 à 18:50
question bête, t'as bien déclaré tes constantes ?

Private Const SPI_SETDESKWALLPAPER = 20
Private Const SPIF_SENDWININICHANGE = &H2
Private Const SPIF_UPDATEINIFILE = &H1

dim Rep as Long
Rep = SystemParametersInfo 20, 0&,Byval fichier, &H2 Or &H1

Rep doit être non zéro

j'ai trouvé, une String doit être avec Byval ...

Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bloodaxe Messages postés 17 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 25 juillet 2006
7 déc. 2004 à 19:40
Ben oui mais j'ai pas le même valeur que toi.
J'ai mis ca comme valeurs:

Const SPIF_UPDATEINIFILE As Long = &H1
    Const SPI_SETDESKWALLPAPER As Long = &H14
    Const SPIF_SENDWININICHANGE As Short = &H2


Et j'ai essayer de passer le nom du fichier par valeur, ca change rien si c'est bien ce que tu voulais me dire:
Declare Auto Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" ( _
    ByVal uAction As Long, _
    ByVal uParam As Long, _
    ByVal lpvParam As String, _ 
    ByVal fuWinIni As Long) As Long
0
cs_bloodaxe Messages postés 17 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 25 juillet 2006
7 déc. 2004 à 19:42
Et rep est a zero :-(
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 déc. 2004 à 20:16
Rep à zéro c'est pas bon.
Les constantes c'est les mêmes sauf qu'il faut les déclarer en Integer (correspondant au Long de VB6).
donc mettre tous les Long en Integer et idem dans la déclaration.

Private Const SPI_SETDESKWALLPAPER As Integer = 20
Private Const SPIF_UPDATEINIFILE As Integer = 1
Private Const SPIF_SENDWININICHANGE As Integer = &H2

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer

Daniel
0
cs_bloodaxe Messages postés 17 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 25 juillet 2006
7 déc. 2004 à 20:26
J'ai comme tu m'a dit :
Declare Auto Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" ( _
    ByVal uAction As Integer, _
    ByVal uParam As Integer, _
    ByVal lpvParam As String, _
    ByVal fuWinIni As Integer) As Integer


Et ca marche le fond d'écran change :-D. Mais rep est toujours a zero.
0
cs_xtoff Messages postés 2 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 11 février 2005
11 févr. 2005 à 15:54
Bonjour,

Je débute en ce qui concerne les API et j'ai un problème en ce qui concerne le code précédent.
Pas de changement du fond d'écran, mais la possibilité de l'effacer en promenant la fenetre du projet ;-)
Dans la procédure du bouton, faut-il utiliser "SystemParametersInfo..." ou "'Change_Wallpaper"

Merci d'avance pour la réponse.
XToff

Voila ce que j'ai :

-----------------------------------------------
Imports System.Runtime.InteropServices


Public Class Form1
Inherits System.Windows.Forms.Form


#Region " Code généré par le Concepteur Windows Form "
' Je n'ai evidemment pas copié ce qui précède


Declare Auto Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" ( _
ByVal uAction As Integer, _
ByVal uParam As Integer, _
ByVal lpvParam As String, _
ByVal fuWinIni As Integer) As Integer


Private Const SPI_SETDESKWALLPAPER As Integer = 20
Private Const SPIF_UPDATEINIFILE As Integer = 1
Private Const SPIF_SENDWININICHANGE As Integer = &H2


Dim fichier As String


<DllImport("User32.dll", EntryPoint:="SystemParametersInfo", _
SetLastError:=True, CharSet:=CharSet.Auto, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function Change_Wallpaper(ByVal uiAction As Integer, _
ByVal uiParam As Integer, ByRef pvParam As String, ByVal fWinIni As Integer)


End Function


Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click


fichier = "D:\Wallpaper1.bmp"
'Change_Wallpaper(SPI_SETDESKWALLPAPER, 0, fichier, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, fichier, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)


End Sub


End Class
---------------------------------------
0
cs_bloodaxe Messages postés 17 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 25 juillet 2006
11 févr. 2005 à 18:04
tu declare les parametres de systemparameterinfo en entier. met les en long

Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" ( _
ByVal uAction As Long, _
ByVal uParam As Long, _
ByRef lpvParam As String, _
ByVal fuWinIni As Long) As Long
0
Rejoignez-nous