FIX: Show file names with extension

This commit is contained in:
Alexander Koblov 2023-06-05 20:00:35 +03:00
commit b91de2796c
4 changed files with 31 additions and 15 deletions

View file

@ -97,7 +97,7 @@ begin
OleCheck(SHGetDesktopFolder(FDesktopFolder));
OleCheck(SHGetFolderLocation(0, CSIDL_DRIVES, 0, 0, {%H-}FDrives));
OleCheck(FDesktopFolder.BindToObject(FDrives, nil, IID_IShellFolder2, Pointer(FRootFolder)));
FRootPath := GetDisplayName(FDesktopFolder, FDrives, SHGDN_NORMAL);
FRootPath := GetDisplayName(FDesktopFolder, FDrives, SHGDN_INFOLDER);
FOperationsClasses[fsoMove] := TShellMoveOperation.GetOperationClass;
FOperationsClasses[fsoCopy] := TShellCopyOperation.GetOperationClass;
FOperationsClasses[fsoCopyIn] := TShellCopyInOperation.GetOperationClass;
@ -142,7 +142,7 @@ var
begin
OleCheckUTF8(SHGetDesktopFolder(DesktopFolder));
OleCheckUTF8(SHGetFolderLocation(0, CSIDL_DRIVES, 0, 0, {%H-}DrivesPIDL));
Result:= GetDisplayName(DesktopFolder, DrivesPIDL, SHGDN_NORMAL);
Result:= GetDisplayName(DesktopFolder, DrivesPIDL, SHGDN_INFOLDER);
end;
function TShellFileSource.FindObject(const AObject: String; out
@ -186,7 +186,7 @@ begin
begin
while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do
begin
AItemName:= GetDisplayName(AParent, PIDL, SHGDN_NORMAL);
AItemName:= GetDisplayNameEx(AParent, PIDL, SHGDN_INFOLDER);
if AName = AItemName then
begin
AValue:= PIDL;
@ -215,7 +215,7 @@ function TShellFileSource.FindFolder(const Path: String; out
begin
while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do
try
AName:= GetDisplayName(AFolder, PIDL, SHGDN_NORMAL);
AName:= GetDisplayNameEx(AFolder, PIDL, SHGDN_INFOLDER);
if AName = AObject then
begin

View file

@ -10,15 +10,6 @@ uses
uShellFolder, uShellFileOperation, uFileSourceCopyOperation,
uFileSourceDeleteOperation, uFileSourceSetFilePropertyOperation, uGlobs, uLog;
const
SID_SYSTEM = '{B725F130-47EF-101A-A5F1-02608C9EEBAC}';
SCID_FileSize: TSHColumnID = ( fmtid: SID_SYSTEM; pid: 12 );
SCID_DateModified: TSHColumnID = ( fmtid: SID_SYSTEM; pid: 14 );
SCID_DateCreated: TSHColumnID = ( fmtid: SID_SYSTEM; pid: 15 );
SID_COMPUTER = '{9B174B35-40FF-11D2-A27E-00C04FC30871}';
SCID_Capacity: TSHColumnID = ( fmtid: SID_COMPUTER; pid: 3 );
type
{ TItemList }

View file

@ -52,7 +52,7 @@ begin
aFile:= TShellFileSource.CreateFile(Path);
AFile.Name:= GetDisplayName(AFolder, PIDL, SHGDN_INFOLDER);
AFile.Name:= GetDisplayNameEx(AFolder, PIDL, SHGDN_INFOLDER);
AFile.LinkProperty.LinkTo:= GetDisplayName(AFolder, PIDL, SHGDN_FORPARSING);
rgfInOut:= SFGAO_HIDDEN or SFGAO_FOLDER;

View file

@ -7,6 +7,18 @@ interface
uses
Classes, SysUtils, Windows, ShlObj, ActiveX, ComObj, ShlWapi, uShlObjAdditional;
const
SID_SYSTEM = '{B725F130-47EF-101A-A5F1-02608C9EEBAC}';
SCID_FileSize: TSHColumnID = ( fmtid: SID_SYSTEM; pid: 12 );
SCID_DateModified: TSHColumnID = ( fmtid: SID_SYSTEM; pid: 14 );
SCID_DateCreated: TSHColumnID = ( fmtid: SID_SYSTEM; pid: 15 );
SID_NAME = '{41CF5AE0-F75A-4806-BD87-59C7D9248EB9}';
SCID_FileName: TSHColumnID = ( fmtid: SID_NAME; pid: 100 );
SID_COMPUTER = '{9B174B35-40FF-11D2-A27E-00C04FC30871}';
SCID_Capacity: TSHColumnID = ( fmtid: SID_COMPUTER; pid: 3 );
const
FOLDERID_AccountPictures: TGUID = '{008ca0b1-55b4-4c56-b8a8-4de4b299d3be}';
FOLDERID_ApplicationShortcuts: TGUID = '{A3918781-E5F2-4890-B3D9-A7E54332328C}';
@ -100,6 +112,7 @@ function MultiFileProperties(pdtobj: IDataObject; dwFlags: DWORD): HRESULT;
function GetIsFolder(AParent: IShellFolder; PIDL: PItemIDList): Boolean;
function GetDisplayName(AFolder: IShellFolder; PIDL: PItemIDList; Flags: DWORD): String;
function GetDisplayNameEx(AFolder: IShellFolder2; PIDL: PItemIDList; Flags: DWORD): String;
function GetDetails(AFolder: IShellFolder2; PIDL: PItemIDList; const pscid: SHCOLUMNID): OleVariant;
function CreateDefaultContextMenu(constref pdcm: TDefContextMenu; const riid: REFIID; out ppv): HRESULT;
@ -107,7 +120,7 @@ function CreateDefaultContextMenu(constref pdcm: TDefContextMenu; const riid: RE
implementation
uses
ShellApi, LazUTF8, DCConvertEncoding;
Variants, ShellApi, LazUTF8, DCConvertEncoding;
const
KF_FLAG_DEFAULT = $00000000;
@ -154,6 +167,18 @@ begin
Result := GetDisplayName(AFolder, PIDL, SHGDN_NORMAL);
end;
function GetDisplayNameEx(AFolder: IShellFolder2; PIDL: PItemIDList; Flags: DWORD): String;
var
AValue: OleVariant;
begin
AValue:= GetDetails(AFolder, PIDL, SCID_FileName);
if VarIsStr(AValue) then
Result:= AValue
else begin
Result:= GetDisplayName(AFolder, PIDL, Flags);
end;
end;
function GetDetails(AFolder: IShellFolder2; PIDL: PItemIDList; const pscid: SHCOLUMNID): OleVariant;
var
AValue: OleVariant;