JumpListTest (Delphi)
Description
This example uses the RegisterFileExtension function to register your executable on the system as a file handler. The RegisterFileExtensionsToUser function works for a list of instances. As a result, you can have Frequent and Recent Lists available for your app.
This is an example of usage of the RegisterFileExtension function:
procedure TJumpListMain.Button1Click(Sender: TObject);
var
LInfo: TFileRegisterInformation;
begin
LInfo.Extension := '.txt';
LInfo.FileTypeDescription := 'Jumplist text file';
LInfo.DefIconPath := Application.ExeName;
LInfo.OpenCommand := Application.ExeName + ' %1';
Linfo.Exename := ExtractFileName(Application.ExeName);
if not RegisterFileExtension(LInfo) then
ShowMessage('Failed');
end;
Code
unit uRegisterFileType;
interface
uses
System.Win.Registry, System.Generics.Collections;
type
TFileRegisterInformation = record
Extension: string;
FileTypeDescription: string;
DefIconPath: string;
OpenCommand: string;
Exename: string;
end;
function RegisterFileExtensionsToUser(aFileExtList: TList<TFileRegisterInformation>): boolean;
function RegisterFileExtension(FileInfo: TFileRegisterInformation): Boolean;
implementation
uses
Winapi.ShlObj, Winapi.Windows;
function RegisterFileExtension(FileInfo: TFileRegisterInformation): Boolean;
const
SOFT_CLASSES = '\Software\Classes\'; // do not localize
var
LReg: TRegistry;
buffer: Pointer;
begin
Result := False;
LReg := TRegistry.Create;
try
LReg.RootKey := HKEY_CURRENT_USER;
if LReg.OpenKey(SOFT_CLASSES + FileInfo.Extension + '\OpenWithProgids', true) then
LReg.WriteBinaryData(FileInfo.Exename, buffer, 0);
if LReg.OpenKey(SOFT_CLASSES + FileInfo.Exename, true) then
LReg.WriteString('', FileInfo.FileTypeDescription);
if LReg.OpenKey(SOFT_CLASSES + FileInfo.Exename + '\DefaultIcon', true) then
LReg.WriteString('', FileInfo.DefIconPath);
if LReg.OpenKey(SOFT_CLASSES + FileInfo.Exename +'\shell\open\command', true) then
LReg.WriteString('', FileInfo.OpenCommand);
Result := True;
finally
LReg.Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
function RegisterFileExtensionsToUser(aFileExtList: TList<TFileRegisterInformation>): Boolean;
const
SOFT_CLASSES = '\Software\Classes\'; // do not localize
var
aFileRegInfo: TFileRegisterInformation;
begin
Result := False;
for aFileRegInfo in aFileExtList do
begin
Result := RegisterFileExtension(aFileRegInfo);
if not Result then Break;
end;
end;
end.