none
Position der Desktop Icons bei Einsatz einer "AppBar" speicher und wiederherstellen RRS feed

  • Frage

  • Hallo,

    unsere in VB.Net geschriebene Anwendung verwendet zwei AppBar-Fenster (siehe z.B. http://msdn.microsoft.com/de-de/library/bb979461.aspx). Nun ist es so, dass diese AppBars den Desktop-Bereich verkleinern und damit auch die Position der Desktop Icons sich verschiebt. Beim Schließen der AppBars sind dann die Icons auf dem Desktop des Benutzers anders als vor dem Start unserer Anwendung, was nicht besonders schoen ist.

    Gibt es eine einfache Methode in VB.Net, um die Positionen der Icons zu speichern und wiederherzustellen? Im Netz findet man folgenden VB6 Code von Paul Pavlic, der mir aber unnoetig kompliziert erscheint.

    http://www.wer-weiss-was.de/theme161/article848786.html

    Da gibt es inzwischen doch bestimmt etwas einfacheres?

    Gruss,

    Martin

    Freitag, 13. April 2012 14:23

Antworten

  • Hallo Robert,

    Danke fuer die Antwort. Wir haben mittlerweile eine Loesung gefunden. "regFile" ist ein String mit dem Pfad zur .reg-Datei, in der die Icons gespeichert werden.

    Private Sub saveDesktopIconPositions()
            Const baseKey As String = "Software\Microsoft\Windows\Shell\Bags"
    
    ...
    
           Dim key As RegistryKey = Nothing
            Dim bags() As String
            Dim desktopKey As RegistryKey = Nothing
            Dim exportCommand As String = ""
    
            Try
               ...
    
                ' Search for Bags/NUM/Desktop
                key = Registry.CurrentUser.OpenSubKey(baseKey)
                bags = key.GetSubKeyNames()
    
                For Each bag As String In bags
                    desktopKey = Registry.CurrentUser.OpenSubKey(baseKey + "\" + bag + "\" + "Desktop")
                    If Not desktopKey Is Nothing Then
                        Exit For 'Found our Desktop key!
                    End If
                Next
    
                ' Export to User specific location, overwriting existing key file
                exportCommand = "regedit.exe /e " + regFile + " " + desktopKey.Name
                Shell(exportCommand, AppWinStyle.Hide, True, 10000)
            Catch ex As Exception
                MsgBox("Error while trying to save Desktop icon positions from registry to file " + regFile + vbNewLine + ex.Message)
                Logger.log(FATAL, "Error while trying to save Desktop icon positions from registry to file " + regFile + vbNewLine + ex.Message)
            End Try
        End Sub

    Und zum Wiederherstellen:

    Private Sub restoreDesktopIconPositions() ...

    Dim importCommand As String = "" Dim psi As New ProcessStartInfo ' Import Reg key from User defined position Try ' Import Reg key from User specific location importCommand = "regedit.exe /s " + regFile Shell(importCommand, AppWinStyle.Hide, True, 10000) ' Kill Explorer.exe Process Dim processList() As Process processList = Process.GetProcessesByName("explorer") For Each proc As Process In processList proc.Kill() Next ' Restart Explorer.exe ' Shell("Explorer.exe", AppWinStyle.Hide) psi.FileName = "C:\" psi.WindowStyle = ProcessWindowStyle.Minimized Process.Start(psi) Catch ex As Exception MsgBox("Error while trying to restore Desktop icon positions from file " + regFile + vbNewLine + ex.Message) Logger.log(FATAL, "Error while trying to restore Desktop icon positions from file " + regFile + vbNewLine + ex.Message) End Try End Sub


    Schoenen Gruss,

    Martin

    Freitag, 18. Mai 2012 06:45

Alle Antworten

  • Hi Martin,

    ich denk der Artikel kann dir weiter Helfen:http://www.pcwelt.de/tipps/Desktop-Icon-Layout-sichern-und-wiederherstellen-1298405.html

    MFG

    Björn

    Freitag, 13. April 2012 14:47
  • Hallo Björn,

    vielen Dank fuer die schnelle Antwort. Eigentlich genau das, was ich suche. Nur leider funktioniert der Registry Hack bei mir nicht (Win 7 Pro SP1). Es wird die Standardposition der Icons wiederhergestellt und nicht die Position, die sie zuvor hatten (vor dem Export des Reg Keys). Woran koennte es liegen?

    Ich habe versucht mit dem Active Registry Monitor herauszufinden, welche Keys sich bei verschieben der Icons auf dem Desktop aendern, bin aber noch nicht fuendig geworden.

    Schoenen Gruss,

    Martin

    Freitag, 13. April 2012 15:48
  • Update: Wenn ich mit dem Process Monitor Aenderungen an der Registry Real-Time verfolge und Icons hin- und herschiebe, dann passiert in der Registry nichts.

    Wo und wie werden also die Desktop Icon-Positionen gespeichert??

    Gruss,

    Martin

    Freitag, 13. April 2012 16:20
  • Wo und wie werden also die Desktop Icon-Positionen gespeichert??

    Hallo mwunderlich2,

    Schau Dir mal folgenden Diskussionsfaden an.

    Where does the system store the icons position?

    Shell BAG Format Analysis

    Folgende Anwendung funktionierte bei mir in Windows 7 (64-bit Operating System):

    Save and Restore Desktop Icon Layout in Windows Vista à

    1. C:\Program Files\DIPS64\dips64.exe S für IconSave (Save Icon Positions)
    2. C:\Program Files\DIPS64\dips64.exe R für IconRestore (Restore Icon Positions)

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 17. Mai 2012 09:27
    Moderator
  • Hallo Robert,

    Danke fuer die Antwort. Wir haben mittlerweile eine Loesung gefunden. "regFile" ist ein String mit dem Pfad zur .reg-Datei, in der die Icons gespeichert werden.

    Private Sub saveDesktopIconPositions()
            Const baseKey As String = "Software\Microsoft\Windows\Shell\Bags"
    
    ...
    
           Dim key As RegistryKey = Nothing
            Dim bags() As String
            Dim desktopKey As RegistryKey = Nothing
            Dim exportCommand As String = ""
    
            Try
               ...
    
                ' Search for Bags/NUM/Desktop
                key = Registry.CurrentUser.OpenSubKey(baseKey)
                bags = key.GetSubKeyNames()
    
                For Each bag As String In bags
                    desktopKey = Registry.CurrentUser.OpenSubKey(baseKey + "\" + bag + "\" + "Desktop")
                    If Not desktopKey Is Nothing Then
                        Exit For 'Found our Desktop key!
                    End If
                Next
    
                ' Export to User specific location, overwriting existing key file
                exportCommand = "regedit.exe /e " + regFile + " " + desktopKey.Name
                Shell(exportCommand, AppWinStyle.Hide, True, 10000)
            Catch ex As Exception
                MsgBox("Error while trying to save Desktop icon positions from registry to file " + regFile + vbNewLine + ex.Message)
                Logger.log(FATAL, "Error while trying to save Desktop icon positions from registry to file " + regFile + vbNewLine + ex.Message)
            End Try
        End Sub

    Und zum Wiederherstellen:

    Private Sub restoreDesktopIconPositions() ...

    Dim importCommand As String = "" Dim psi As New ProcessStartInfo ' Import Reg key from User defined position Try ' Import Reg key from User specific location importCommand = "regedit.exe /s " + regFile Shell(importCommand, AppWinStyle.Hide, True, 10000) ' Kill Explorer.exe Process Dim processList() As Process processList = Process.GetProcessesByName("explorer") For Each proc As Process In processList proc.Kill() Next ' Restart Explorer.exe ' Shell("Explorer.exe", AppWinStyle.Hide) psi.FileName = "C:\" psi.WindowStyle = ProcessWindowStyle.Minimized Process.Start(psi) Catch ex As Exception MsgBox("Error while trying to restore Desktop icon positions from file " + regFile + vbNewLine + ex.Message) Logger.log(FATAL, "Error while trying to restore Desktop icon positions from file " + regFile + vbNewLine + ex.Message) End Try End Sub


    Schoenen Gruss,

    Martin

    Freitag, 18. Mai 2012 06:45