Adding and removing a shell extension

Submitted by:Andery Smith

Date added:12 March, 2012

Category:Delphi

This Delphi code example shown how to add and remove a shell extension

Tags: shell extension

Code Snippet:

{ Add shell extension to registry } 
procedure AddShellExt(const GUID: TGUID; const ShellExtDll, FileExt, UtilityName: string);
var Key: string;
BufGUID: array [0..255] of WideChar;
FileType: string;
begin
with TRegistry.Create do
try
RootKey := HKEY_CLASSES_ROOT;
StringFromGUID2(GUID, BufGUID, SizeOf(BufGUID));

if not OpenKey(FileExt, False) then Exit;

if FileExt <> '*' then
begin
FileType := ReadString('');
CloseKey;
OpenKey(FileType, False);
end;

Key := Format('shellex\ContextMenuHandlers\%s', [UtilityName]);
OpenKey(Key, TRUE);
WriteString('', BufGUID);
CloseKey;

Key := Format('CLSID\%s', [BufGUID]);
OpenKey(Key, True);
WriteString('', UtilityName);
OpenKey('InprocServer32', True);
WriteString('', ShellExtDll);
WriteString('ThreadingModel', 'Apartment');
CloseKey;
finally
Free;
end; {try}
end;


{ Remove shell extension from registry }
procedure RemoveShellExt(const GUID: TGUID; const ShellExtDll, FileExt, UtilityName: string);
var Key: string;
BufGUID: array [0..255] of WideChar;
FileType: string;
begin
with TRegistry.Create do
try
RootKey := HKEY_CLASSES_ROOT;
StringFromGUID2(GUID, BufGUID, SizeOf(BufGUID));
FileType := FileExt;
if FileType <> '*' then
begin
if not OpenKey(FileExt, False) then Exit;
FileType := ReadString('');
CloseKey;
end;

Key := Format('%s\shellex\ContextMenuHandlers\%s', [FileType,UtilityName]);
DeleteKey(Key);
Key := Format('CLSID\%s', [BufGUID]);
DeleteKey(Key);
finally
Free;
end; {try}
end;
 
 

Comments