Resumen Cambiar el fondo del escritorio

Hola,

Es que los parámetros de la llamada al API están mal.
Hay que usar String en lugar de Any y si se quiere usar en 16 bits
hay que declarar la constante: Const SPIF_SENDWININICHANGE = &H2

Además el BMP debe estar en el directorio Windows, sino no se carga.

He probado tu código, en 16 y 32 bits, y funciona, (con estas
correcciones que indico), estas son las declaraciones:

---xxx---
#If Win32 Then
Private Declare Function SystemParametersInfo Lib "user32" Alias _
    "SystemParametersInfoA" _
    (ByVal uAction As Long, ByVal uParam As Long, _
    ByVal lpvParam As String, ByVal fuWinIni As Long) As Long

    Const SPIF_UPDATEINIFILE = &H1
    Const SPI_SETDESKWALLPAPER = 20
    Const SPI_SETDESKPATTERN = 21
    Const SPIF_SENDWININICHANGE = &H2
    Private N As Long
#Else
Private Declare Function SystemParametersInfo Lib "User" _
    (ByVal uAction As Integer, ByVal uParam As Integer, _
    ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer

    Const SPIF_UPDATEINIFILE = 1
    Const SPI_SETDESKWALLPAPER = 20
    Const SPI_SETDESKPATTERN = 21
    Const SPIF_SENDWININICHANGE = &H2
    Private N As Integer
#End If 'WIN32
---xxx---

Ahora si podrás hacerlo.

Nos vemos.
Guillermo


-----
> Date: Fri, 19 Sep 1997 00:56:03 +0200
> From: Oscar Manuel <oscarsen@cros.es>
> To: vb-esp@ccc.uba.ar
> Subject: Re: FW: (VB-ESP) Wallpaper desde VB4.0 32
> Reply-to: vb-esp@ccc.uba.ar

>
> Perdón por la intromisión, pero ¿por qué no me funciona el código que va
> a continuación?
>
> =================
>
> Option Explicit
> Dim Fichero As String
> #If Win32 Then
> Private Declare Function SystemParametersInfo Lib "user32" Alias
> "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long,
> lpvParam As Any, ByVal fuWinIni As Long) As Long
> Const SPIF_UPDATEINIFILE& = &H1
> Const SPI_SETDESKWALLPAPER& = 20
> Const SPI_SETDESKPATTERN& = 21
> Const SPIF_SENDWININICHANGE = &H2
> Public N As Long
> #Else
> Public Declare Function SystemParametersInfo% Lib "user" (ByVal uAction
> As Integer, ByVal uParam As Integer, lpvParam As Any, ByVal fuWinIni As
> Integer)
> Const SPIF_UPDATEINIFILE& = 1
> Const SPI_SETDESKWALLPAPER& = 20
> Const SPI_SETDESKPATTERN& = 21
> Public N As Integer
> #End If 'WIN32
>
>
> Private Sub Command1_Click()
> On Error GoTo Salir
> With DlgFich
> .Filter = "Archivos BMP|*.bmp"
> .FilterIndex = 0
> .CancelError = True
> .Flags = cdlOFNHideReadOnly Or cdlOFNFileMustExist
> .ShowOpen
> Fichero = .filename
> N = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, "(None)",
> SPIF_SENDWININICHANGE Or SPIF_UPDATEINIFILE)
> N = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, Fichero,
> SPIF_SENDWININICHANGE Or SPIF_UPDATEINIFILE)
> If N Then
> MsgBox "El fichero " & Fichero & " ha sido colocado con éxito"
> Else
> MsgBox "Se ha producido un error con el fichero " & Fichero
> End If
> End With
> Exit Sub
> Salir:
>
> End Sub
>
> ====================
>
> Las dos líneas en donde se llama a la función es el último recurso que
> he seguido mirando las páginas del "Guille", partiendo de los ejemplos
> del mensaje que cito. Luego Fidel respondió diciendo que le funcionaba,
> con lo cual asumo que algo estaré haciendo mal y que las funciones son
> las que realmente hacen eso.
>
> Trabajo en VB4 16 y 32 en Windows 95.
>
> Espero que alguien me aclare la duda pronto. Un saludo y gracias por
> adelantado.
>
>
============================================
Te invito a que veas mis páginas sobre
Visual Basic, HTML (VBScript, JavaScript...)
http://www.wcostasol.es/guille/indice.htm
--------------------------------------------
Visual Basic Online en español (castellano)
http://wcostasol.es/vbonline/indice.htm
============================================



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com