{$APPTYPE CONSOLE}
program Project1;
uses Windows, SysUtils, ActiveX, ShlObj;
function GetShellFolder2(const Dir: UnicodeString; out Intf: IShellFolder2): Boolean;
var
DesktopFolder: IShellFolder;
DirPIDL: PItemIDList = nil;
begin
Result := Succeeded(SHGetDesktopFolder(DesktopFolder)) and
Succeeded(DesktopFolder.ParseDisplayName(0, nil, PWideChar(Dir),
ULONG(nil^), DirPIDL, ULONG(nil^))) and
Succeeded(DesktopFolder.BindToObject(DirPIDL, nil, IID_IShellFolder2, Intf));
CoTaskMemFree(DirPIDL);
end;
function GetFileProperty(const FileName: string; const Column: SHColumnID;
out Value: OleVariant): Boolean;
var
DirFolder: IShellFolder2;
FilePIDL: PItemIDList = nil;
WFileName: UnicodeString;
begin
WFileName := Utf8Decode(FileName);
Result := False;
if GetShellFolder2(ExtractFileDir(WFileName), DirFolder) then
begin
Result := Succeeded(DirFolder.ParseDisplayName(0, nil,
PWideChar(ExtractFileName(WFileName)),
ULONG(nil^), FilePIDL, ULONG(nil^))) and
Succeeded(DirFolder.GetDetailsEx(FilePIDL, Column, @Value));
CoTaskMemFree(FilePIDL);
end;
end;
const
CFileName = 'c:\Path\Your favorite file.JPG';
// All available values see in propkey.h in SDK
CColumnPhotoDateTaken: SHColumnID = ( // PKEY_Photo_DateTaken
fmtid: '{14B81DA1-0135-4D31-96D9-6CBFC9671A99}'; // FMTID_ImageProperties
pid: 36867);
var
Value: OleVariant;
begin
CoInitialize(nil);
if GetFileProperty(CFileName, CColumnPhotoDateTaken, Value) then
begin
Writeln('Photo Date Taken at UTC: ', Value);
end;
Readln;
end.