Thema: Delphi Kontext Menu Handler..?

Einzelnen Beitrag anzeigen

Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#1

Kontext Menu Handler..?

  Alt 18. Jul 2007, 19:50
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
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat