怎样得到“拨号网络”的ItemID?(100分)

  • 主题发起人 主题发起人 o*o
  • 开始时间 开始时间
O

o*o

Unregistered / Unconfirmed
GUEST, unregistred user!
Windows的虚拟文件夹都可以用SHGetSpecialFolderLocation得到ItemID,
唯独没有“拨号网络”。有什么别的办法吗?
 
查注册表得到:
HKey_Local_Machine/Software/Microsoft/Windows/CurrentVersion/
explorer/MyComputer/NameSpace/{992CFFA0-F557-101A-88EC-00DD010CCC48}

是不是你要的??
 
不是。

这是CLSID,不是ItemID。
谁能把CLSID转成ItemID也行。
 
//你可先得到我的电脑的ItemID,得到一个ishellfolder,然后用ishellfolder.enumobjects边历每一个子folder,getdisplayname(folder)
if ='拨号网络‘,then ishellfolder.bindtoobjects;
就可得到itemid
//你可以参考/demos/virtual listview中的例子
procedure TForm1.PopulateIDList(ShellFolder: IShellFolder);
const
Flags = SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN;
var
ID: PItemIDList;
EnumList: IEnumIDList;
NumIDs: LongWord;
SaveCursor: TCursor;
ShellItem: PShellItem;
begin
SaveCursor := Screen.Cursor;
try
Screen.Cursor := crHourglass;
OleCheck(
ShellFolder.EnumObjects(
Application.Handle,
Flags,
EnumList)
);

FIShellFolder := ShellFolder;
ClearIDList;
while EnumList.Next(1, ID, NumIDs) = S_OK do
begin
ShellItem := New(PShellItem);
ShellItem.ID := ID;
ShellItem.DisplayName := GetDisplayName(FIShellFolder, ID, False);
ShellItem.Empty := True;
FIDList.Add(ShellItem);
end;

FIDList.Sort(ListSortFunc);

//We need to tell the ListView how many items it has.
ListView.Items.Count := FIDList.Count;

ListView.Repaint;
finally
Screen.Cursor := SaveCursor;
end;
end;
 
hubdog,这种方法我知道。谢谢你。

我作的程序是与语言无关的,因此不能用 if ='拨号网络‘ 这种方式。
 
已经在报号网络中建立了的拨号连接的名称以及属性都列在注册表:
KHEY_USERS/.DEFAULT/RemoteAccess/Address
 
哦,这些拨号连接用RasEnumEntries也可读出来。
我要这个ITEMID另有它用。
 
多人接受答案了。
 
haha,o*o你找到答案了吗?,我今天刚找到一个方法,可以由clsid得到拨号网络的
ishellfolder.
 
我没解决,只是清理一下。

快说说你的CLSID => iShellFolder
 
简单得你都想不道,haha
function CreateFolderObject(const ClsID: TGuid): IShellFolder;
begin
Result := CreateCOMObject(ClsID) as IShellFolder;
end;
 

Similar threads

回复
0
查看
864
不得闲
D
回复
0
查看
878
DelphiTeacher的专栏
D
后退
顶部