Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [Erledigt] Kontextmenü Datei mit meinem Programm öffnen (https://www.delphipraxis.net/50746-%5Berledigt%5D-kontextmenue-datei-mit-meinem-programm-oeffnen.html)

klaus.meyer 30. Jul 2005 21:47


[Erledigt] Kontextmenü Datei mit meinem Programm öffnen
 
Hallo liebe DP-ler,

ich schreibe gerade ein Programm zum editieren der ID3-Tags in MP3-Dateien.
Und jetzt möchte ich gerne, dass wenn ich auf eine MP3-Datei rechts klicke in dem
Menü das Symbol meinses Programmes mit dem Text "ID3-Tags bearbeiten" erscheint und
durch klick auf dieses Menü-Item mein Programm mit dem Dateinamen als Parameter gestartet wird.
Das mit den Parametern hab ich schon eingebaut, nur das mit der Integration in das Menü bekomm ich nicht hin.

Das sollte dann so aussehen

http://img194.imageshack.us/img194/9825/screen1th.png

Der Eintrag ist von einem anderen Programm.


Ich hoffe, dass ich ins richtige Forum gepostet habe.
Ich hab auch schon die Suche verwendet und leider nix gefunden.

Vielen Dank im Voraus für eure Hilfe :dp:

Viele Grüße

Klaus Meyer

[Edit]Was ich noch vergessen hab ich möchte das nicht unter Öffnen mit > haben sondern direkt im Kontextmenü[/Edit]

Olli 30. Jul 2005 21:54

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Mache das, was dieses REG-Script macht:
Code:
REGEDIT4

[HKEY_CLASSES_ROOT\mp3file\shell]

[HKEY_CLASSES_ROOT\mp3file\shell\[color=red]BELIEBIG[/color]]
; Hier kommt die Beschreibung
[u][color=red]@="&Bearbeiten"[/color][/u]

[HKEY_CLASSES_ROOT\mp3file\shell\[color=red]BELIEBIG[/color]\command]
[color=red]@="Pfad_zu_deinem_Programm"[/color]
Achtung, die Backslashes (\) in Pfaden dieser Dateien müssen immer doppelt sein. Wenn du Anführungszeichen im Pfad hast, müssen diese als \" geschrieben werden. Zuguterletzt benutzt du zB %L um den Parameter zu übergeben (also die Datei deren Kontextmenü du offen hast). Dies ist die simpelste Methode.

Wenn du die unterstrichene Zeile wegläßt, erscheint "BELIEBIG" als Eintrag im Kontextmenü!

Sprint 30. Jul 2005 21:56

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
In deinem Delphi InstallPath findest du den Ordner \Demos\ActiveX\ShellExt. Dort sind einige Beispiele.

klaus.meyer 30. Jul 2005 21:57

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
:wiejetzt:

Sorry aber wie soll das dann in Delphi gehen?


Edit:

Also müsste ich ein Script anlegen:

Delphi-Quellcode:
REGEDIT4

[HKEY_CLASSES_ROOT\mp3file\shell]

[HKEY_CLASSES_ROOT\mp3file\shell\BELIEBIG]
; Hier kommt die Beschreibung
@="&ID3-Tag bearbeiten"

[HKEY_CLASSES_ROOT\mp3file\shell\BELIEBIG\command]
@="%programmfiles%\ID3\id3-edit.exe"
Was muss ich jetzt statt Beliebig schreiben?

Olli 30. Jul 2005 22:03

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Zitat:

Zitat von Sprint
In deinem Delphi InstallPath findest du den Ordner \Demos\ActiveX\ShellExt. Dort sind einige Beispiele.

Sprint hat recht, aber Vorsicht. Dies ist ein komplett anderes Konzept. Wenn es dir darum geht mit deiner EXE bei einem bestimmten Dateityp einen oder mehrere Einträge im Kontextmenü zu haben ist dies sicher Overkill. Außerdem ist es absolut nicht trivial Shell-Extensions zu debuggen!

@klaus.meyer: Du erstellst ein TRegistry-Objekt und dann erstellst du (wenn nicht vorhanden) shell unterhalb von mp3file (oder alternativ .mp3). Danach die andern Pfade wie im Reg-Script dargestellt. "@=" signalisiert, daß es der Standardwert eines Schlüssels ist.

Zitat:

Zitat von klaus.meyer
Was muss ich jetzt statt Beliebig schreiben?

Was immer du willst. Es sollte vorzugsweise nicht mit einem vorhandenen Schlüssel kollidieren. Das ist die einzige Bedingung.

klaus.meyer 30. Jul 2005 22:06

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Sorry für die dumme Frage:

Wo finde ich die Komponente T-Regestry?

Olli 30. Jul 2005 22:14

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Zitat:

Zitat von klaus.meyer
Wo finde ich die Komponente T-Regestry?

Es gibt keine dummen Fragen ;)

