![]() |
Kontexmenü Problem
Hi Leute,
ich weiss das es diese Themen schon zur genüge gibt, aber in keinem wurde bis jetzt auf Folgendes Problem eingegangen: Viele Leute kennen ja WinRar oder irgendeinen Shredder. Bei WinRar kommt bei einem Rechtsklick auf einen Ordner das Kontexmenü, indem steht z.B. "Zu einem Archiv hinzufügen" auf höchster Ebene des Kontexmenüs (nicht bei "Neu", oder "Öffnen mit ..."); Und genau da brauch ich meinen Eintrag, er muss bei jedem Dateityp da sein, und bei Ordnern, wie und wo muss ich den machen? Ich Danke im Vorraus für jede Antwort, Gruß DelphiFreund |
Re: Kontexmenü Problem
stichwort dateiendung registrieren. in der codelib und im forum wirst du mehr als fündig!
|
Re: Kontexmenü Problem
schau mal in die Registry > HKEY_CLASSES_ROOT - dort wirst du fündig
an alles kommst du über "*" für das weitere gibt es mehrere Wege. einer wäre (der sollte aber auch schin hier im Forum erwähnt sein!):
Code:
HKEY_CLASSES_ROOT
> * > shell > machwas (irgendein kurzes wort) (Standard) = "Name, welche im Popupmenü angezeigt wird" > command (Standard) = "J:\Programme\xxx\yyy.exe %1" (dein Programm)
Code:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell] [HKEY_CLASSES_ROOT\*\shell\machwas] @="Name, welche im Popupmenü angezeigt wird" [HKEY_CLASSES_ROOT\*\shell\machwas\command] @="J:\\Programme\\xxx\\yyy.exe %1" |
Re: Kontexmenü Problem
Wenn du mehr Kontrolle über die Positionierung usw. haben willst musst du dich allerdings mit
![]() |
Re: Kontexmenü Problem
@himitsu:
Muss zwischen [HKEY_CLASSES_ROOT\*\shell und \machwas nicht noch ContextMenuHandles oder so? |
Re: Kontexmenü Problem
@DelphiFreund:
:arrow: Schau dir mal die Beispiele an, die du unter <DelphiInstallPath>\Demos\ActiveX\ShellExt findest. |
Re: Kontexmenü Problem
Danke :-D , mal sehen ob ich damit weiterkomme.
Gruß DelphiFreund |
Re: Kontexmenü Problem
"ContextMenuHandles"?
Also bei Schell ist das nicht nötig ... es furnktionier schon so, wie es ist ganz gut. Es könnte sein, dass es bei ShellEx benötigt wird ??? |
Re: Kontexmenü Problem
@himitsu: Jetzt wo du es sagst, bei mir gibt es nur Shellex kein Shell unter HKEY_CLASSES_ROOT\*\
Aus irgendeinem Grund hat es nicht funktioniert, ich wollte eh gerade Fragen wieso, weiß hier jemand was ich bei shellex beachten muss? |
Re: Kontexmenü Problem
hi,
nutze in jedem Fall die von Sprint angesprochene Variante. Ich habe mir ebenfalls schon vor etwas länger Zeit eine ShellExtension programmiert. Du erstellst eine DLL und bindest diese in die Explorer.exe über die Registry ein. Der Registry-Pfad ist "HKEY_CLASSES_ROOT\*\shellex". Da wirst du auch wohlmöglich die TGUID von WinRar wiederfinden. (TGUID ist ein Hexadezimalwert, such einfach mal nach dieser ID) Um mit der DLL und deinem Programm Daten auszutauschen, wirst du wohl um WM_CopyData nicht herum kommen. Damit wirst du dann die Pfade an dein Programm schicken. Der Vorteil einer ShellExtension ist: - Funktion auf allen Windows-Versionen - ParamStr(i) übergibt nur eine begrenzte Anzahl von Parametern, somit ist es nicht möglich mal eben 100 Dateipfade mit einem Mal zu übergeben, bei einer ShellExtension schon - mehrere gewählte Dateien werden so wesentlich schneller geöffnet bzw. das Hauptprogramm wird nicht immer wieder geöffnet - man kann Dateien, Ordner oder Laufwerke filtern usw. |
Re: Kontexmenü Problem
Die Methode klingt wirklich gut, aber ich hätte dazu noch Fragen:
Wie übergibt Explorer.exe die Dateinamen an die dll? Und wie bekomme ich die Dateipfade aus der dll in mein Programm, wenn ich das Programm durch die dll aufgerufen habe? Gruß DelphiFreund |
Re: Kontexmenü Problem
hi,
Zitat:
ein Unterprogramm von "Explorer.exe" ist. Die DLL laüft immer, wenn auch Explorer.exe läuft. Schau dir dazu das von Sprint angesprochene Beispiel an. (Delphi\Demos\ActiveX\ShellExt\contmenu.dpr) Zitat:
-> der Explorer übergibt die Pfade an die DLL, sobald du die rechte Maustaste gedrückt hast -> Deine DLL kann dann eine Dateiliste erstellen -> Jetzt gibt es mehrere Möglichkeiten die Liste an dein Programm zu übergeben -> 1.) Du übergibst die Speicher-Adresse der Liste und sendest sie an dein Programm 2.) oder du sendest die Liste über WM_CopyData an dein Programm (Messages, SendMessage) PS: Die DLL startet dann dein Programm und übergibt dann die Liste. Das Starten des Hauptprogrammes kostet Zeit, daher mußt du solange prüfen bis es gestartet ist. Den Pfad zur Exe kann man in der Registry abspeichern. |
Re: Kontexmenü Problem
Danke, das übersteigt eigentlich mein Wissen, aber ich werd das auch noch lernen, aber noch eine Frage, muss man den Computer nicht neustarten, bevor Explorer.exe die dll nutzt?
Gruß DelphiFreund P.S.: Oder zumindest Explorer.exe? |
Re: Kontexmenü Problem
hi,
nein nicht unbedingt: 1.) Man kann den Explorer beenden und wieder starten. 2.) Man könnte sich wieder ein- und ausloggen. 3.) regsvr32.exe benutzen |
Re: Kontexmenü Problem
@bigg: Wirklich vielen Dank für deine Hilfe, ohne dich würde ich das nie schaffen :-D
Aber was hat es mit der GUID in Contmenu.dpr auf sich? Muss das die GUID meines Programms sein? :gruebel: Und wo muss mein Programm in der Registry stehen, damit das mit der dll funktioniert :gruebel: :gruebel: ? Und was macht regsvr32,exe genau? Gruß DelphiFreund |
Re: Kontexmenü Problem
hi,
das was du alles angesprochen hast, hat mehr was mit installieren der DLL in den Explorer selbst zu tun. Es gibt 2 Wege dies zu tun: Einmal über regsvr32.exe mit Parametern oder manuell über die Registry. Die GUID ist eine eindeutige und einzigartige Nummer. Du verwendest sie nur, wenn du die Registry Variante verwenden möchtest. Dann werden mehrere Schlüssel mit diesem Wert angelegt, noch ein zwei Werte der DLL und schon ist sie registriert. Starte einfach mal regsvr32.exe, wie du siehst werden dir einige nützliche Parameter angezeigt, um eine DLL zu installieren bzw. zu deinstallieren. Verwendet man diese Variante erfolgt die Registierung in der Registry automatisch. Man braucht dann keine GUID. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 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