![]() |
Kontextmenü des Explorere ergänzen
Hallo.
Ich wollte das Kontextmenü des Explorers mit einem eigenen Eintrag erweitern. Und wenn man diesen anklickt, soll sich mein Programm öffnen und was mit der ausgewählten Datei machen. Ich habe schon die Forensuche bemüt [dp]explorer menü[/dp], aber irgendwie hatten wir das wohl noch nicht. :gruebel: Ja, meine Frage, wie muss ich da jetzt vorgehen? |
Re: Kontextmenü des Explorere ergänzen
|
Re: Kontextmenü des Explorere ergänzen
Hmpf, warum finde ich so was nicht? Werde es mir mal ankucken.
|
Re: Kontextmenü des Explorere ergänzen
also winzip hat dafür (zumindest früher als ichs noch hatte) einen hook laufen gehabt und das Menü dann dynamich ergänzt. Als ich den hook gekickt hab waren dann auch dei Contexteinträge von winzip weg... ICQ scheints ebenso zu machen. Als ich icq eben beendet hab waren auch die contextmenüs weg. Es gibt maximal noch in der Registry einen Ort, allerdings wird dann der Contexteintrag bei allen Ordnern, incl. Papierkorb und so angezeigt
[Edit]Zu langsam, werd wohl langsam alt...[/Edit] |
Re: Kontextmenü des Explorere ergänzen
Ich habe mir mal die Delphi Demos angekuckt. Das sind ja anscheinend drei unterschiedliche. Welches wäre denn das für mich relevante? Ich stehe da etwas auf dem Schlauch, da ich so was noch nie gemacht habe.
|
Re: Kontextmenü des Explorere ergänzen
1. Wenn es nur darum geht, ein Programm zu starten, dann reicht es IMHO aus, wenn du den Dateityp in der Registry entsprechend ergänzt. Als Beispiel: Ich habe für die Dateitypen XML/XSL/XSD/DTD ein VBSkript geschrieben, das Proton als Editor einträgt.
2. In Sonderfällen nimmst du eine Shell-Extension, wobei mir aber jetzt kein Sonderfall einfällt. :( Ich habe 3 Shell-Extensions, um bspw. Verknüpfungen im Startmenü oder auf dem Desktop anlegen zu lassen, indem ich im Explorer einfach die gewünschte Datei anklicke. Die dritte Shell-Extension kann das Ziel von Verknüpfungen kopieren. Sprich: Du klickst eine LNK-Datei an, wählst "Ziel kopieren" und dann "Einfügen", und es wird die Datei in den Ordner kopiert, auf die die LNK-Datei verweist. |
Re: Kontextmenü des Explorere ergänzen
Zu ersterem. Das geht nicht. Wenn ich den dateityp anklicke, soll schon noch das standard Programm geöffnet werden. In diesem Fall ein geht es um JPEGs. Digital Kameras speichern noch zusätzlich Infos in der Datei. Klicke ich jetzt eine JPEG Datei doppelt an, soll schon noch das Bildbetrachtungsprogramm aufgehen und nicht mein Programm welches die zusätzlichen Infos anzeigt.
Das heißt es wird wohl doch auf eine Shell-Extension hinauslaufen. |
Re: Kontextmenü des Explorere ergänzen
Du hast wahrscheinlich vergessen, dass es mehr als eine Zuordnung geben kann. Nimm als Beispiel den NSIS-Dateityp ".nsi". Standardmäßig trägt das Setup bei der Installation Notepad als Editor ein. Ich habe mir aber selbst den Eintrag für Proton ergänzt. Das heißt, wenn ich will, dann kann ich Notepad benutzen (Rechtsklick auf die ".nsi"-Datei -> Öffnen), oder ich nehme Proton (Doppelklick, bzw. Rechtsklick -> Bearbeiten mit Proton).
|
Re: Kontextmenü des Explorere ergänzen
PS:
Zitat:
|
Re: Kontextmenü des Explorere ergänzen
Das wäre natürlich auch eine Möglichkeit. Jetzt probiere ich es erstmal so mit einer Shell-Erweiterung. Und dann noch mal mit einer Property-Page.
|
Re: Kontextmenü des Explorere ergänzen
Liste der Anhänge anzeigen (Anzahl: 1)
Wo ist hier der Denkfehler:
Delphi-Quellcode:
Das Registrieren funktioniert wunderbar, nur bekomme ich keinen Menüpunkt zu sehen.
{*------------------------------------------------------------------------------
Explorer-Kontextmenü erweitern -------------------------------------------------------------------------------} function TExifReaderExt.QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, idCmdLast, uflags: UINT): HResult; resourcestring rsExifReader = 'ExifReader'; begin if ((uFlags and $0000000F) = CMF_NORMAL) or ((uFlags and CMF_EXPLORE) <> 0) then begin InsertMenu(Menu, indexMenu, MF_STRING or MF_BYPOSITION, idCmdFirst, PChar(rsExifReader)); Result := 1; end else Result := 0; end; Falls es nötig ist, hab eich mal die ganze Unit angehangen. |
Re: Kontextmenü des Explorere ergänzen
Hast du mal probiert, das nicht unter ".jpg" sondern dem dazu gehörenden Schlüssel (bei mir "jpegfile") einzutragen? So habe ich´s bei meiner Shell-Extension für LNK-Dateien gemacht. Kann auch sein, dass es nicht daran liegt, denn so ausführlich habe ich mich damit auch noch nicht beschäftigt.
Aber ich glaube immer noch, dass du zu kompliziert denkst. Greif dir den Standardschlüssel des ".jpg"-Eintrags und ergänze dort unter "shell" den Eintrag für dein Programm. Das müsste normalerweise reichen. |
Re: Kontextmenü des Explorere ergänzen
Zitat:
Zitat:
Delphi-Quellcode:
procedure TExifReaderExtFactory.UpdateRegistry(Register: Boolean);
var ClassID: string; begin if Register then begin inherited UpdateRegistry(Register); ClassID := GUIDToString(GUID_EXIFREADEREXT); CreateRegKey('.jpg\shellext', '', ''); CreateRegKey('.jpg\shellext\ContextMenuHandlers', '', ''); CreateRegKey('.jpg\shellext\ContextMenuHandlers\ExifReaderExt', '', ClassID); end else begin DeleteRegKey('.jpg\shellext'); DeleteRegKey('.jpg\shellext\ContextMenuHandlers'); DeleteRegKey('.jpg\shellext\ContextMenuHandlers\ExifReaderExt'); inherited UpdateRegistry(Register); end; end; |
Re: Kontextmenü des Explorere ergänzen
Ändere ShellExt mal in ShellEx ;)
...:cat:... |
Re: Kontextmenü des Explorere ergänzen
Zitat:
Wenn du deinen selbst geschriebenen Texteditor als zusätzlichen Editor für Textdateien registrieren willst, dann baust du doch dafür auch keine Shell-Extension zusammen. Na ja, ich kann nur für mich sprechen ... ;) ... Also ich würde die Registry öffnen und den Standardwert von ".txt" auslesen. Das wäre bei mir "txtfile". Diesen Schlüssel öffne ich und ergänze dann unter "shell" die notwendigen Einträge für meinen Editor. So wie man das auch macht, wenn man seinen eigenen Dateityp registriert. Nur dass ich eben nicht "open" überschreibe, sondern meinen eigenen Schlüssel für meinen eigenen Editor anlege. Dadurch kann ich Textdateien nach wie vor mit Notepad öffnen, ich kann aber auch meinen Editor nehmen. Das habe ich gemeint. Und mal ehrlich: In deiner Shell-Extension passiert auch nichts weiter. Du rufst bloß "ShellExecute" zum Starten des Programms auf. Sorry (meine Meinung), aber da hättest du dir den Aufwand sparen können. :stupid: |
Re: Kontextmenü des Explorere ergänzen
Ui, und das hier:
Zitat:
|
Re: Kontextmenü des Explorere ergänzen
Also wenn du soll willst könnte ich mein Programm auch in das "Senden an"-Menü packen. Ich wollte es aber mal über das Kontextmenü probieren.
|
Re: Kontextmenü des Explorere ergänzen
Liegt das irgendwie an mir: :cry:
Habe ich dir was getan? Mag mich keiner mehr? :mrgreen: Wenn du es mit dem von mir genannten Prinzip der Dateiendung machst, dann steckt es doch im Kontextmenü. Was denn noch? Sorry, aber ich muss mal diesen hier machen: :wall: :zwinker: |
Re: Kontextmenü des Explorere ergänzen
Ich stehe irgendwie auf dem Schlauch.
Was soll ich in der Registry eintragen? Ginge das dann auch mit einer inf-Datei? Und wenn ja. Wie müsste diese aussehen? |
Re: Kontextmenü des Explorere ergänzen
Ich habe schon befürchtet, dass ich mit dir in Quellcode sprechen muss, damit du mich verstehst. :mrgreen: Hier mal das Beispiel für Textdateien.
Delphi-Quellcode:
Würdest du jetzt das Kontextmenü einer Textdatei aufrufen, dann siehst du nach wie vor die Einträge "Öffnen", "Drucken", usw. Aber ebenfalls dabei ist jetzt auch "ProtonEdit". Ist zwar kein schöner Begriff für´s Menü, aber es geht ja nur um die Idee.
procedure TForm1.Button1Click(Sender: TObject);
var reg : TRegistry; s : string; begin reg := TRegistry.Create; if(reg <> nil) then try reg.RootKey := HKEY_CLASSES_ROOT; s := ''; // womit ist der Typ ".txt" verknüpft? if(reg.OpenKey('.txt',false)) then try s := reg.ReadString(''); finally reg.CloseKey; end; // so, gibt´s da was? if(s <> '') and (reg.KeyExists(s)) and // dann öffnen, ... (reg.OpenKey(s + '\shell\ProtonEdit\command',true)) then try // ... & Proton ergänzen reg.WriteString('','"c:\programme\powertoy\proton.exe" "%1"'); finally reg.CloseKey; end; finally reg.Free; end; end; Schönen Gruß an deine Freundin. Die soll dich nicht so hart ... äh ... ran nehmen ... ;) |
Re: Kontextmenü des Explorere ergänzen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi @ all,
sagt mal leute macht ihr euch das hier nicht alle ein wenig schwer?? Extra mit ner shell Extension an kommen? Geht bestimmt auch aber irgendwie ist das doch so, als wenn man mit spatzen auf kanonen schießt... :gruebel: also ich dachte immer eigene einträge in ein Kontextmenü vom Exploer hinzufügen ginge so... Hier mal der inhalt einer Reg-Datei [regFile] Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\jpegfile\shell\Extra\command] @="Programmpfad \"%1\"" [/regFile] Da wo Extra steht kommt die Caption des Menü-Punkts rein; Bei Programmpfad darf jeder mal raten :zwinker: Und danach wo \"%1\" kommt nachher der Pfad der angewählen Datei rein... Also bei mir gings so.... siehe Screen-Shot... cya Corelgott |
Re: Kontextmenü des Explorere ergänzen
Spitze. Schwarze Schrift auf dunkelgrauen Hintergrund. Wie kannst du damit arbeiten? :roll:
So, habe es hjetzt geschaft. Stelle es gleich in der Opensource-Sparte vor. |
Re: Kontextmenü des Explorere ergänzen
Freut mich, dass ich helfen konnte....
Zitat:
Mein Fensterhintergrund ist dazu noch hell grau statt weis... Wird man wenigstens nicht so extrem geblendet, wenn man nachts vorm pc sitzt !!! :cyclops: cya Corelgott |
Re: Kontextmenü des Explorere ergänzen
Zitat:
|
Re: Kontextmenü des Explorere ergänzen
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Darum halte ich persönlich den o.g. Weg für besser, bei dem herausgefunden wird, auf welchen Schlüssel ein Dateityp verweist. |
Re: Kontextmenü des Explorere ergänzen
Hallo!
Ich habe den Code von MathiasSimmack (s.o.) benutzt und wollte fragen, wie ich diesen Eintrag im Kontextmenü wieder entfernen kann? Gruß, dopeline |
Re: Kontextmenü des Explorere ergänzen
Ein viel besserer Gegenvorschlag:
![]() Diskussionen, Kritik, (Verbesserungs)Vorschläge sind immer erwünscht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz