windows shell



  • kann mir jemand sagen wie ich einen "link" in die windows shell mache sodass ich wenn ich im explorer auf eine Datei rechtsklicke ein Programm mit dem Dateinamen und Dateipfad als Parameter habe?

    Es geht darum das Dateien die gelöscht werden dürfen so in eine Datenbank geschrieben werden können.



  • Registrierungsschlüssel erstellen:
    *HKEY_CLASSES_ROOT[Dateityp]\Shell[Name des Menüpunktes]\Command*

    Dort erstellst du eine Zeichenfolge(Standard) mit der auszuführenden Befehlszeile als Inhalt. %1 dient dabei als Platzhalter für die entsprechende Datei, den kannst du deinem Programm dann als Argument übergeben.

    Dateityp "*" steht für alle Dateien, "Directory" für Verzeichnisse.

    Du kannst auch eine richtige ShellExtension registrieren durch die sich dann mehr Möglichkeiten bieten, das ist aber dementsprechend komplexer.



  • also HKEY_CLASSES_ROOT\*\Shell\als Löschkanidat markieren\c:\lkanidat\lk.exe -file %1\

    in diesem Fall würde dann beim rechtsklick auf alle dateien der Text "als Löschkanidat markieren" stehen und beim klicken wird die Datei "c:\lkanidat" mit den argument -file = "Dateiname mit Pfad" übergeben.

    Der Text erscheint im Menü beim Rechtsklick.
    Das c:\ wird aber wegen dem "\" nicht angenommen.

    Kannst du mir noch sagen wir ich einen Icon vor den Text machen kann?



  • HKEY_CLASSES_ROOT\*\shell\Edit \command\
    Standard Schlüssel in Command dann:
    "c:\windows\notepad.exe" "%1"

    okay so weit so gut.

    kannst du mir jetzt noch sagen wie ich einen Icon hinzufüge?
    Dann bin ich glücklich und zufrieden



  • Schau dir mal andere Dateiendungen an, z.B.
    HKEY_CLASSES_ROOT\Paint.Picture (HKEY_CLASSES_ROOT\.bmp leitet weiter auf Paint.Picture) da gibt es nen DefaultIcon-Pfad...



  • Ich befürchte, das geht nur als Shell-Extension, die du dann als DLL-Datei erstellen und im System registrieren musst. Ein Beispiel dafür, wie das gemacht wird und wie du die Com-Schnittstelle implementierst, kannst du zum Beispiel hier finden:

    http://www.codeproject.com/shell/cc100submit.asp



  • Ich kann dir das jetzt nicht genau erklären, aber schau dir mal http://www.winfaq.de/faq_html/tip0002.htm an.

    Dort wir dim Abschnitt HKEY_CLASSES_ROOT genau erklärt, wie man so ewtas ohne Shell-Extension hinbekommt. 😃

    Wenn man dann allerdings mehrere Dateien markiert, wird das Programm für jede Datei neu gestartet, das könnte unter Umständen ein Problem darstellen.
    Brauchst du in solch einem Fall eine Dateiliste kommst du um die Shell-Extensions nicht herum. 😞



  • **Also die Datei und der Text wird so angegeben:
    **
    HKEY_CLASSES_ROOT\*\shell\Edit\command\
    Standard Schlüssel in Command dann:
    "c:\programme\edit\edit.exe" "%1"

    und der Icon so?

    HKEY_CLASSES_ROOT\*\shell\Edit\DefaultIcon\
    Standard Schlüssel in DefaultIcon dann:
    "c:\programme\edit\icon.ico"

    Das mit dem Icon funktioniert so aber nicht ... ich hab den richtigen Aufbau aus http://www.winfaq.de/faq_html/tip0002.htm nicht rauslesen können.



  • DefaultIcon ist nur für den Dateityp gültig, nicht für die Kontextmenüeinträge.



  • wie funktioniert das mit dem icon dann ohne sehllextension?



  • Doe schrieb:

    wie funktioniert das mit dem icon dann ohne sehllextension?

    Gar nicht!? Hab jedenfalls noch nie so etwas gesehen.



  • Ich habw mir verschiedene Programme und sourcecodes mit denen man eine dll erstellen kann die man dan anschließen registrieren kann.

    Ich habe mir auch http://www.codeproject.com/shell/cc100submit.asp angesehen.

    Das Problem ist das ich die sourcecodes alle nicht so umgeschreieben bekomme dass einfach ein vorgegebenes Programm mit dem Dateinamen und Pfad als Argument ausgeführt wird.



  • Nutzt du MFC in deinem Projekt?



  • nein, das ist ja das Problem.
    Ich benutze den Borland C++ Builder.

    Übrigens ich habe eine Schöne Webseite mit einer Sammlung von Kontext-Menü Tools gefunden. Leider war dort auch nichts richtiges für mich dabei. http://www.essential-freebies.de/board/viewtopic.php?t=770&start=0



  • also mir kann keine weiterhelfen?



  • Dieses Beispiel für einen COM-Server ist sogar so wenig MFC-lastig, dass du es leicht für deine Zwecke anpassen können solltest. Die GUID musst du natürlich ändern.

    http://www.codeproject.com/shell/cmdlineext.asp


Log in to reply