"RECENT" folder leeren

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    "RECENT" folder leeren

    Hi,

    ich würde gern den Ordner Dim RealPath = "C:\Users\myuserid\Recent" per Programm leeren. Natürlich ist myuserid meine EIGENE userid.

    Klar, das kann man im Explorer per Befehl erledigen, ich möchte das aber gern per VB Programm machen. Zunächst will ich alle Unterverzeichnisse ermitteln:

    VB.NET-Quellcode

    1. Dim RealWorkDirectoryList = Directory.GetDirectories(RealObject)


    Aber allein das scheitert schon mit der Exception "Access to the path ... is denied".

    Das verstehe ich nicht ... denn schließlich ist das doch meine Userid ... und da muss ich doch Zugriff haben !

    Was mache ich denn falsch ... und wie kann / muss man mit so einem Folder umgehen?

    LG
    Peter
    Was passiert, wenn Du Dein Programm mit Adminrechten ausführst?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Peter329 Wie kommen denn die zu löschenden Daten da hinein?
    Wenn Du dort Daten erstellen kannst, kannst Du sie auch löschern.
    Wenn Du beim Schreiben Admin-Rechte brauchst, brauchst Du sie auch beim Löschen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also bei mir funktioniert das problemlos

    VB.NET-Quellcode

    1. Sub DeleteRecent()
    2. Dim RecentFolder = New IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Recent))
    3. For Each Folder In RecentFolder.GetDirectories
    4. Debug.Print(Folder.FullName)
    5. For Each File In Folder.GetFiles
    6. Debug.Print(File.FullName)
    7. File.Delete()
    8. Next
    9. Next
    10. End Sub
    Ich habe allerdings nicht ohne Adminrechte getestet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Erst mal vielen Dank für die Antworten.

    @petaod

    Dein Code funktioniert bei mir auch ... Admin Rechte werden keine benötigt. Aber das was da ausgeführt wird, ist ja auch etwas ganz anderes:

    VB.NET-Quellcode

    1. Dim RecentFolder = New IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Recent))
    2. Debug.Print("RecentFolder: " & RecentFolder.FullName)


    Liefert:

    RecentFolder: C:\Users\myUserid\AppData\Roaming\Microsoft\Windows\Recent

    In diesem Verzeichnis sind dann zwei Unterordner enthalten (AutomaticDestinations, CustomDestinations) und die Files haben ein wenig kryptische Namen (188f5ec9d11ded56.customDestinations-ms, ...)

    Das ist aber nicht das was ich suche:

    Der Ordner

    C:\Users\myUserid\Recent

    enthält Shortcuts auf die zuletzt angesprochenen Dateien und Verzeichnisse (@RFG - die werden nicht von mir, sondern vom System automatisch geschrieben) und diese Einträge möchte ich entfernen.

    Diese Liste kann ich ohne Adminrechte im Windows Explorer ansehen (was die Frage von @VaporiZed beantwortet).

    Allerdings ist das wohl kein "normaler" Ordner, der wird so leicht angegraut angezeigt. (s. Anhang). Das könnte also eine Library sein ? Wie dem auch sei: offensichtlich funktionieren hier die üblichen .Net Verzeichnisfunktionen nicht mehr.

    Deshalb noch einmal meine Frage: wie kann ich diese Recent-Liste von meinem VB Programmm aus löschen. Oder ganz generell: wie verfahre ich im .Net mit solchen "angegrauten" Einträgen.

    LG
    Peter
    Bilder
    • s 2022-09-13 09-10-495.jpg

      32,01 kB, 830×191, 36 mal angesehen
    Hast du schon die SHAddToRecentDocs function versucht.
    pinvoke.net/default.aspx/shell32/SHAddToRecentDocs.html

    C# - How to add or remove items from Windows recent files

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. RecentDocsHelpers.ClearAll()
    4. End Sub
    5. End Class
    6. Public Module RecentDocsHelpers
    7. Public Enum ShellAddToRecentDocsFlags
    8. Pidl = &H1
    9. Path = &H2
    10. PathW = &H3
    11. End Enum
    12. <Runtime.InteropServices.DllImport("shell32.dll", CharSet:=Runtime.InteropServices.CharSet.Unicode)>
    13. Private Sub SHAddToRecentDocs(ByVal flag As ShellAddToRecentDocsFlags, ByVal path As String)
    14. End Sub
    15. Public Sub AddFile(ByVal path As String)
    16. SHAddToRecentDocs(ShellAddToRecentDocsFlags.PathW, path)
    17. End Sub
    18. Public Sub ClearAll()
    19. SHAddToRecentDocs(ShellAddToRecentDocsFlags.Pidl, Nothing)
    20. End Sub
    21. End Module
    @Henry Carstensen

    Wow ... das Dingens funktioniert auf Anhieb ... (s. Anhang) !

    Damit ist auf jeden Fall mein primäres Anliegen gelöst, wie ich diesen blöden "Verlauf" löschen kann ! Danke !

    LG
    Peter
    Bilder
    • s 2022-09-13 12-16-431.jpg

      11,84 kB, 801×194, 35 mal angesehen

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