查找网络计算机。

sadpacific 2000-04-25 03:26:00
请高手指点:
怎样在Windows网络中根据输入的计算机名称检测该计算机是否存在呢?
...全文
255 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sadpacific 2000-04-25
  • 打赏
  • 举报
回复
To Lin:
对于你的热情帮助,我深深感激。
对于你的渊博,在下的景仰之情,犹如滔滔江水.....

怎么还用的着说对不起呢,你太客气了,让我很不好意思。

Lin 2000-04-25
  • 打赏
  • 举报
回复
刚好,我写了一段代码,希望对你有所帮助,大致如下(如有问题,请Mail给我。上次对不起,我不是有意的):
//将其加入到一个TTreeView(tvUser)对象:
function TfrmChat.AddTolvUser(const ANode: TTreeNode; const lpns: PNetResource): TTreeNode;
var Node: TTreeNode;
pCaption: String;
begin
pCaption := KillChars(lpns.lpRemoteName, ['\'], True);
Node := tvUser.Items.AddChild(ANode, pCaption);
case lpns.dwDisplayType of
RESOURCEDISPLAYTYPE_NETWORK: //整个网络
Node.ImageIndex := NetWork;
RESOURCEDISPLAYTYPE_DOMAIN: //一个域
Node.ImageIndex := DoMain;
RESOURCEDISPLAYTYPE_SERVER: //一台PC机
Node.ImageIndex := PC;
else //不会发生,避免编译警告
Node.ImageIndex := PC;
end;
Node.SelectedIndex := Node.ImageIndex;
Node.StateIndex := CheckNone;
Result := Node;
end;

//第一次ANode可以为nil,如EnumPCsInNetWork(ANode, nil);或者EnumPCsInNetWork(nil);
function TfrmChat.EnumPCsInNetWork(const ANode: TTreeNode; const lpnr: PNetResource = nil): Boolean;
var hEnum: THANDLE;
Node: TTreeNode;
cbBuffer, nLoop: DWORD;
dwResult, cEntries: DWORD;
dwResultEnum: DWORD;
lpnrLocal: array of TNetResource;
Has: Boolean; //是否包含网络资源;
begin
cbBuffer := SizeOf(TNetResource) * 1024;
cEntries := $FFFFFFFF;
dwResult := WNetOpenEnum(RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
lpnr, hEnum);
if dwResult <> NO_ERROR then
begin
Result := False;
Exit;
end;
Has := False;
repeat
SetLength(lpnrLocal, 1024);
ZeroMemory(lpnrLocal, SizeOf(lpnrLocal));
Application.ProcessMessages;
dwResultEnum := WNetEnumResource(hEnum, cEntries, lpnrLocal, cbBuffer);
if dwResultEnum = NO_ERROR then
begin
Has := True;
for nLoop := 0 to cEntries - 1 do
begin
Node := AddTolvUser(ANode, @lpnrLocal[nLoop]);
if lpnrLocal[nLoop].dwDisplayType in //只枚举Domain和PC
[RESOURCEDISPLAYTYPE_NETWORK, RESOURCEDISPLAYTYPE_DOMAIN] then
if not EnumPCsInNetWork(Node, @lpnrLocal[nLoop]) then
case lpnrLocal[nLoop].dwDisplayType of
RESOURCEDISPLAYTYPE_NETWORK:
begin
Node.ImageIndex := NoNetWork;
Node.SelectedIndex := NoNetWork;
end;
RESOURCEDISPLAYTYPE_DOMAIN:
begin
Node.ImageIndex := NoDomain;
Node.SelectedIndex := NoDomain;
end;
end;
end;
end else
if dwResultEnum <> ERROR_NO_MORE_ITEMS then Break;
until (dwResultEnum = ERROR_NO_MORE_ITEMS);
Result := (WNetCloseEnum(hEnum) = NO_ERROR) and Has;
end;

Ardus 2000-04-25
  • 打赏
  • 举报
回复
Try API functions:
WNetOpenEnum,WNetEnumResource

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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