我正在使用来自Angus Johnson的TDropPIDLTarget组件& Anders Melander的拖放组件套件允许用户通过将附件拖放到表单中来添加附件。我遇到的问题是确定文件是来自虚拟位置(即:相机驱动器还是iPhone驱动器)还是来自常规文件系统。这是我使用的验证的概念代码:确定文件是否位于Delphi 2007中的ItemIDList的虚拟位置
procedure TfrmForm.dftFileDropDrop(Sender: TObject; ShiftState: TShiftState;
Point: TPoint; var Effect: Integer);
Var
I: Integer;
pItem: PItemIDList;
Desktop: IShellFolder;
FileName: TStrRet;
Attr: UINT;
begin
If FAILED(SHGetDesktopFolder(Desktop)) Then
Exit;
For I := 1 To dftFileDrop.PidlCount - 1 Do
Begin
pItem := dftFileDrop.GetAbsoluteFilePidl(I);
Attr := SFGAO_FileSystem;
If Succeeded(Desktop.GetAttributesOf(1, pItem, Attr)) Then
Begin
If (Attr Or SFGAO_FILESYSTEM) = Attr Then
Desktop.GetDisplayNameOf(pItem, SHGDN_NORMAL Or SHGDN_FORPARSING, Filename)
Else
Desktop.GetDisplayNameOf(pItem, SHGDN_NORMAL Or SHGDN_FORADDRESSBAR, Filename);
mResults.Lines.Add(Filename.pOleStr);
End;
End;
end;
的SFGAO_FileSystem常数应该指出:
“指定的文件夹或文件是文件系统的一部分(也就是说, 它们是文件,目录或根目录)解析名称 这些项目可以被认为是有效的Win32文件系统路径,这些 路径可以是UNC或基于驱动器号的。
这听起来像我想使用但我似乎无法从GetAttributesOf得到正确的结果。我以正确的方式做这件事吗?
甚至文件系统的项目可以是虚拟的。 – 2014-09-03 18:02:55