Delphi-Referenz durchsuchenTRegistry findest du in der Unit Registry (also "uses Registry").

klaus.meyer 30. Jul 2005 22:16

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
OK danke aber wenn ich das jetzt über dieses Script mache (nur mal als install.reg)

dann geht das nicht kannst du mir sagen was ich falsch mache (des mit den doppelbackslashes hab ich nicht kapiert)

Delphi-Quellcode:
REGEDIT4

[HKEY_CLASSES_ROOT\mp3file\shell]

[HKEY_CLASSES_ROOT\mp3file\shell\shadow]
; Hier kommt die Beschreibung
@="&ID3-Tag bearbeiten"

[HKEY_CLASSES_ROOT\mp3file\shell\shadow\command]
@="%programmfiles%\Shadow\shadow.exe"

oder wirkt das erst nach nem neustart?

bigg 30. Jul 2005 22:20

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Liste der Anhänge anzeigen (Anzahl: 1)
moin,

ich habe vor einiger Zeit mal eine Demo dazu gemacht.

Olli 30. Jul 2005 22:22

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Zitat:

Zitat von klaus.meyer
dann geht das nicht kannst du mir sagen was ich falsch mache (des mit den doppelbackslashes hab ich nicht kapiert)

Code:
REGEDIT4

[HKEY_CLASSES_ROOT\mp3file\shell]

[HKEY_CLASSES_ROOT\mp3file\shell\shadow]
; Hier kommt die Beschreibung
@="&ID3-Tag bearbeiten"

[HKEY_CLASSES_ROOT\mp3file\shell\shadow\command]
@="%programmfiles%[color=red]\\[/color]Shadow[color=red]\\[/color]shadow.exe"
Allerdings ist es nicht sicher, daß es den Schlüssel mp3file bei dir gibt. Alternativ probierst du die "harte Methode" - die klappt eigentlich immer:
Code:
REGEDIT4

[HKEY_CLASSES_ROOT\.mp3\shell]

[HKEY_CLASSES_ROOT\.mp3\shell\shadow]
; Hier kommt die Beschreibung
@="&ID3-Tag bearbeiten"

[HKEY_CLASSES_ROOT\.mp3\shell\shadow\command]
@="%programmfiles%[color=red]\\[/color]Shadow[color=red]\\[/color]shadow.exe"
EDIT: Sorry, falsches Tag benutzt.

klaus.meyer 30. Jul 2005 22:25

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
muss ich danach neustarten?

Olli 30. Jul 2005 22:28

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Zitat:

Zitat von klaus.meyer
muss ich danach neustarten?

Eigentlich nicht. Du kannst versuchen ob du ausloggen und wier einloggen mußt. Aber auch das sollte nicht notwendig sein. Welches OS benutzt du?

klaus.meyer 30. Jul 2005 22:29

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Windows XP Home SP2

aber des mit dem abmelden probier ich mal


Hat aus nix gebracht.

Olli 30. Jul 2005 22:34

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Welches der beiden letzten Scripte hast du benutzt? Das mit mp3file oder das mit .mp3?

Dann wäre noch interessant, ob du mal mit REGEDIT.EXE nachgucken könntest, ob du HKEY_CLASSES_ROOT\.mp3 oder HKEY_CLASSES_ROOT\mp3file findest.

klaus.meyer 30. Jul 2005 22:36

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
das mit .mp3 hab ich benutzt


im regeditor seh ich unter mp3file\shell\shadow den eintrag aber es erscheint nix im kontextmenü ich start jetzt mal neu

Der Neustart hat auch nix gebracht

