AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Pfad zu Verknüpfungen per Kontextmenü (Registry) übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Pfad zu Verknüpfungen per Kontextmenü (Registry) übergeben

Ein Thema von Guido Eisenbeis · begonnen am 18. Mai 2008 · letzter Beitrag vom 23. Mai 2008
Antwort Antwort
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

Pfad zu Verknüpfungen per Kontextmenü (Registry) übergeben

  Alt 18. Mai 2008, 13:41
Zitat von Guido Eisenbeis:
Ich habe ein Programm mit dem Namen "ThoGi ContextmenuTools" geschrieben. Mit ihm ist es möglich, zwei Funktionen zum Explorer-Kontextmenü hinzuzufügen:

"DOS Prompt Here" -> öffnet ein Konsolenfenster im entsprechenden Verzeichnis.
"Path To Clipboard" -> kopiert den Pfad der/des angeklickten Datei/Ordners in die Zwischenablage.

So weit, so gut! Alles funktioniert einwandfrei, inklusive dem Entfernen der Registry-Keys beim Deinstallieren. Alles? Fast alles! Eine klitzekleine Winzigkeit fördert meinen Hang zur Pedanterie *smile*:

Beim Kopieren des Pfades von Verknüpfungen wird halt nicht der Pfad der Vernküpfung in die Zwischenablage kopiert, sondern der Pfad des Verknüpfungs-Ziels.

Beispiel:

Man klickt mit rechts eine Datei an, das Kontextmenü öffnet sich und man wählt "Path To Clipboard". Über den entsprechenden Registry-Eintrag wird meine Applikation gestartet und ein Pfad übergeben.
Ist die angeklickte Datei eine "normale" Datei, z. B. "C:\Test.txt", so wird dieser Pfad korrekt übergeben.
Ist die angeklickte Datei jedoch eine Verknüpfung, z. B. "D:\Test.txt.lnk", so wird dann der Pfad zur Ziel-Datei, also in diesem Fall "C:\Test.txt" übergeben.

Wie kann ich dieses Problem nun so lösen, dass auch bei Verknüpfungen nicht der Pfad zur Ziel-Datei, sondern der Pfad der Vernküpfung selbst übergeben wird? (Wie gesagt, meine App bekommt den Pfad über den Registry-Eintrag, der für das Kontextmenü zuständig ist.)

Ok, ich habe einige andere Tools getestet, die die gleiche Funktionalität zur Verfügung stellen. Und auch bei allen anderen ist es so, dass bei Verknüpfungen der Pfad zum Ziel und nicht der zur Verknüpfung übergeben wird. Wenn wir also hierfür keine Lösung finden, ist das nicht so schlimm. Aber mein Ehrgeiz würde sich freuen, wenn es doch eine Lösung gäbe! *freu*

Guido.
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Pfad zu Verknüpfungen per Kontextmenü (Registry) übergeb

  Alt 23. Mai 2008, 00:45
Hallo Experten,

fast 'ne Woche und keine Antwort!?

Habt ihr meinen Thread übersehen, oder wisst ihr nichts dazu? Ich würde mich ja schon freuen über einen klitzekleinen Tipp, einen Hinweis ober wenigstens einen Verweis auf eine Stelle (z. B. ein anderes Forum), wo ich auf eine Lösung hoffen kann!

Guido.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Pfad zu Verknüpfungen per Kontextmenü (Registry) übergeb

  Alt 23. Mai 2008, 06:03
Moin Guido,

abgesehen davon, dass die Shell den Pfad einer Verknüpfung auch ohne deine Hilfe in die Zwischenablage befördert (Strg+C): Hast du denn deinen Eintrag in der Registry auch an der richtigen Stelle gemacht?

Code:
[HKEY_CLASSES_ROOT\lnkfile\shell\copylink\command]
@="C:\\Programme\\DeinProgramm.exe \"%1\""
Freundliche Grüße
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Pfad zu Verknüpfungen per Kontextmenü (Registry) übergeb

  Alt 23. Mai 2008, 13:49
