如何得出网络中的所有计算机?
注:网络中有多个域,组.
工具:Delphi5
注:网络中有多个域,组.
工具:Delphi5
解决方案 »
- OpenFileMapping 的一个问题
- 还是老问题,一个月了还没有解决,再搞不出来就要打包走人了:(
- QReport中如何放多个DetailBand
- 用什么保存key=string这种形式的东西比较好?
- CGI程序 无法显示图像。怎办!
- 哪位有Delphi 5.X分布式多层应用系统篇(李维)书中的源码(不是书)?
- sql问题急救(在线等待)
- 请问这个函数应该怎么用TMemoryStream.Write
- 断开数据库连接
- 发布WebSnap应用要附带什么?比如某个dll(不包括数据库)
- 欢迎C/S模型的DELPHI+SQL的朋友加入我刚建的QQ群讨论问题QQ群号:14539240
- 2维数组怎样定义和使用???
type
PnetResourceArr = ^TNetResource;implementationprocedure GetServerList(List:TStrings);Type{$H+}PMyRec = ^MyRec;MyRec = RecorddwScope : Integer;dwType : Integer;dwDisplayType : Integer;dwUsage : Integer;LocalName : String;RemoteName : String;Comment : String;Provider : String;End;{H-}VarNetResource : TNetResource;TempRec : PMyRec;Buf : Pointer;Count,BufSize,Res : DWORD;lphEnum : THandle;p : PNetResourceArr;i,j : SmallInt;NetworkTypeList : TList;begin// Result := False;NetworkTypeList := TList.Create;List.BeginUpdate;List.Clear;GetMem(Buf, 8192);TryRes := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum);If Res <> 0 Then Raise Exception(Res);Count := $FFFFFFFF;BufSize := 8192;Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);If Res = ERROR_NO_MORE_ITEMS Then Exit;If (Res <> 0) Then Raise Exception(Res);P := PNetResourceArr(Buf);For I := 0 To Count - 1 DoBeginNew(TempRec);TempRec^.dwScope := P^.dwScope;TempRec^.dwType := P^.dwType ;TempRec^.dwDisplayType := P^.dwDisplayType ;TempRec^.dwUsage := P^.dwUsage ;TempRec^.LocalName := StrPas(P^.lpLocalName);TempRec^.RemoteName := StrPas(P^.lpRemoteName);TempRec^.Comment := StrPas(P^.lpComment);TempRec^.Provider := StrPas(P^.lpProvider);NetworkTypeList.Add(TempRec);Inc(P);End;Res := WNetCloseEnum(lphEnum);If Res <> 0 Then Raise Exception(Res);For J := 0 To NetworkTypeList.Count-1 DoBeginTempRec := NetworkTypeList.Items[J];NetResource := TNetResource(TempRec^);Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);If Res <> 0 Then Raise Exception(Res);While true DoBeginCount := $FFFFFFFF;BufSize := 8192;Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);If Res = ERROR_NO_MORE_ITEMS Then Break;If (Res <> 0) Then Raise Exception(Res);P := PNetResourceArr(Buf);For I := 0 To Count - 1 DoBeginList.Add(P^.lpRemoteName);Inc(P);End;End;End;Res := WNetCloseEnum(lphEnum);If Res <> 0 Then Raise Exception(Res);//Result := True;FinallyFreeMem(Buf);NetworkTypeList.Destroy;End;List.EndUpdate;end;procedure GetUserList(fServer:string;List:TStrings);VarNetResource : TNetResource;Buf : Pointer;Count,BufSize,Res : DWord;Ind : Integer;lphEnum : THandle;Temp : PNetResourceArr;Begin List.Clear;GetMem(Buf, 8192);TryFillChar(NetResource, SizeOf(NetResource), 0);NetResource.lpRemoteName := @fServer[1];NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;NetResource.dwScope := RESOURCETYPE_DISK;Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);If Res <> 0 Then Exit;While True DoBeginCount := $FFFFFFFF;BufSize := 8192;Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);If Res = ERROR_NO_MORE_ITEMS Then Exit;If (Res <> 0) then Exit;Temp := PNetResourceArr(Buf);For Ind := 0 to Count - 1 doBeginList.Add(Temp^.lpRemoteName + 2); { Add all the network usernames to List StringList }Inc(Temp);End;End;Res := WNetCloseEnum(lphEnum);If Res <> 0 Then Raise Exception(Res);// Result := True;FinallyFreeMem(Buf);End;End;这程序是网上来的,我整理了一个,就变成现在这样了。procedure oncreate;begin GetServerList(Listbox1.Items);end;procedure Listbox1.OnclickbeginGetUserList(Listbox1.Items[Listbox1.ItemIndex],Listbox2.Items);end;**************************************获得网上邻居列表的程序程序如下:vari : Integer;ErrCode : Integer;NetRes : Array[0..1023] of TNetResource;EnumHandle : Thandle;EnumEntries : Dword;BufferSize : Dword;ComputerIP,ComputerName:String;begin//tryWith NetRes[0] do begindwScope :=RESOURCE_GLOBALNET;dwType :=RESOURCETYPE_ANY;dwDisplayType :=RESOURCEDISPLAYTYPE_DOMAIN;dwUsage :=RESOURCEUSAGE_CONNECTABLE;lpLocalName :=NIL;lpRemoteName :=NIL;lpComment :=NIL;lpProvider :=NIL;end;{ get net root }ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@NetRes[0],EnumHandle);If ErrCode=NO_ERROR then beginEnumEntries:=1;BufferSize:=SizeOf(NetRes);ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);WNetCloseEnum(EnumHandle);ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONNECTABLE,@NetRes[0],EnumHandle);EnumEntries:=1024;BufferSize:=SizeOf(NetRes);ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes,BufferSize);for i:=0 to 1023 doif NetRes[i].lpRemoteName='' then Exitelse beginComputerName:=Copy(NetRes[i].lpRemoteName,3,Length(NetRes[i].lpRemoteName)-2);ComputerIP:=GetIP(ComputerName);ShowMessage('计算机名' + NetRes[i].lpRemoteName + chr(13)+ '计算机说明:' + NetRes[i].lpComment + chr(13)+ 'IP地址:' + ComputerIP);end;end;*************请问怎样获取所有能访问的网上邻居中的计算机名称列表?通过Windows Shell API用SHGetSpecialFolderLocation获得Neighborhood的PIDL,然后将一个IShellFolder接口绑定到这个PIDL,再然后就可以用这个接口的EnumObjects函数枚举其中的对象了。因我不会Delphi,所以不知道用Delphi应该具体如何做,下面一段C++代码列出了"我的电脑"下的所有项目(我的计算机没有安装网络邻居,所以用这个代替,方法应该是一样的)#include <stdio.h>#include <iostream.h>#include <comdef.h>#include <windows.h>#include <shellapi.h>#include <shlobj.h>#include <shlguid.h>#include <shlwapi.h>void _inline error(){ cerr<<"ERROR!"<<endl; _exit(1); }void main(int argc, char* argv[]){IMallocPtr pMalloc;IShellFolderPtr pShellFolder,pFolder;LPITEMIDLIST pidl;IEnumIDListPtr pEnum;HRESULT hr;STRRET Name;ULONG celtFetched;SHGetMalloc(&pMalloc);if (!SUCCEEDED(SHGetDesktopFolder(&pShellFolder)))error();if (!SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DRIVES,&pidl)))error();pShellFolder->BindToObject(pidl,NULL,IID_IShellFolder,(LPVOID*)&pFolder);hr=pFolder->EnumObjects(NULL,SHCONTF_FOLDERS|SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN,&pEnum);while ((hr = pEnum->Next (1, &pidl, &celtFetched)) != S_FALSE &&celtFetched == 1){hr = pFolder->GetDisplayNameOf (pidl, SHGDN_NORMAL , &Name);if (FAILED (hr)){error();break;}printf("%s",Name.cStr);}if (!pidl)pMalloc->Free(pidl);}**************unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ComCtrls, ImgList, ExtCtrls, ToolWin;typeTForm1 = class(TForm)ImageList1: TImageList;ToolBar1: TToolBar;ToolButton1: TToolButton;Panel1: TPanel;ResourceTree: TTreeView;Splitter1: TSplitter;ResourceList: TListView;Panel2: TPanel;lbScope: TLabel;lbType: TLabel;lbDisplayType: TLabel;lbUsage: TLabel;lbLocalName: TLabel;lbRemoteName: TLabel;lbComment: TLabel;lbProvider: TLabel;ToolButton2: TToolButton;