Programm im Explorer Kontextmenü

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von TomRipley.

    Programm im Explorer Kontextmenü

    Hi!

    Ich will das MenuItem beim WindowsExplorer hinzufügen und dann wird mein Programm gestartet und dann möchte ich den Link der Bilddatei haben.


    Wie mach ich das? Der Code fügt einfach nichts hinzu.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Public Class ContextAdder
    3. ''' <summary>
    4. ''' Fügt dem Kontextmenü des Windows Explorers einen Eintrag für einen Dateityp hinzu.
    5. ''' Bei Erfolg wird True zurückgegeben, sonst False.
    6. ''' </summary>
    7. ''' <param name="extension">Der Dateityp. Beispiel: .txt</param>
    8. ''' <param name="text">Der Text des Eintrags. Beispiel: In JSEdit öffnen</param>
    9. ''' <param name="command">Der aufzurufende Befehl. Beispiel: C:\jsedit.exe "%1"</param>
    10. Public Shared Function AddToExplorerContextMenu(ByVal extension As String, _
    11. ByVal text As String, ByVal command As String) As Boolean
    12. ' Beispiel der Kommentare:
    13. ' extension=.js
    14. ' text=In JSEdit öffnen
    15. ' command= C:\jsedit.exe "%1"
    16. Try
    17. ' Öffnen: HKEY_CLASSES_ROOT\.js
    18. Dim Extensionkey As RegistryKey = Registry.ClassesRoot.CreateSubKey(extension)
    19. ' Öffnen: HKEY_CLASSES_ROOT\.js\Shell
    20. Dim Shellkey As RegistryKey = Extensionkey.CreateSubKey("Shell")
    21. ' Öffnen: HKEY_CLASSES_ROOT\.js\Shell\In JSEdit bearbeiten
    22. Dim Entrykey As RegistryKey = Shellkey.CreateSubKey(text)
    23. ' Öffnen: HKEY_CLASSES_ROOT\.js\Shell\In JSEdit bearbeiten\command
    24. Dim Commandkey As RegistryKey = Entrykey.CreateSubKey("command")
    25. Commandkey.SetValue("", command)
    26. Commandkey.Close()
    27. Entrykey.Close()
    28. Shellkey.Close()
    29. Extensionkey.Close()
    30. Return True
    31. Catch ex As Exception
    32. Return False
    33. End Try
    34. End Function
    35. End Class
    Whos Faster ALPHA: Bald....
    Zeile 25:

    VB.NET-Quellcode

    1. Commandkey.SetValue("Pfad", command)
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Ich habe mir den Code jetzt nicht genau angesehen, aber 'Shell->Command' Einträge müssen in der regel den Pfad zu deinem Programm enthalten ^^
    Edit: Hab den Command übersehen. Schau mal das an: delphidabbler.com/tips/15
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Google: Delphi to C#, dann C# to Basic .NET
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Wut?
    Lol, ich hatte mal nen Online Converter für sowas, warte ich schau in die Chronik...
    Edit: currock.net:8081/demo/DelphiNet2CSharp.aspx - Wirft aber leider nen Error ^^


    Das hier sollte auf jeden Fall helfen:
    wintotal.de/tipparchiv/?id=847
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

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

    Ja, ich weiß, dass der Thread etwas älter ist: Trotzdem hoffe ich auf eine Antwort, außerdem findet jeder Hilfesuchende mit ähnlichen Problemen diese Zeilen über Google...

    @Nikx: Du meinst die .reg-Datei am Ende der Seite, die man auseinandernehmen kann?

    Es existiert bereits unter vbarchiv.net eine Klasse, um Einträge ins Explorerkontextmenü aufzunehmen: vbarchiv.net/tipps/tipp_1885.html
    Funktionsweise ist identisch. Allerdings funktioniert dieser Lösungsansatz bei mir (Windows 7 64bit, SP1) ausschließlich für alle Dateitypen ("*") sowie für Ordner ("Folder"). Für einzelne Endungen, wie z.B. ".txt", wird auch nach einem Neustart des Explorer-Prozesses kein Eintrag angezeigt, obwohl alles korrekt in der Registry eingetragen wurde. Ist das nur bei mir der Fall? Irgendeine Idee, woran das liegen könnte?

    MfG
    Tom

    Edit:
    So, ich habe jetzt noch weiter recherchiert:
    1) Die oben verlinkte Klasse versucht, bspw. für eine .txt-Datei den Dateipfad unter "HKEY_CLASSES_ROOT\.txt\Shell\NAME\command\(Default)" abzulegen. Dies funktioniert, wie bereits erwähnt, nicht.
    2) Unter HKEY_CLASSES_ROOT existiert ein weiterer Schlüssel, "txtfile". Den Dateipfad unter "HKEY_CLASSES_ROOT\txtfile\Shell\NAME\command\(Default)" einzutragen, funktioniert! (Diese Lösung stammt von windowspage.de/tipps/020740.html.) Aber:
    3) "Erschafft" man einen neuen Dateityp, z.B. ".test" und trägt den Dateipfad unter "HKEY_CLASSES_ROOT\testfile\Shell\NAME\command\(Default)" ein, erscheint der Explorerkontextmenüeintrag nicht. Öffnet man die ".test"-Datei mit einem Programm, wird ein Schlüssel namens "HKEY_CLASSES_ROOT\test_auto_file" erstellt. Trägt man den Dateipfad nun in "HKEY_CLASSES_ROOT\test_auto_file\Shell\NAME\command\(Default)" ein, funktioniert es.
    4) Trägt man den Dateipfad gleich in "HKEY_CLASSES_ROOT\test_auto_file\Shell\NAME\command\(Default)" ein, erscheint der Eintrag erst im Explorerkontextmenüeintrag, sobald man die Datei mit einem ausgewählten Programm öffnet. Auch keine Lösung.

    Für manche Dateitypen, z.B. OpenDocumentText, existiert zwar ein Schlüssel wie "HKEY_CLASSES_ROOT\odtfile", allerdings funktioniert der Schritt aus Schritt 2) nicht. Allerdings existieren die Schlüssel "HKEY_CLASSES_ROOT\opendocument.WriterDocument" und "HKEY_CLASSES_ROOT\opendocument.WriterDocument.1". Trägt man den Dateipfad unter "HKEY_CLASSES_ROOT\opendocument.WriterDocument.1\Shell\NAME\command\(Default)" ein, funktioniert es. Allerdings wüsste ich nicht, wie man generell aus der Dateiendung ".odt" auf den Schlüssel "HKEY_CLASSES_ROOT\opendocument.WriterDocument.1" kommt, von daher stellt dies bisher noch keine praktikable Lösung dar. Ich hoffe, hier weiß jemand noch mehr als ich...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TomRipley“ ()