Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Eintrag ins Kontextmenü von markierten Dateien einfügen... (https://www.delphipraxis.net/25931-eintrag-ins-kontextmenue-von-markierten-dateien-einfuegen.html)

ripper8472 15. Jul 2004 00:20


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

scp 15. Jul 2004 00:59

Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
 
Such mal nach Hier im Forum suchenIContextMenu.

ripper8472 15. Jul 2004 01:56

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

MathiasSimmack 15. Jul 2004 07:59

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 Direktlink ins Delphi-Forum, wobei du die dort gezeigten Units auch hier findest.

Zitat:

mit programmieren hat das nichts zu tun.
Eigentlich schon. Okay, wenn du dein Programm nur allein benutzt, dann kannst du die Einträge auch selbst erstellen. Aber sobald du es veröffentlichst, bzw. auch einfach nur an Freunde verteilst, solltest du die Funktionalität einbauen, weil sicher nicht jeder potentielle Benutzer Lust hat, seine Registry manuell bearbeiten zu müssen.

scp 15. Jul 2004 13:38

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.

MathiasSimmack 15. Jul 2004 14:32

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.

Meflin 15. Jul 2004 14:35

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...

MathiasSimmack 15. Jul 2004 14:38

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.

Meflin 15. Jul 2004 14:41

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:

MathiasSimmack 15. Jul 2004 14:53

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.

ripper8472 15. Jul 2004 15:41

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

scp 15. Jul 2004 16:22

Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
 
Zitat:

Zitat von ripper8472
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

WinRAR benutzt genau das Prinzip, was ich angesprochen hab.

ripper8472 15. Jul 2004 17:10

Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
 
prima

ich werd mich dann melden, wenn ich mit den kontextmenüs fertig bin

cu

ripper8472 18. Jul 2004 23:44

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

Luckie 19. Jul 2004 00:03

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.

bigg 19. Jul 2004 00:29

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

ripper8472 19. Jul 2004 00:40

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

ripper8472 19. Jul 2004 01:00

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

bigg 19. Jul 2004 01:05

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}

ripper8472 19. Jul 2004 01:07

Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
 
vielen Dank, bigg! Ich grab mich mal ein...

Luckie 19. Jul 2004 01:18

Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
 
Ich hätte da noch meinen Hier im Forum suchenExifReader anzubieten.

bigg 19. Jul 2004 01:20

Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
 
hi,

die version hat aber nochimmer alphastatus.
Insbesondere das Parameterinface muß überarbeitet werden.

ripper8472 19. Jul 2004 01:29

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

ripper8472 19. Jul 2004 21:52

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

bigg 19. Jul 2004 22:28

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.

ripper8472 19. Jul 2004 22:36

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

bigg 19. Jul 2004 23:03

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.

ripper8472 19. Jul 2004 23:51

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

bigg 20. Jul 2004 01:17

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:
try Reg.WriteString('ThreadingModel', '"Apartment"'); except end;
Die Anführungsstriche müssen bei Apartment weg.

Code:
try Reg.WriteString('ThreadingModel', 'Apartment'); except end;
jetzt funktioniert die Shellerweiterung auch unter Win9x.

ripper8472 20. Jul 2004 02:27

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: http://www.delphipraxis.net/internal...t.php?p=206360

Gruß, Christoph

ripper8472 20. Jul 2004 03:09

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:
[Fataler Fehler] Ausgabedatei 'G:\My Projects\ContextMenu handling example\shellext\shellext.dll' kann nicht erstellt werden
Gibt es noch ne andere Möglichkeit, die Datei zu entsperren, außer explorer.exe abzuschießen?

[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 :)

MathiasSimmack 20. Jul 2004 07:28

Re: Eintrag ins Kontextmenü von markierten Dateien einfügen.
 
Zitat:

Zitat von ripper8472
Ein Problem hab ich noch mit der DLL: Einmal durch den Explorer benutzt, wird die DLL für Schreibzugriff gesperrt! [...] Gibt es noch ne andere Möglichkeit, die Datei zu entsperren, außer explorer.exe abzuschießen?

Einmal kurz ab- und wieder anmelden.

ripper8472 20. Jul 2004 16:06

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