Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Shellextension für alle Dateien (HKEY_CLASSES_ROOT\*) (https://www.delphipraxis.net/110965-shellextension-fuer-alle-dateien-hkey_classes_root%5C%2A.html)

Sko 27. Mär 2008 12:34


Shellextension für alle Dateien (HKEY_CLASSES_ROOT\*)
 
Hallo,

ich möchte eine Shellextension registrieren und habe mir dazu Luckie´s ExifReader angesehen und angepasst, das Ganze funktioniert ja ganz gut bei bestimmten Dateitypen, wenn ich´s aber für alle haben möchte (*), kommt beim registrieren immer "DllRegisterServer in Blub.dll fehlgeschlagen. Fehlercode: 0x80004005". Weis jemand warums dort nicht geht und wie man´s sonst machen muss? Hier noch der Code:

Delphi-Quellcode:
procedure TBlubExtFactory.UpdateRegistry(Register: Boolean);
var
  ClassID: string;
  rgHandle: HKEY;
  lpType, cbData: DWORD;
  s: string;
begin
  s := '';
  if RegOpenKeyEx(HKEY_CLASSES_ROOT, '*', 0, KEY_READ, rgHandle) = // < da stehts, mit '*' kommt ein Fehler, mit z.B. '.jpg' oder '.bmp' läufts
    ERROR_SUCCESS then
  begin
    try
      if RegQueryValueEx(rgHandle, '', nil, @lpType, nil, @cbData) =
        ERROR_SUCCESS then
      begin
        setlength(s, cbData);
        RegQueryValueEx(rgHandle, '', nil, nil, @s[1], @cbData);
        setlength(s, cbData - 1);
      end;
    finally
      RegCloseKey(rgHandle);
    end;
  end;
  if Register then
  begin
    inherited UpdateRegistry(Register);
    ClassID := GUIDToString(GUID_BLUBEXT);
    CreateRegKey(s + '\shellex', '', '');
    CreateRegKey(s + '\shellex\ContextMenuHandlers', '', '');
    CreateRegKey(s + '\shellex\ContextMenuHandlers\BlubExt', '', ClassID);
  end
  else
  begin
    DeleteRegKey(s + '\shellex\ContextMenuHandlers\BlubExt');
    inherited UpdateRegistry(Register);
  end;
end;

Sko 27. Mär 2008 19:56

Re: Shellextension für alle Dateien (HKEY_CLASSES_ROOT\*)
 
OK, so schwer wars garnicht: bei einzelnen Dateiendungen werden die Registrierungsschlüssel für Shell-Erweiterungen ja nicht direkt im Schlüssel der Erweiterung (z. B. HKEY_CLASSES_ROOT\.jpg) gespeichert, sondern in einem anderen, auf den der Schlüssel der Erweiterung verweist (z. B. HKEY_CLASSES_ROOT\.jpg verweist auf HKEY_CLASSES_ROOT\jpegimage). Bei dem Schlüssel für alle Dateien (HKEY_CLASSES_ROOT\*) scheint das nicht zu gelten, da stehts direkt drin, bei mir auch noch 7-Zip und ICQ, und wenn man da rein schreibt wird der Menüeintrag auch angezeigt. Man kann sich den ersten Teil also sparen.

Delphi-Quellcode:
procedure TBlubExtFactory.UpdateRegistry(Register: Boolean);
var
  ClassID: string;
begin
  if Register then
  begin
    inherited UpdateRegistry(Register);
    ClassID := GUIDToString(GUID_BLUBEXT);
    CreateRegKey('*\shellex', '', '');
    CreateRegKey('*\shellex\ContextMenuHandlers', '', '');
    CreateRegKey('*\shellex\ContextMenuHandlers\BlubExt', '', ClassID);
  end
  else
  begin
    DeleteRegKey('*\shellex\ContextMenuHandlers\BlubExt');
    inherited UpdateRegistry(Register);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 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