怎样扫描自已的系统共享目录和动态关闭(100分)

  • 主题发起人 主题发起人 jamescjm
  • 开始时间 开始时间
C:/WINDOWS/NETWATCH.EXE
 
我的操作系统没有这个文件。
我主要想知道DELPHI中写入这个功能在一个程序中。
先谢了
 
那个文件是微软的“网络监视器”。
应该有API函数可以实现,可惜我没有找到。
 
type
TNetResourceArray = ^TNetResource;

Function GetUserResource( UserName : string ; var List : TStringList ) : Boolean;
Var
NetResource : TNetResource;
Buf : Pointer;
Count,BufSize,Res : DWord;
Ind : Integer;
lphEnum : THandle;
Temp : TNetResourceArray;
Begin
Result := False;
List.Clear;

FillChar(NetResource, SizeOf(NetResource), 0);//初始化网络层次信息
NetResource.lpRemoteName := @UserName[1];//指定计算机名称
//获取指定计算机的网络资源句柄
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);

If Res <> NO_ERROR Then exit;//执行失败
While True Do//列举指定工作组的网络资源
Begin
Count := $FFFFFFFF;//不限资源数目
BufSize := 8192;//缓冲区大小设置为8K
GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
//获取指定计算机的网络资源名称
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
If Res = ERROR_NO_MORE_ITEMS Then break;//资源列举完毕
If (Res <> NO_ERROR) then Exit;//执行失败

Temp := TNetResourceArray(Buf);
For Ind := 0 to Count - 1 do
Begin
//获取指定计算机中的共享资源名称,+2表示删除"//",
//如//wangfajun=>wangfajun
List.Add(Temp^.lpRemoteName + 2);
Inc(Temp);
End;
End;
Res := WNetCloseEnum(lphEnum);//关闭一次列举
If Res <> NO_ERROR Then exit;//执行失败
Result := True;
FreeMem(Buf);
End;

procedure TForm1.Button1Click(Sender: TObject);
var
ss:TStringList;
begin
ss:=TStringList.Create(); ss.Clear;
if not GetUserResource('//tianhf',ss) then beep;//tianhf 为本机机器名
memo1.Lines:=ss;
end;
 
找到啦:你到注册表看看这个。
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Network/LanMan

看到什么?可惜改变了之后,要重启电脑才起作用,
一定是启动时读到内存里了,不知到还有什么方法。
 
我正在试
 
to tianhf:
你的方法我认为可行,但在我的网络中不知为什么,行不通。长时间的等待
 
我在windows98上结果完全正确,但是如果在windows2000没有放开Guest用户时,返回结果为空!
看来像是长时间的等待,在memo1.lines.add(ss);之后加一行memo1.lines.add('Ok!');就能看到已经结束了!
 
你不会用程序读写注册表吗?保证98、NT、2K都可行。
 
动态关闭读写注册表一定不行
 
没有更好的方法?
 
后退
顶部