【发布时间】:2014-05-30 19:34:52
【问题描述】:
我正在尝试在 Delphi 2007 中编写一个小程序,以便在将便携式 USB 驱动器插入 Windows 7 机器时访问文件。但是,此驱动器并未显示为标准驱动器号。它出现在 Windows 资源管理器的便携式设备下。我编写了以下代码来枚举“计算机”下的所有项目:
Procedure TfrmMain.ComputerChanged(Var Msg: TMessage);
Var
Enum: IEnumIDList;
Fetched: Longword;
Item: PItemIDList;
Path: String;
Computer: IShellFolder;
StrRet: TSTRRET;
Begin
Status('Computer changed... Checking folders.');
fDesktop.BindToObject(fCompPidl, Nil, IID_IShellFolder, Computer);
If Assigned(Computer) And
(Computer.EnumObjects(Self.Handle, SHCONTF_FOLDERS, Enum) = NOERROR) Then
Begin
While (Enum.Next(1, Item, Fetched) = NOERROR) Do
Begin
FillChar(StrRet, SizeOf(StrRet), #0);
Computer.GetDisplayNameOf(Item, SHGDN_FORADDRESSBAR or SHGDN_NORMAL, StrRet);
Path := StrRetToStr(StrRet, Item);
Status(Path);
End;
End;
End;
(注意:Status 过程只是向 TMemo 输出一条消息。)
每当 Windows shell 子系统通知我的应用程序发生更改时,都会调用它。它枚举了所有本地驱动器和网络驱动器,但没有其他任何东西(iCloud Photos 驱动器也不见了)。
有人知道我如何访问这些虚拟驱动器上的文件吗?
【问题讨论】:
-
啊啊啊……太棒了。另一个完整的 API 来学习,而不仅仅是使用现有的 shell 函数。好吧,一旦我了解了 Windows 便携式设备 API,我发现有人编写了一个完整的示例程序,完全符合我的要求。不幸的是,它在 Experts Exchange 上,您需要一个帐户才能看到它。对于那些有的人,请在此处查看:www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_28303837.html
-
@SertacAkyuz:您能否发表您的评论作为答案,以便我将其标记为已关闭?
-
请您自己发布一个答案,您已经比我了解更多了:)。
-
通过谷歌搜索“Q_28303837 www.experts-exchange.com”,您将能够得到答案。有人发布了一个位于此处的程序:filedb.experts-exchange.com/incoming/2014/03_w12/840187/…
标签: windows delphi windows-shell