设为首页 加入收藏

TOP

18.2.4 获得网上共享资源
2013-10-07 00:13:08 来源: 作者: 【 】 浏览:68
Tags:18.2.4 获得 网上 共享资源

18.2.4  获得网上共享资源

在有局域网的单位中,如果能将一些资源共享,不但能提高资源的有效利用,还能提高工作效率,节省资源。但资源共享后,如果不进行有效的管理和利用,将不能高效、合理地使用网上资源。如果想获得网上共享资源可以根据Windows API函数库中的WnetOpenEnum、WnetEnumResource和WnetCloseEnum函数来实现。有关这些函数的介绍请参考18.2.3节获取局域网计算机名称和IP。

下面根据一个例子来介绍如何获得网上共享资源,以方便查看局域网上的资源。具体操作步骤如下。
ch1804实例位置:mr\18\sl\04
(1)新建一个基于对话框的应用程序,设计对话框资源如图18.7所示。

图18.7  网上共享资源设计窗口

(2)在对话框的OnInitDialog方法中列举共享资源。

//创建图像列表控件
m_imagelist.Create(16,16,ILC_COLOR24|ILC_MASK,0,0);
//向图像列表中添加图标
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
HICON hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
m_Tree.SetImageList(&m_imagelist,LVSIL_NORMAL);
m_Root=m_Tree.InsertItem("整个网络",0,0);
m_Tree.Expand(m_Root,TVE_EXPAND);

DWORD Count=0xFFFFFFFF,Bufsize=4096,Res;

NETRESOURCE* nRes;
NETRESOURCE* nRes1;
NETRESOURCE* nRes2;
NETRESOURCE* nRes3;
HANDLE lphEnum;
LPVOID Buf = new char[4096];
LPVOID Buf1 = new char[4096];
LPVOID Buf2 = new char[4096];
LPVOID Buf3 = new char[4096];
//打开网络资源列举
Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,NULL,&lphEnum);
//列举网络资源
Res=WNetEnumResource(lphEnum,&Count,Buf,&Bufsize);
nRes=(NETRESOURCE*)Buf;

for(DWORD n=0;n<Count;n++,nRes++)
{
DWORD Count1=0xFFFFFFFF;
Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,nRes,&lphEnum);
Res=WNetEnumResource(lphEnum,&Count1,Buf1,&Bufsize);
nRes1=(NETRESOURCE*)Buf1;

for(DWORD i=0;i<Count1;i++,nRes1++)
{
m_Group = m_Tree.InsertItem(nRes1->lpRemoteName,1,1,m_Root);
DWORD Count2=0xFFFFFFFF;
Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,nRes1,&lphEnum);
Res=WNetEnumResource(lphEnum,&Count2,Buf2,&Bufsize);
nRes2=(NETRESOURCE*)Buf2;
for(DWORD j=0;j<Count2;j++,nRes2++)
{
CString sName = nRes2->lpRemoteName;
sName = sName.Right(sName.GetLength()-2);
m_Name = m_Tree.InsertItem(sName,2,2,m_Group);
DWORD Count3=0xFFFFFFFF;
Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONNECTABLE,nRes2,&lphEnum);
Res=WNetEnumResource(lphEnum,&Count3,Buf3,&Bufsize);
nRes3=(NETRESOURCE*)Buf3;
for(DWORD k=0;k<Count3;k++,nRes3++)
{
CString sShare = nRes3->lpRemoteName;
sShare = sShare.Right(sShare.GetLength()-3-sName.GetLength());
m_Tree.InsertItem(sShare,3,3,m_Name);
}
}
}
}
delete Buf;
delete Buf1;
delete Buf2;
delete Buf3;
WNetCloseEnum(lphEnum);

(3)运行程序,效果如图18.8所示。

图18.8  获得网上共享资源

【责任编辑:阚书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇18.3.2 WinSock API相关函数 下一篇18.2.2 映射网络驱动器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: