怎样使“打开对话框”中不显示远程共享资源,如共享文件夹和映射磁盘,急,在线等...

dhfly 2009-02-09 10:26:39
如题,调用SHBrowseForFolder 打开“打开文件对话框”,由于不想让用户选择远程路径,请问高手如何隐藏远程资源。
下面是我的部分code
// Init & fill BROWSEINFO struct
browseInfo.pidlRoot = ppidl;
browseInfo.hwndOwner = (HWND)hwndOwner;
browseInfo.lpszTitle = titleStr;
browseInfo.pszDisplayName = folder;
browseInfo.ulFlags = BIF_STATUSTEXT;

if (localOnly)
{
browseInfo.ulFlags |= BIF_RETURNONLYFSDIRS;
browseInfo.ulFlags |= BIF_RETURNFSANCESTORS;
browseInfo.ulFlags &= ~BIF_SHAREABLE; //看msdn好像这个设置可以让打开对话框不显示远程路径,但没起作用。

}


browseInfo.lpfn = BrowseCallbackProc;
browseInfo.lParam = (LPARAM)curPath;

pidlBrowse = SHBrowseForFolder (&browseInfo);
有谁知道帮个忙啊,分不够再加。
...全文
252 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dhfly 2009-02-10
  • 打赏
  • 举报
回复
太难了,有没有例子代码啊
dhfly 2009-02-09
  • 打赏
  • 举报
回复
还是不行,上面两种方法使用后映射的网络磁盘还是会显示。
msdn:(不知道是不是这个原因)
CSIDL_DRIVES (0x0011)
The virtual folder representing My Computer, containing everything on the local computer: storage devices, printers, and Control Panel. The folder may also contain mapped network drives.

还有没有别的方法呢,要去掉这个映射的网络磁盘。
roadblossom 2009-02-09
  • 打赏
  • 举报
回复
up
dhfly 2009-02-09
  • 打赏
  • 举报
回复
直接写中文?还是英文?my computer?
我这个程序要适应不同语言的操作系统的,支持30多个国家。
lwx300 2009-02-09
  • 打赏
  • 举报
回复
	BROWSEINFO bi;
TCHAR szDir[MAX_PATH];
LPITEMIDLIST pidl, pidlMyComputer;
LPMALLOC pMalloc;
LPSHELLFOLDER pDesktop;
CString strMyComputer = _T("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}");

if (SUCCEEDED(SHGetMalloc(&pMalloc)))
{
if (SUCCEEDED(SHGetDesktopFolder(&pDesktop)))
{
if (SUCCEEDED(pDesktop->ParseDisplayName(NULL, NULL, strMyComputer.AllocSysString(), NULL, &pidlMyComputer, NULL)))
{
ZeroMemory(&bi,sizeof(bi));
bi.hwndOwner = m_hWnd;
bi.pidlRoot = pidlMyComputer;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;

if (pidl = SHBrowseForFolder(&bi))
{
if (SHGetPathFromIDList(pidl, szDir))
AfxMessageBox(szDir);

pMalloc->Free(pidl);
}

pMalloc->Free(pidlMyComputer);
}

pDesktop->Release();
}

pMalloc->Release();
}

dhfly 2009-02-09
  • 打赏
  • 举报
回复
正在验证1楼的答案。
2楼的能不能告诉怎么表示我的电脑呀。
pidlRoot = ?
多谢。
cnzdgs 2009-02-09
  • 打赏
  • 举报
回复
指定根节点为“我的电脑”。
lwx300 2009-02-09
  • 打赏
  • 举报
回复
设置 BROWSEINFO 的 pidlRoot 成员,将“我的电脑”指定为根目录,就可以只显示本地盘符。
dch4890164 2009-02-09
  • 打赏
  • 举报
回复
BIF_SHAREABLE
Version 5.0. The browse dialog box can display shareable resources on remote systems. It is intended for applications that want to expose remote shares on a local system. The BIF_NEWDIALOGSTYLE flag must also be set.
你还需要这句话
The BIF_NEWDIALOGSTYLE flag must also be set.
cnzdgs 2009-02-09
  • 打赏
  • 举报
回复
先用FindWindowEx找出TreeCtrl,然后在“我的电脑”下取各个子节点文字,得到盘符,再用GetDriveType检查是不是网络驱动器,如果是则删除。
dhfly 2009-02-09
  • 打赏
  • 举报
回复
怎么删那个节点呢,可不可以给点提示代码啊。多谢了。
cnzdgs 2009-02-09
  • 打赏
  • 举报
回复
SHBrowseForFolder没法隐藏网络驱动器,你可以设置回调函数,在初始化完成后自己把网络驱动器的节点都删除,或者自己做个浏览窗口。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