Scope,DWORDdwType,DWORDdwUsage,
LPNETRESOURCEIpNetResOurce,LPHANDLE
IphEnum):
参数说明:dwScope,dwType,dwUsage与网络资源数据结构中对应的域的取值范围相同,只是dwUsage多了一个可取值0,表明要列举任何用途的资源,并当dwScope参数的值不是
GetUsers(GroupName:string;varList:TListBox):
Boolean;type
万方数据
计算机时代2004年第7期
TNetResourceArray=^TNetResource;VarNetResource:TNetResource;Buf:Pointer;
·23·
//网络类型的数组
End:
并通过如下语句,调用上面的函数,将本工作组所有已连
接的计算机名称例举在一个listbox框中.代码如下:
procedurebeginifeditl.Text="then
TForml.ButtonlClick(Sender:TObjed):
Count,BufSize,Res:DWord;
Ind:Integer;IphEnum:THandle;Temp:TNetResourceArray;BeginResult:=False;List.Clear;
showmessage(.请输入工作组名')
elseifnot
GetUsers(ed.11.text,listboxl)thenitems.add('此工作组中无已连接的计算机')
listboxlend;
以下要对列举出的每台机器搜索出所有共享资源.2.2列举计算机中的共享资源在WNetOpenEnum函数中,将参数lpNetResource中的lpRemoteName指定为一个计算机名称(如"\\jsj26"),可以获取
FillChar(NetResource,SizeOf(NetResource),0)://初始化网络层次信息NetResource.IpRemoteName:=@GroupName[1];/,指定工作组名称
NetResource.dwDisplayType:=
一个句柄,在WNetEnumResource中利用这个句柄,获取一个
NetResource类型的数组,每个NetResource元素的lpRemom—Name即为计算机中的共享资源名称(可以是共享目录,文件名
RESOURCEDISPLAYTYPE_sERVER;
NetResource.dwUsage:=RESOURCEUSAGE—CONTAINERNetResource.dwScope:=RESOURCETYPE—DISK;
称和共享打印机名称等,如"\\jsj26\共享文件").代码如下:
Function
//列举文件资源信息//获取指定工作组的网络资源句柄Res:=WNetOpenEnum(RESOURCE—GLOBALNET,
RESOURCETYPE—DISK,
GetUserResource(UserName:string:varList:
TListBox):Boolean;
type
TNetResourceArray="TNetResource;II网络类型的数组
Var
RESOURCEUSAGE—CONTAINER,@NetResource,IphEnum):
IfRes<>NO—ERRORThenNetResOurce:TNetResource;Buf:Pointer;
Exit;//执行失败
WhileTrueDo,,列举指定工作组的网络资源
Begin
Count,BufSize,Res:DWord;
Ind:Integer;IphEnum:THandle;Temp:TNetResourceArray;BeginResult:=False;List.Clear;
Count:=¥FFFFFFFF;//不限资源数目BufSize:=8192;II缓冲区大小设置为8KGetMem(Buf,BufSize);/,申请内存,用于获取工作组信息,/获取计算机名称Res:=WNetEnumResource(IphEnum,Count,Pointer(Buf),BufSize);
IfRes=ERROR—NO—MORE—ITEMSThenbreak;
FillChar(NetResource,SjZeOf(NetResource),0);//初始化网络层次信息NetResource.IpRemoteName:=@UserName[1];,,指定计算机名称//获取指定计算机的网络资源句柄Res:=WNetOpenEnum(RESOURCE—GLOBALNET,
RESOURCETYPE_ANY,
|f资源烈举完率If(Res<>NO—ERROR)thenExit;//执行失败Temp:=TNetResourceArray(Buf);
ForInd:=0toCount一1Begin
do//列举工作组的计算机名称
RESOURCEUSAGE—CONNECTABLE,@NetResource,IphEnum);
IfRes<>NO—ERRORThen
//获取工作组的计算机名称,+2表示删除"\(¥%¥43%^#ASD#2@¥斯¥%"),List.Items.Add(Temp^.IpRemoteName+2):Inc(Temp);
End;End;
exit;//执行失败
WhileTrueDo//列举指定工作组的网络