Olli 30. Jul 2005 22:42

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
2 Sachen. Kannst du mal den absoluten Pfad angeben (ich bin nicht sicher, ob eine Variable dort geht) und kannst du bitte ganz am Ende folgendes anfügen (noch vor dem abschließenden ")

Code:
\"%L\"
... damit übergibst du deinem Programm den Dateinamen.

klaus.meyer 30. Jul 2005 22:45

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Delphi-Quellcode:
REGEDIT4

[HKEY_CLASSES_ROOT\.mp3\shell]

[HKEY_CLASSES_ROOT\.mp3\shell\shadow]
; Hier kommt die Beschreibung
@="&ID3-Tag bearbeiten"

[HKEY_CLASSES_ROOT\.mp3\shell\shadow\command]
@="C:\\Programme\\Shadow\\shadow.exe\%L\"
Hat leider auch nix gebracht. Oder müssen des hinter dem \%L\ zwei " sein?

Olli 30. Jul 2005 22:48

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Zitat:

Zitat von klaus.meyer
Hat leider auch nix gebracht. Oder müssen des hinter dem \%L\ zwei " sein?

Du hast es nicht exakt kopiert :zwinker:

Code:
REGEDIT4 

[HKEY_CLASSES_ROOT\.mp3\shell]

[HKEY_CLASSES_ROOT\.mp3\shell\shadow]
@="&ID3-Tag bearbeiten"

[HKEY_CLASSES_ROOT\.mp3\shell\shadow\command]
@="C:\\Programme\\Shadow\\shadow.exe[color=red][u] \"%L\"[/u][/color]"
Bitte testen und danach verifizieren, daß die Defaultwerte (jene mit "@=") unter dem Schlüssel jeweils existieren.

klaus.meyer 30. Jul 2005 22:53

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Liste der Anhänge anzeigen (Anzahl: 1)
Der Schlüssel ist da siehe Anhang.

Olli 30. Jul 2005 22:57

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Zitat:

Zitat von klaus.meyer
Der Schlüssel ist da siehe Anhang.

Sieht für mich völlig korrekt aus. Entweder sollte "shadow" oder aber "ID3-Tag bearbeiten" in deinem Kontextmenü erscheinen. Irgendwie bin ich jetzt ein wenig ratlos.

Du kannst den Defaultwert nochmal so editieren, daß der Pfad deines Programms in doppelten Anführungsstrichen erscheint. Sonst weiß ich aktuell nicht weiter. Das ist nämlich die Methode, die auch MS benutzt (wenn nicht sogar echte Shell-Extensions, siehe Sprints Post, benutzt werden).

klaus.meyer 30. Jul 2005 23:01

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Habs editiert und es geht trotzdem nicht :(

Schade, dann werd ich wohl aufgeben müssen oder mir eine andere Lösung suchen müssen.

Duffy 30. Jul 2005 23:17

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Klaus
der Schlüssel darf nicht "shadow" heißen, er muß "open" heißen.

bye
Claus

klaus.meyer 30. Jul 2005 23:20

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Ich hab gerade die kompletten registry-einträge .mp3 und mp3file gelöscht und die .reg datei nochmal ausgefürt

dan gings aber wenn ich dan mit winamp die datei geöffnet habe und eingestellt habe er soll der standartplayer für mp3 sein
gings nichtmehr

Duffy 30. Jul 2005 23:23

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Hallo Klaus
weil die Winamp die Einträge überschreibt bzw. auf seine eigenen Einträge legt.

bye
Claus

klaus.meyer 30. Jul 2005 23:28

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Also geht es nicht wegen Winamp?

Aber andere Programme kann ich auch aus dem Kontext starten obwohl ich Winamp drauf hab

Duffy 30. Jul 2005 23:30

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Hallo Klaus,
ja, weil Winamp der Standardplayer sein will. Nimm die Verknüpfung bei Winamp raus und es wird funktionieren.

bye
Claus

klaus.meyer 30. Jul 2005 23:36

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Du hast recht es liegt nur an Winamp, aber ich kann ja nicht den usern von meinem Programm sagen sie sollen
Winamp deinstallieren.

Dann lass ich es eben so und änder das ein anderes mal

Also nochmal vielen Dank an Claus und Olli für eure Hilfe :kiss:

Olli 31. Jul 2005 10:30

Re: Kontextmenü von Datei --> Datei mit meinem Programm ö
 
Zitat:

Zitat von Duffy
der Schlüssel darf nicht "shadow" heißen, er muß "open" heißen.

Sorry, das stimmt so leider nicht. "open" ist ein sog. Verb, wie du es auch ShellExecute übergeben würdest. Wenn du nun also ShellExecute das Verb "print" und die Datei "sonstwas.doc" übergibst, wird sonstwas.doc gedruckt werden.

Es können beliebige eigene Verben hinzugefügt werden.

Nachtrag: Verben können wahlweise wie oben gezeigt arbeiten oder über DDE (Dynamic Data Exchange), eine veraltete Technik die als IPC-Mechanismus dient.

Duffy 31. Jul 2005 10:35

Re: [Erledigt] Kontextmenü Datei mit meinem Programm öffnen
 
Hallo Olli,
war ein Versuch wert ...

bye
Claus


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 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