![]() |
Registry: Explorer Kontextmenü zeigt sich nicht
Hallo,
seit Tagen bin ich schon am probieren, einen Kontextmenü Eintrag im Explorer zu erzeugen, das alle Dateien mit meinem Programm verknüpft. Mein bisher bester Ansatz ist folgender:
Delphi-Quellcode:
Die entsprechenden Keys werden auch alle erzeugt, aber leider erscheint nichts im Kontextmenü. Ich denke es muss sich um eine kleine Korrektur handeln, da ich mich aber nicht so gut mit der Registry auskenne, fällt sie mir nicht ein. Es wäre sehr lieb, wenn ihr mir etwas helfen könntet.
//GUID_TTestContextMenuShellExt ist als Konstante definiert
ClassID := GUIDToString(GUID_TTestContextMenuShellExt); //* für alle Dateien CreateRegKey('*\Shellex\ContextMenuHandlers\TestName', '', ClassID); //das hatten alle Scripts, die ich mir dazu angesehen habe. Aber wozu?! if (Win32Platform = VER_PLATFORM_WIN32_NT) then with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions', True); OpenKey('Approved', True); WriteString(ClassID, 'TestName'); finally Free; end; reg:=TRegistry.Create(); Reg.RootKey:=HKEY_CLASSES_ROOT; //Name des Eintrags, der im Kontextmenü erscheinen soll Reg.OpenKey('*\Shellex\ContextMenuHandlers\TestName',true); Reg.WriteString('','Titel des Eintrags'); Reg.CloseKey; //Dateien sollen mit dem Programm geöffnet werden //Ich habe auch schon probiert mit command oder shell\open\command Reg.OpenKey('*\Shellex\ContextMenuHandlers\TestName\open\command',true); Reg.WriteString('', Format('"%s" "%s"', [ParamStr(0), '%1'])); Reg.CloseKey; reg.free; SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); |
Re: Registry: Explorer Kontextmenü zeigt sich nicht
Und wo ist die Verknüpfung zwischen deinem Menüeintrag und der ClassID unter SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions?
Guck dir doch mal an, wie die anderen Einträge dort alle aussehen. Fällt dir da was auf? |
Re: Registry: Explorer Kontextmenü zeigt sich nicht
Zitat:
|
Re: Registry: Explorer Kontextmenü zeigt sich nicht
Richtig und was schreibst du anstelle der ClassID dahin:
Delphi-Quellcode:
Reg.OpenKey('*\Shellex\ContextMenuHandlers\TestName',true);
Reg.WriteString('','Titel des Eintrags'); |
Re: Registry: Explorer Kontextmenü zeigt sich nicht
in "*\shellex\ContextMenuHandlers\myname" werden die ClassIDs "registrierter" ContextMenu-Handler (meißt DLLs) angegeben
in "*\shell\myname" kannst du direkt eine Exe verknüpfen (hierfür gibt es in der DP auch mehrere Beispiele zu finden) |
Re: Registry: Explorer Kontextmenü zeigt sich nicht
Zitat:
|
Re: Registry: Explorer Kontextmenü zeigt sich nicht
Zitat:
Delphi-Quellcode:
Reg.OpenKey('*\Shellex\ContextMenuHandlers\TestName',true);
Reg.WriteString('',ClassID); Zitat:
Zitat:
|
Re: Registry: Explorer Kontextmenü zeigt sich nicht
Bauplan für einen "richtigen" ContextMenuHanlder:
![]() Du erstellst ein Interface IContextMenu, erstellst dafür eine DLL, registrierst diese DLL bei Windows und gibst dann deine Interface-ID bei Shellex\ContextMenuHandlers an. Mehr zu den anderen ContextMenuEinträgen: ![]() Wenn eine Anwendung mehrmals geladen wird, aber alles nur in Einer verarbeitet werden soll, dann schau bei Programmstart nach, ob diese Anwendung/EXE schonmal gestartet wurde und übergib dieser die nötigen Informationen. > z.B. ![]() |
Re: Registry: Explorer Kontextmenü zeigt sich nicht
Okay.. Schon mal vielen Dank, das sieht ja schon mal ganz gut aus. Eine DLL wollte ich eigentlich nicht mitliefern, daher bleiben eigentlich nur noch die beiden anderen Möglichkeiten (OneInstance und gemeinsame Übergabe). Die Seite von Microsoft sieht auch sehr vielversprechend aus, die werd ich mir mal in Ruhe ansehen müssen. Aber prinzipiell meint ihr geht mein Vorhaben, bei *\Shellex\ContextMenuHandlers\ mein Programm ohne DLL einzutragen oder???
|
Re: Registry: Explorer Kontextmenü zeigt sich nicht
Was hast du gegen die DLL? Ein Beispiel hätte ich noch auf meiner Seite:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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