![]() |
Eintrag ins Kontextmenü von markierten Dateien einfügen...
Hi alle,
ich würde gerne wissen, wie ich ein Programm so in das Windows Kontextmenü einbinden kann, dass ich ein paar Dateien (Ordner sind nicht nötig) markiere und die dann per Kommandozeile an das Prog übergeben werden. Brauchen tu ich das für ein Tool, das mir SFVs und andere Hashfiles erzeugt (SHA-1, MD5, CRC32, was man so braucht...) thx |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Such mal nach
![]() |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
sorry, aber das meinte ich nicht.
ich denke, dass ich da irgendwo in der registry ein paar keys eintragen muss. mit programmieren hat das nichts zu tun. Wenn ich beliebige Dateien markiere und dann das Kontextmenü aufrufe, dann erscheint ja auch ein Eintrag für den Texteditor, den ich benutze. Nur will ich eben die Pfade der markierten Dateien über Kommandozeilenparameter an mein Prog schicken, welches diese Files dann verarbeitet. Jetzt etwas klarer? gruß, Christoph |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
[cl]"Dateityp registrieren"[/cl]. Bereits der erste Beitrag verlinkt auf mehrere Lösungswege. Ich habe hier auch noch einen
![]() Zitat:
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Wenn du das Prog aber nur einfach registrierst, dann wird dein Programm für jede Datei, die du markiert hast, separat geöffnet. Mit IContextMenu bekommst du hingegen eine Liste aller markierten Dateien und dein Prog wird nur einmal geöffnet.
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Was so nicht stimmt, schließlich kann ich mit Mutex/Semaphore dafür sorgen, dass das Programm nur ein einziges Mal startet, und dass jede weitere Instanz die Daten (= den Parameter) bspw. via WM_COPYDATA an die 1. Instanz weiterreicht und sich dann beendet.
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
ich glaube eher er will das nicht mit delphi lösen sondern nur für sich auf seinem pc als erleichterung einrichten. andernfalls wäre der beitrag in der falschen kategorie...
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Und? Dann soll er sich das programm-technische Prinzip trotzdem anschauen. Daraus kann er nämlich den Weg ableiten und dann die Einträge notfalls selbst vornehmen.
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
ja wie du schon sagst notfalls - der regeditor ist nicht sehr komfortabel. ich würde auch einen dialog geführten weg bevorzugen und einen solchen scheint er zu suchen :roll:
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Gibt´s doch auch:
Explorer auf -> Ansicht bzw. Extras -> Ordneroptionen -> Dateitypen -> Typ auswählen [Doppelklick] -> (Vorgänge) Neu. |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
wie klinkt sich denn z.B. WinRAR ins Kontextmenü? Wenn ich drei Textdateien und ne EXE markiere, dann würde es mir schon reichen, einen einfachen Eintrag unterhalb von "Öffnen" zu haben, durch den dann die Dateiliste als Parameter an mein Programm übergeben wird. Ich bin nicht derart geschickt, was das Rumhantieren im System angeht.
Die Tipps werde ich derweil mal ausprobieren Danke |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Zitat:
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
prima
ich werd mich dann melden, wenn ich mit den kontextmenüs fertig bin cu |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Sorry, ich hab mich entschieden, das Programm in C(++) zu schreiben. D.h. weiteres Nachfragen in diesem Forum wird mir wenig helfen. Außerdem ist dieses IContextMenu Dingens für mich zu undurchsichtig. Was in der MSDN steht, bezieht sich ja außerdem auch nur auf C/++. Zudem will ich nur eine einfache Dateiliste an mein Prog übergeben haben. Dass ich jetzt gleich das ganze Windows Context Menü System verstehen und umkrempeln können muss, seh ich nicht ein. Ich hab auch keine Delphi Komponenten gefunden, die mir sowas anbieten.
Gruß, Christoph |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Wo ist der Unterschied, ob du es in Delphi oder C/C++ schreibst? Die Probleme bleiben die gleichen. Und auch in C/C++ wirst du dich mit dem ICONTEXTMENU Kram auseinander setzten müssen. Und das ist nun mal der einizge Weg das gewünschte Ergebnis zu erziehlen für dich. Und da du wohl C/C++ lesen und schreiben kannst, dürfte es egeal sein in welcher Sprache die Beispiele sind.
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
hi,
ich hab genau das in meinem Open Source Editor "Codepad" implentiert. Dazu mußt du aber einiges an Grundwissen mitbringen, um dies in deinem Programm zu realisieren, ob nun in Pascal oder in C, leichter wird's dadurch wirklich nicht. 1.Erfahrung in der DLL-Programmierung 2.Grundkenntnisse Registry 3.Messages 4.nonVCL-Kenntnisse |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
@luckie:
Ich will mich auf C/++ einstellen, weil das später im Studium wohl eher benutzt wird als Pascal/Delphi. Du hast recht, in welcher Sprache die Beispiele sind, ist mir wirklich egal. Es könnte auch ADA oder Lisp sein, sieht ja eh alles gleich aus ;-) Nur einfache Beispiele hab ich nicht gesehen/erkannt. Mir würde es enorm helfen, einen Codeschnipsel von jemandem, der genau das schonmal machen musste, zu sehen. Klar, damit hab ich nichts gekonnt. Aber das Verstehen von IContextMenu kann ja später folgen. Meistens bin ich bis dann dermaßen in der Sache vertieft, dass ich für meine eigenen Erweiterungen das Themengebiet komplett können muss und es am Ende auch wirklich kann. Noch ein Wort zur Wahl der Sprache. Ich hab als Erstes die Algos für CRC32 und MD5 portiert. Dabei hab ich heftigen Gebrauch von nullterminierten Strings gemacht, wie es von der Sprache angedacht war. Nun musste ich mit Erschrecken feststellen, dass im C++ Builder schon wieder diese AnsiStrings vorkommen *würg* Am Ende läuft's darauf hinaus, dass ich GTK nehme und ne eigene Message Queue basteln muss (wie in Delphi nonVCL, womit ich mich noch nicht beschäftigt habe) @bigg: ich werd mir dein CodePad mal ansehen. nonVCL Kenntnisse oder Erfahrung mit Messages hab ich keine. DLL Programmierung wird nicht so tragisch sein. Vielen Dank für den Hinweis auf dein Programm Das war's soweit Gruß, Christoph |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
@bigg:
ich hab leider nicht eindeutig dein CodePad finden können, da anscheinend ein paar andere Leute den Namen "CodePad" verwenden. Könntest du mir einen Link geben? thx |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
hi,
hier ist der komplette SnapShot. Wichtig wären für dich die Unit - "instance.pas" - "CodepadExt" alias CodepadExt.dll - und in der "main.pas": - procedure Add_Codepad_To_Explorer; {Codepad in das Kontextmenu eintragen} - procedure Delete_Codepad_From_Explorer; {Codepad aus dem Kontextmenu entfernen} |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
vielen Dank, bigg! Ich grab mich mal ein...
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Ich hätte da noch meinen
![]() |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
hi,
die version hat aber nochimmer alphastatus. Insbesondere das Parameterinface muß überarbeitet werden. |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
@bigg:
Es wird wohl auf das Shell Dingens hinauslaufen. @luckie: Toll, danke, werd ich mir durcharbeiten. @alle: ich penn jetzt erstmal. meine konzentration ist langsam nicht mehr vorhanden. cu |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Danke für die Sourcen. Ich schreib mir erstmal ein Testproggi.
Der Wert der Context_ID wundert mich noch. Ist das eine Konstante, die ich wegen Windows so benutzen muss oder sollte ich mir ne zufällige neue erzeugen, weil die in Verbindung mit CodePad steht? Danke |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
hi,
verändere mal ein paar werte in meiner id. Context_ID: TGUID = '{F8305AE3-0C4A-2129-7A3C-4F02E978C3AB}'; Sind Hexwerte. |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
ich mach mir gleich ne komplett neue (kurz ein PHP Script bemüht):
{A6C23610-1147-2E94-DA9B-7E355837402A} [edit1] Muss ich Windows ne DLL anbieten oder reicht da die fertige EXE? Gruß, Christoph |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
hi,
die dll muss im windows-explorer eingebunden werden, sonst bringt dir das alles nichts. Dazu guck dir "Add_Codepad_To_Explorer" an. die dll kann auch über ein batchskript eingebunden werden, siehe dazu Luckie's Beispiel. |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Ich hab auf Verdacht gefragt. Wenn ich die DLL nicht benutzen müsste, dann hätte ich ein "Projekt" weniger zu beachten ;-)
[edit1] ich hab mal in der registry rumgeforscht und WinRAR wiedergefunden. Das benutzt auch ne DLL. Wird wohl auch übersichtlicher mit DLL sein. Danke und cu |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
hi,
ich hab gleich mal meine Shellextension unter Windows 98 (VmWare) getestet und gleich einen blöden Fehler gefunden. Zeile 406 in main.pas:
Code:
Die Anführungsstriche müssen bei Apartment weg.
try Reg.WriteString('ThreadingModel', '"Apartment"'); except end;
Code:
jetzt funktioniert die Shellerweiterung auch unter Win9x.
try Reg.WriteString('ThreadingModel', 'Apartment'); except end;
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Ach ja, VMWare. Gutes Teil.
Danke für den Hinweis. Soweit bin ich leider noch garnicht. Ich hab erstmal die DLL durchkämmt und die Messages rausgenommen, weil das für mein Proggie nicht funktionieren würde/sinnlos wäre. Jetzt kommt der Hauptteil des Testproggies dran. Wenn alles glatt läuft, meld ich mich nochmal. Ich hab allerdings noch ein anderes Problem wegen meinem SFV Prog, das parallel in einem anderen Thread erörtert wird: ![]() Gruß, Christoph |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Ein Problem hab ich noch mit der DLL: Einmal durch den Explorer benutzt, wird die DLL für Schreibzugriff gesperrt!
Code:
Gibt es noch ne andere Möglichkeit, die Datei zu entsperren, außer explorer.exe abzuschießen?
[Fataler Fehler] Ausgabedatei 'G:\My Projects\ContextMenu handling example\shellext\shellext.dll' kann nicht erstellt werden
[edit1] [edit2] [...] Die Contextmenü-Sache ist für mich an einem zufriedenstellenden Punkt angekommen. Das registrierte Proggi bekommt die Dateiliste als Parameter angehängt (paramstr()...) und wird gestartet. Mehr ist bei meinem SFV Tool weder nötig noch möglich. Wenn es jemand braucht, dann kann ich ein kleines Paket zusammenstellen, mit dem man die DLL auf jedes andere Programm abrichten kann. Danke an alle für die Hilfe und das beharrliche mit-der-Nase-draufstoßen auf die richtigen Lösungen :) |
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Zitat:
|
Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
Danke, Mathias
Das fertige Prog kommt dann in die Freeware/Opensource Ecke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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