![]() |
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; |
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