如何获得本地磁盘的名称列表及对应的图标?(50分)

  • 主题发起人 主题发起人 lintong
  • 开始时间 开始时间
L

lintong

Unregistered / Unconfirmed
GUEST, unregistred user!
想在普通的ComboBox中实现类似于DriveComboBox的功能,
不知该如何获得本地磁盘(包括软盘、硬盘分区以及网络
驱动器)名称的列表及其对应的图标?
 
可以在SHELL32.DLL中提取
 
procedure Form1.SetDriverComboBox;
const
Flags = SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN;
var
NewPIDL: PItemIDList;
DriveShellFolder: IShellFolder;
ID: PItemIDList;
EnumList: IEnumIDList;
NumIDs: LongWord;
SaveCursor: TCursor;
DispName : string;
begin
SaveCursor := Screen.Cursor;
try
Screen.Cursor := crHourglass;
OLECheck(
SHGetSpecialFolderLocation(
Application.Handle,
CSIDL_DRIVES,
NewPIDL)
);
OLECheck(
FIDesktopFolder.BindToObject(
NewPIDL,
nil,
IID_IShellFolder,
Pointer(DriveShellFolder))
);
OleCheck(
DriveShellFolder.EnumObjects(
Application.Handle,
Flags,
EnumList)
);
ComboBox.Items.Clear;
while EnumList.Next(1, ID, NumIDs) = S_OK do
begin
DispName := GetDisplayName(DriveShellFolder, ID, False);
if DispName = '控制面板' then Continue;
ComboBox.Items.Add(GetDisplayName(DriveShellFolder, ID, False));
end;
finally
Screen.Cursor := SaveCursor;
end;
end;
 
接受答案了.
 
后退
顶部