Hallo marabu.

Zitat von marabu:
abgesehen davon, dass die Shell den Pfad einer Verknüpfung auch ohne deine Hilfe in die Zwischenablage befördert (Strg+C)
Den Hinweis verstehe ich nicht. Zum einen geht es mir, wie oben beschrieben, darum, einen Pfad mit Hilfe des Explorer-Kontextmenüs in die Zwischenablage zu kopieren. Zum anderen wenn du eine Verknüpfung markierst, und "Strg+C" drückst, wird die Verknüpfung und nicht der Pfad in die Zwischenablage kopiert.


Zitat von marabu:
Code:
[HKEY_CLASSES_ROOT\lnkfile\shell\copylink\command]
@="C:\\Programme\\DeinProgramm.exe \"%1\""
Hierfür schonmal ein dickes Dankeschön! Wir nähern uns einer Lösung. Der von dir genannte Registry-Eintrag erfüllt zunächstmal den beabsichtigten Zweck. Es wird tatsächlich der Pfad zur Verküpfung in die ZW kopiert. Leider werden damit aber zwei Einträge ins Explorer-Kontextmenü geschrieben, sobald man eine Verknüpfung rechtsklickt.

Meine Schlüssel:

Für Dateien:
Code:
[HKEY_CLASSES_ROOT\*\shell\GES_PathToClipboard\command]
@="\"C:\\Programme\\ContextMenuTools (GES)\\PathToClipboard.exe\" \"%1\""
Für Ordner:
Code:
[HKEY_CLASSES_ROOT\Directory\shell\GES_PathToClipboard\command]
@="\"C:\\Programme\\ContextMenuTools (GES)\\PathToClipboard.exe\" \"%1\""
Wie kann ich das denn jetzt so anrangieren, dass auch bei Verknüpfungen nur ein Eintrag "Path To Clipboard" im Explorer-Kontextmenü erscheint?

Dankbare Grüße,
Guido.

Edit: Reg-Keys formatiert.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Pfad zu Verknüpfungen per Kontextmenü (Registry) übergeb

  Alt 23. Mai 2008, 15:07
Hallo Guido,

es wird zwar der Pfadname der Verknüpfung in die Zwischenablage übernommen, allerdings nicht im Format CF_TEXT, sondern im Shell Clipboard Format CF_HDROP. Mit Strg+C erzeugt die Shell spezielle Dateilisten in der Zwischenablage, Dateien werden nicht dorthin kopiert. Du kannst das mit dem Windows Tool CLIPBRD einfach kontrollieren.

Die besondere Behandlung von Verknüpfungen wirst du wohl akzeptieren müssen. Du könntest dafür sorgen, dass man deine Verben unterscheiden kann: COPY LINK, COPY FILE, COPY DIR. Mehr fällt mir zu diesem Problem jetzt leider auch nicht ein.

Freundliche Grüße
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Pfad zu Verknüpfungen per Kontextmenü (Registry) übergeb

  Alt 23. Mai 2008, 16:45
Hallo marabu

Zitat von marabu:
... allerdings nicht im Format CF_TEXT, sondern im Shell Clipboard Format CF_HDROP ...
Das war mir soweit bekannt. Da lässt sich aber leider nicht für meine Zwecke nutzen, den Pfad einer Datei/Ordner als Text verwertbar in die ZW zu kopieren.

Zitat von marabu:
Du könntest dafür sorgen, dass man deine Verben unterscheiden kann: COPY LINK, COPY FILE, COPY DIR. ...
Das halte ich für einen interessanten Workaround! Diese Idee muss ich mir durch den Kopf gehen lassen! *freu* Danke! Eigentlich sollte mein Programm recht einfach gehalten werden. Aber vielleicht könnte ich mich auch mal über KontextmenuHandler schlau machen und wie aufwändig die sind.

Vielen Dank,
Guido.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz