Windows Rechtsklickmenü

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Croasider.

    Windows Rechtsklickmenü

    Hallo @ all

    Wie kann ich mein Programm in das Windows Rechtsklickmenü einfügen? Ich möchte zum Beispiel, wenn man auf eine MP3 Rechsklickt, das dann das Programm gestartet wird und der Pfad der Datei an eine Varible übergeben wird.

    Viele Grüße
    Croasider

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

    das geht über die windows registry

    soll sich dein programm selbst eintragen?


    hier is ne etwas abgewandelte funktion aus meinem ffmpeg-windows installer [Release] ffmpeg Windows Installer.NET v1.0 , der eigt nichts anderes tut

    VB.NET-Quellcode

    1. Private Function TypInRegSchreiben(ByVal Extension As String)
    2. Dim RawFileType As String
    3. RawFileType = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\." & Extension, "", "")
    4. If RawFileType = Nothing Then
    5. MessageBox.Show("Dateityp '*." & Extension & "' nicht im System registriert." & vbNewLine & "Vorgang abgebrochen!")
    6. Return 0
    7. Exit Function
    8. End If
    9. My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\" & RawFileType & "\shell\___DEIN_PROG_____\", "", "Mit Croasider's Tool öffnen...") '___DEIN_PROG_____ mit Name des Programms ersetzen ; "Mit Croasider's Tool öffnen..." durch die anzuzeigende Message ersetzen
    10. My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\" & RawFileType & "\shell\___DEIN_PROG_____\command", "", "Hier hin kommt der Pfad zu deinem Tool (zur exe)") 'die zu öffnende Datei wird als Stratparameter übergben, verwende dafür "%1" (platzhater für dateinamen-parameter-übergabe in der windows registry
    11. Return 0
    12. End Function
    na dein programm soll soll ja wahrscheinlich die datei öffnen auf die rechts-geklickt wurde... die übergabe erfolgt per parameter.

    den musst du beim laden des programms abfangen
    (also wär das form-load ereignis nicht schlecht ;) )

    VB.NET-Quellcode

    1. Dim DateiPfad As String
    2. If My.Application.CommandLineArgs.Count > 0 Then
    3. DateiPfad = (My.Application.CommandLineArgs(0)).ToString
    4. End If


    man beachte das My.Application.CommandLineArgs(0) ein array ist das bei 0 anfängt -> der erste parameter liegt an der stelle 0


    jetzt könnte man in dein programm auch per console eine datei laden. zB

    Quellcode

    1. deinproggie.exe NeuerText.txt



    EDIT // überholt worden :(
    also nochmal pls: Wenn ich die Funktion aufrufe, wird das Programm in das Windows Kontext Menü eingetragen. Wofür steht dann da das Extension? Die Funktion muss ich jawohl nur einmal aufrufen oder?

    Wenn ich mein Programm über das Kontext Menü öffne wird in dem Array My.Application.CommandLineArgs der Dateipfad von der geklickten Datei abgelegt. Ist das soweit richtig?

    Meine Funktion habe ich jetzt so umgeschrieben. Muss ich da jetzt noch irgendwo %1 einfügen?

    VB.NET-Quellcode

    1. Private Function TypInRegSchreiben(ByVal Extension As String)
    2. Dim RawFileType As String
    3. RawFileType = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\." & Extension, "", "")
    4. If RawFileType = Nothing Then
    5. MessageBox.Show("Dateityp '*." & Extension & "' nicht im System registriert." & vbNewLine & "Vorgang abgebrochen!")
    6. Return 0
    7. Exit Function
    8. End If
    9. My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\" & RawFileType & "\shell\ID3-Tag Editor\", "", "ID3-Tag anpassen")
    10. My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\" & RawFileType & "\shell\ID3-Tag Editor\command", "", "D:\Programme\ID3-Tag Editor\ID3_Tag.exe")
    11. Return 0
    12. End Function
    wird das Programm in das Windows Kontext Menü eingetragen

    Ich glaube dafür werden admin-rechte benötigt

    Wofür steht dann da das Extension

    das ist der begriff für dateierweiterung. da du offensichtlich MP3-tags verändern möchtest rufst du die funktion folgendermaßen auf:

    VB.NET-Quellcode

    1. TypInRegSchreiben("MP3")


    Wenn ich mein Programm über das Kontext Menü öffne wird in dem Array My.Application.CommandLineArgs der Dateipfad von der geklickten Datei abgelegt. Ist das soweit richtig?

    Nö. Noch wird das Programm ja ohne parameter gestatet! dafür muss erst das %1 hinzugefügt werden:

    VB.NET-Quellcode

    1. Private Function TypInRegSchreiben(ByVal Extension As String)
    2. Dim RawFileType As String
    3. RawFileType = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\." & Extension, "", "")
    4. If RawFileType = Nothing Then
    5. MessageBox.Show("Dateityp '*." & Extension & "' nicht im System registriert." & vbNewLine & "Vorgang abgebrochen!")
    6. Return 0
    7. Exit Function
    8. End If
    9. My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\" & RawFileType & "\shell\ID3-Tag Editor\", "", "ID3-Tag anpassen")
    10. My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\" & RawFileType & "\shell\ID3-Tag Editor\command", "", "D:\Programme\ID3-Tag Editor\ID3_Tag.exe " & Chr(34) & "%1" & Chr(34))
    11. Return 0
    12. End Function


    Tipp: arbeite lieber mit relative pfaden... D:\ is nich so günstig falls du win neuinstallierst oder das programm veröffentlichst
    welches windows verwendest du?

    könntest du bitte den obengenannten ffmpeg-windows-installer ( [Release] ffmpeg Windows Installer.NET v1.0 ) testen? der basiert, wie gesagt, auf der selben funktion. wenn der auch bei dir nicht funzt (bei freunden von mir ging's) hab ich auch ein problem :D
    mhm

    das is jetzt nicht so gut :\

    das tool wurde ebenfalls unter windows 7 x64 erstellt und bei mir läufts problemlos.

    schau mal in der registry nach, ob da iwelche änderungen vorgenommen werden. wenn nicht versuch die mal manuell zu setzen.
    das is doch schonmal nicht schlecht!

    scroll mal in diesem schlüssel bis Winamp.File.Mp3 runter und zeig welche schlüssel und werte der enthält! (in screnn bitte möglichste viele unter-schlüssel offen zeigen; besonderer wert liegt auf "command" & "shell")
    enthält "ID3-Tag-Editor" einen standart wert? wenn ja liegt's an deinem windoof.

    es scheint eine software oder einstellung aktiv zu sein, die das anzigen von benutzerdefinierten kontextmenüerweiterungen unterdrückt...
    tja dann weißte bescheid :)

    bei mir funzt's in dieser konfiguration. poste bitte nochmal die funktion auf dem letzten stand. dann würde ich's bei mir testen obwohl ich mir das ergebnis schon denken kann ;)

    VB.NET-Quellcode

    1. Private Function TypInRegSchreiben(ByVal Extension As String)
    2. Dim RawFileType As String
    3. RawFileType = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\." & Extension, "", "")
    4. If RawFileType = Nothing Then
    5. MessageBox.Show("Dateityp '*." & Extension & "' nicht im System registriert." & vbNewLine & "Vorgang abgebrochen!")
    6. Return 0
    7. Exit Function
    8. End If
    9. My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\" & RawFileType & "\shell\ID3-Tag Editor\", "", "ID3-Tag anpassen")
    10. My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\" & RawFileType & "\shell\ID3-Tag Editor\command", "", "D:\Programme\ID3-Tag Editor\ID3_Tag.exe " & Chr(34) & "%1" & Chr(34))
    11. Return 0
    12. End Function


    habs gerade nochmal an 2 anderen PC getestet - geht auch nich :(
    Hab auch gerade den Tip gefunden und ausprobiert... geht auch nich...

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