Desktop Hintergrund ändern

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemUnknow.

    Desktop Hintergrund ändern

    Hallo,
    ich generiere ein BMP-Bild, das ich gerne automatisch als hintergrund einstellen würde.
    ich bin wie in diesem Thread beschrieben vorgegangen.

    ich möchte das Bild aber nicht über einen Dialog auswählen, sondern eine feste Pfadangabe verwenden.

    Mein Code:

    VB.NET-Quellcode

    1. Declare Function SystemParametersInfo Lib "user32.dll" _
    2. Alias "SystemParametersInfoA" ( _
    3. ByVal uAction As Long, _
    4. ByVal uiParam As Long, _
    5. ByVal pvParam As String, _
    6. ByVal fWinIni As Long) As Long
    7. Private Const SPI_SETDESKWALLPAPER = 20
    8. Private Const SPIF_SENDWININICHANGE = &H2
    9. Private Const SPIF_UPDATEINIFILE = &H1
    10. Public Sub setPic()
    11. SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\Windows\tmp.bmp", SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE)
    12. End Sub

    aber hier tut sich nichts.

    Sieht jemand den Fehler?

    Vieleen Dank!
    Hm, dann übergebe ich doch aber Integer, wo muss da dann der Pfad zum Bild hin?

    VB.NET-Quellcode

    1. Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Integer, _
    2. ByVal uParam As Integer, ByVal lpvParam As Integer, _
    3. ByVal fuWinIni As Integer) As Integer

    oder benötige ich das hier auch noch?

    VB.NET-Quellcode

    1. <DllImport("user32", CharSet:=CharSet.Auto)> _
    2. Public Shared Function SystemParametersInfo( _
    3. ByVal intAction As Integer, _
    4. ByVal intParam As Integer, _
    5. ByVal strParam As String, _
    6. ByVal intWinIniFlag As Integer) As Integer
    7. ' returns non-zero value if function succeeds
    8. End Function

    ich steig da nicht ganz durch, was für was ist.

    Danke!

    Edit:
    ich habs jetzt wie folgt:

    VB.NET-Quellcode

    1. Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" ( _
    2. ByVal uAction As Integer, _
    3. ByVal uParam As Integer, _
    4. ByVal lpvParam As String, _
    5. ByVal fuWinIni As Integer) As Integer
    6. Private Const SETDESKWALLPAPER = 20
    7. Private Const UPDATEINIFILE = &H1
    8. Try
    9. SystemParametersInfo(SETDESKWALLPAPER, 0, "c:\tmp.bmp", UPDATEINIFILE)
    10. Catch Ex As Exception
    11. MsgBox(Ex.Message)
    12. End Try

    er läuft auch ohne Fehler durch, aber der Hintergrund ändert sich nicht :/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nemesis“ ()

    Ich habs mal nachgestellt:

    VB.NET-Quellcode

    1. 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
    2. ...
    3. Dim ret As Integer = SystemParametersInfo(20, 0, "d:\wallpaper1.bmp", 3)

    Funktioniert sowohl unter XP als auch Windows 7 - grössere Probleme hatte ich allerdings herauszufinden wie man dieses wieder rückgängig macht :rolleyes:
    Hm, das ist eigentlich genau das selbe wie ichs hier habe ... bei mir gibt er dann als Returnwert 0 zurück.

    ich habe auch mal diese Lösung getestet, aber auch die funktioniert bei mir nicht ... komische Geschichte.

    Edit:

    Ich glaub ich hab den Fehler, der mag wohl keine bmp-Bilder ...

    ...

    genau daran lags :)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „nemesis“ ()

    hm, ... nun erhalte ich aber auf anderen PCs beim Ausführen den Fehler:

    Allgemeiner Fehler in GDI+

    Informationen über das Aufrufen von JIT-Debuggen
    anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

    ************** Ausnahmetext **************
    System.Runtime.InteropServices.ExternalException: Allgemeiner Fehler in GDI+.
    bei System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
    bei System.Drawing.Image.Save(String filename, ImageFormat format)
    bei change_Background_new.Form1.CreateEmptyPic()
    bei change_Background_new.Form1.Form1_Load(Object sender, EventArgs e)
    bei System.EventHandler.Invoke(Object sender, EventArgs e)
    bei System.Windows.Forms.Form.OnLoad(EventArgs e)
    bei System.Windows.Forms.Form.OnCreateControl()
    bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    bei System.Windows.Forms.Control.CreateControl()
    bei System.Windows.Forms.Control.WmShowWindow(Message& m)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    bei System.Windows.Forms.ContainerControl.WndProc(Message& m)
    bei System.Windows.Forms.Form.WmShowWindow(Message& m)
    bei System.Windows.Forms.Form.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    ************** Geladene Assemblys **************
    mscorlib
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.4952 (win7RTMGDR.050727-4900).
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll.
    ----------------------------------------
    mscorlib.resources
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.4952 (win7RTMGDR.050727-4900).
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll.
    ----------------------------------------
    change Background
    Assembly-Version: 1.0.0.0.
    Win32-Version: 1.0.0.0.
    CodeBase: file://s11verwit03/c$/change%20Background.exe.
    ----------------------------------------
    Microsoft.VisualBasic
    Assembly-Version: 8.0.0.0.
    Win32-Version: 8.0.50727.4927 (NetFXspW7.050727-4900).
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
    ----------------------------------------
    System
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.4927 (NetFXspW7.050727-4900).
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll.
    ----------------------------------------
    System.Windows.Forms
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.4927 (NetFXspW7.050727-4900).
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
    ----------------------------------------
    System.Drawing
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.4927 (NetFXspW7.050727-4900).
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
    ----------------------------------------
    System.Runtime.Remoting
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.4927 (NetFXspW7.050727-4900).
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
    ----------------------------------------
    System.Drawing.resources
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.4927 (NetFXspW7.050727-4900).
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing.resources/2.0.0.0_de_b03f5f7f11d50a3a/System.Drawing.resources.dll.
    ----------------------------------------
    System.Windows.Forms.resources
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.4927 (NetFXspW7.050727-4900).
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
    ----------------------------------------

    ************** JIT-Debuggen **************
    Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
    Konfigurationsdatei der Anwendung oder des Computers
    (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
    Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

    Zum Beispiel:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
    Ausnahmen an den JIT-Debugger gesendet, der auf dem
    Computer registriert ist, und nicht in diesem Dialogfeld behandelt.
    er mag NUR bmp-Bilder.

    Sieht nach einem Fehler im Aufruf des callback aus
    - auf welchem System wird es kompiliert (64bit, OS) ?
    - auf welche Zielplattgform wird kompiliert (x64,x32, AnyCPU )

    Hm, wenn ichs aber mit jpg mache, funktioniert ... bei mir auf dem system.

    Kompiliert wird es auf einem Win7 32bit, Zielplattform habe ich mal auf any geändert, aber der Fehler bleibt der selbe.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nemesis“ ()

    nemesis schrieb:

    Hm, wenn ichs aber mit jpg mache, funktioniert ... bei mir auf dem system.

    In XP nur mit bmp, ab Vista offensichtlich auch mit Jpg / Gif.

    Zielplattform in Kompilieren->Erweiterte Compileroptionen auf ANYCPU um die IntPtr in der richtigen Länge zu empfangen.

    Versuchs erst einmal mit einem minimalen Programm um andere Fehler auszuschliessen:

    VB.NET-Quellcode

    1. Public Class Form1
    2. 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
    3. Private Sub frmParent_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    4. Try
    5. Dim ret As Integer = SystemParametersInfo(20, 0, "deinBMP.bmp", 3)
    6. MessageBox.Show("Result: " & ret.ToString)
    7. Catch Ex As Exception
    8. MessageBox.Show(Ex.Message)
    9. End Try
    10. End Sub
    11. End Class

    Wenn es auf deinem System funktioniert, wie sieht das System aus wo es nicht funktioniert.
    bischen runter scrollen hättest NET code gefunden:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal pncMetrics As String, ByVal fuWinIni As Integer) As Integer
    3. Private Const SPI_SETDESKWALLPAPER = 20
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. OpenFileDialog1.Filter = ("BMP-Grafiken (*.BMP)|*.BMP")
    6. OpenFileDialog1.ShowDialog()
    7. If OpenFileDialog1.FileName > "" Then
    8. PictureBox1.Load(OpenFileDialog1.FileName)
    9. End If
    10. End Sub
    11. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    12. If OpenFileDialog1.FileName > "" Then
    13. SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, _
    14. OpenFileDialog1.FileName)
    15. End If
    16. End Sub
    17. End Class