我正在创建一个远程文件管理器。服务器端应用程序获取计算机中驱动器、目录和文件列表,将其保存为流并将其发送到我所在的当前计算机。一切正常运作。
在当前计算机上,我首先使用"OnCreate"事件来填充TListImage与shell图标(来自同一台当前计算机),并将其与文件列表将显示的ListView联系起来。因此,一旦收到列表,我使用下面的函数在ListView中显示通用文件图标:
通过文件名/扩展名,我可以获取正确的外壳图标,即使在不同的计算机上。但是我还需要显示正确的驱动器类型图标。例如,在远程计算机上,“D:\”是本地固定驱动器,但在当前计算机上,“D:\”是CD / DVD驱动器,因此我不能使用驱动器字母来获取此图标。我需要一种从远程计算机(固定驱动器)获取“通用”驱动器类型图标索引并将其发送到当前计算机的方法。
例如,我的目标是获取本地硬盘、远程磁盘、CD / DVD设备等的默认图标...
抱歉,我的英语不是母语。我尽力尝试解释。
也许我需要的是不可能的,请告诉我...
谢谢!
在当前计算机上,我首先使用"OnCreate"事件来填充TListImage与shell图标(来自同一台当前计算机),并将其与文件列表将显示的ListView联系起来。因此,一旦收到列表,我使用下面的函数在ListView中显示通用文件图标:
function GetGenericFileIconIndex(Filename: string): Integer;
var
FInfo: TSHFileInfo;
begin
Result := -1;
if (SHGetFileInfo(PChar(Filename), FILE_ATTRIBUTE_NORMAL, FInfo, SizeOf(FInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES) <> 0) then
Result := FInfo.iIcon;
end;
for I := 0 to Pred(List.Count) do
begin
Item := ListView.Items.Add;
Item.ImageIndex := GetGenericFileIconIndex(List[I]);
Item.Caption := List[I];
end;
通过文件名/扩展名,我可以获取正确的外壳图标,即使在不同的计算机上。但是我还需要显示正确的驱动器类型图标。例如,在远程计算机上,“D:\”是本地固定驱动器,但在当前计算机上,“D:\”是CD / DVD驱动器,因此我不能使用驱动器字母来获取此图标。我需要一种从远程计算机(固定驱动器)获取“通用”驱动器类型图标索引并将其发送到当前计算机的方法。
例如,我的目标是获取本地硬盘、远程磁盘、CD / DVD设备等的默认图标...
抱歉,我的英语不是母语。我尽力尝试解释。
也许我需要的是不可能的,请告诉我...
谢谢!