我想问问大家,你们是如何实现这个功能的!?(200分)

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

lonelybug

Unregistered / Unconfirmed
GUEST, unregistred user!
比如:有一个文件夹已经被设置位一个共享目录了,如何用程序来判断这个目录是否施共享目录,而且可以取得这个共享目录所设置的一些值比如共享名字,连接人数,密码等!
还有一个就是如果用程序实现设置一个目录成为共享的话,如何才能设置密码和权限,而且如何测试他们是否有效!
谢谢了!
 
抄来的:)
我用以下方法可以得到某一工作组内的所有主机或某一主机内的所有共享文件夹名
procedure TSearchFileThread.Execute;//线程
Var
EnumHandle : THandle;
FileRS : TNetResource;
Buf : Array[1..500] of TNetResource;
BufSize : DWord;
Entries : DWord;
Result : Integer;
begin
mydir := mydir + #0;//mydir为工作组名时可以得到组内所有主机名
//mydir为主机名时可以得到机内所有共享文件夹名
FillChar(FileRS, SizeOf(FileRS) , 0);
With FileRS do begin
dwScope := 2;
dwType := 3;
dwDisplayType := 1;
dwUsage := 2;
lpRemoteName := @mydir[1];
end;
WNetOpenEnum( RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
0,
@FileRS,
EnumHandle );
Repeat
Entries := 1;
BufSize := SizeOf(Buf);
Result := WNetEnumResource( EnumHandle,Entries,@Buf,BufSize );
If (Result = NO_ERROR) and (Entries = 1) then
begin
s:= StrPas(Buf[1].lpRemoteName); //得到网上资源名,主机或文件夹
Synchronize(AddFile); //Form1.ListBox1.Items.Add(s);
end ;
Until (Entries <> 1) or (Result <> NO_ERROR);
WNetCloseEnum( EnumHandle );
end;
如令mydir 为WorkGroup则可得到WorkGroup内所有计算机名
如令mydir 为//201 则可得到主机//201内所有共享文件夹名
现在的问题是 如令mydir 为//201/share (已知share为//201内一共享文件夹),则
ListBox1内没有显示,即得不到 //201/share 内的共享文件夹名和文件名。
不知何故,请教各位。

这个问题我自己解决了!
可以用以下方法获得已知共享文件夹中的文件。
Found := FindFirst(mydir+'/*.*', $0000003F , searchrec);
while Found = 0 do
begin
listBox1.items.Add(searchrec.name);
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
换一个问题吧。怎样才能让程序知道一个共享文件夹打开时需要密码?

用WNetAddConnection2, 然后看返回值是否为ERROR_INVALID_PASSWORD

 
可能是我没有说清楚,我的意思是,我有一个已经共享的目录,而我想用程序得到这个目录的相关的信息!谢谢了!当然了,楼上的老兄的东西还是很有用的!
 
用api函数啊,取得该目录的属性不就明白了。对于连接的人数,我觉得应该安装网络监视器
然后使用网络监视器的api功能,自己去查查吧。
 
我已经查过书了,不过,我现在不是不知道用那个函数我现在是不知道为什么用netsharegetinfo这个函数得不到共享目录得相关信息!
 
好像可以从注册表里获得以共享的文件夹信息,你共享一个文件夹,然后到注册表中去
搜索一下试试,我自己还没试过!
 
找到了,在这里:
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/lanmanserver/Shares
 
哦?好像不止一处:
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/lanmanserver/Shares

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/lanmanserver/Shares

你只要用这里:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/lanmanserver/Shares
就行了,这几个是相互关联的,这个改了,其他几个也会改的。
 
谢谢,dirk!
不过我还想问一下,如果用api的方法的话如何做呢?能否指教一下!
 
sorry,对api不是知道很多。
 
顶部