Moin,
Ich habe da ein Problem:
Ich habe bereits vorher schon Kontext-Menu-Handler geschrieben, alle funktionierten tadellos, doch sie hatten nur einen einzigen Menüpunkt. Da ich, nach mehreren fehlgeschlagenen Versuchen, keine Lust mehr hatte mir eine selbst gebaute Lösung zu bauen, habe ich mich nach eine Fertigen umgesehen um dort zu lernen wie man das macht. Diese fand ich auch, und zwar
hier.
Doch sobald ich mein Projekt auf diese Methode angepasst hatte, war überhaupt kein Kontext-Menü mehr zu sehen. Als ich dann wieder Stunden mit der Fehlersuche (von dem ich bis gerade eben sicher war, er läge auf meiner Seite) herumgeschlagen hatte, kam ich auf die Idee zu Testzwecken meinem kompletten eigenen Code zu verwerfen und stattdessen den aus dem Tutorial zu verwenden. Siehe da, es geht! Alles was ich da noch tun musste, war die Erweiterung auf Exe (oder Zip/WasAuchImmer) zu beschränken und da machte ich eine Interessante Beobachtung:
Mein eigener Code war die ganze zeit korrekt, bzw so korrekt wie der aus dem Tutorial, denn sobald man die Extension auf eine einzige Erweiterung begrenzt ist's zappenduster.
Die große Preisfrage ist nun: Was zum Geier muss ich machen um die Funktion der
DLL auf eine einzige Extension (zu Testzwecken hier ".Zip) zu beschränken?
Achja:
Ich habe den Code so abgeändert, alles andere ist gleich geblieben und auf der oben genannten Seite einsehbar (sogar fertig zum herunterladen):
Delphi-Quellcode:
procedure TDFKontextMenuShellExtFactory.UpdateRegistry(Register: boolean);
var
ClassID: string;
begin
if Register then
begin
inherited UpdateRegistry(Register);
ClassID := GUIDToString(GUID_TDFKontextMenuShellExt);
// Die Shell-Erweiterung wird hier für Ordner (Folder) registriert
// Der Text DFKontextMenu ist frei wählbar und charakterisier die eigene Erweiterung
// Die Shell-Erweiterung wird hier für alle Dateien registriert
// ansonsten muss statt des Sterns (alle Dateien) die konkrete Dateiendung
// stehen, z. B. '.zip'
// Der Text DFKontextMenu ist frei wählbar und charakterisier die eigene Erweiterung
CreateRegKey('.zip\shellex', '', '');
CreateRegKey('.zip\shellex\ContextMenuHandlers', '', '');
CreateRegKey('.zip\shellex\ContextMenuHandlers\DFKontextMenu', '', ClassID);
// Shell-Erweiterung als "genehmigt" eintragen
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, 'DFKontextMenu');
finally
Free;
end;
end
else
begin
// wird die Shell-Erweiterung wieder entfernt, werden die Einträge der
// Registrierung gelöscht
DeleteRegKey('.zip\shellex\ContextMenuHandlers\DFKontextMenu');
inherited UpdateRegistry(Register);
end;
end;
Falls da ein ganz einfacher Fehler drin liegt und ich mir selbst blöd vorkomme, wenn ich die Lösung sehe, gibt's für den Finder ein Getränk in der
DP-Bar
Grüße & Danke,
Max