如果您是一位局域網的系統管理員的話,肯定要經常對連接在局域網中的各個工作組進行管理和維修,並對每一台工作組建立相關的信息檔案,以後只要根據這些檔案信息就知道對應的工作組的運行情況,從而可以大大提高管理的效率了。此時,可能有人說,要查看這些工作組的信息,不是還要一台一台地打開、一台一台地查看嗎?的確,如果還是這樣操作的話,工作效率肯定還是不會提高,那麼我們有沒有辦法同時獲取局域網中的每一台工作組的信息呢?答案當然是肯定的,我們可以使用DELPHI中的WIN API來獲取局域網中的每一台工作組的信息,下面是獲取工作組信息的源代碼:
Function GetServerList( var List : TStringList ) : Boolean;
Var //顯示所有工作組的名稱
NetResource : TNetResource;
Buf : Pointer;
Count,BufSize,Res : DWORD;
lphEnum : THandle;
p : TNetResourceArray;
i,j : SmallInt;
NetworkTypeList : TList; //返回局域網中的工作組名稱
Begin
Result := False;
NetworkTypeList := TList.Create;
List.Clear;
//獲取整個網絡中的文件資源的句柄,lphEnum為返回名柄
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
If Res <> NO_ERROR Then exit;//Raise Exception(Res);//執行失敗
//獲取整個網絡中的網絡類型信息
Count := $FFFFFFFF;//不限資源數目
BufSize := 8192;//緩沖區大小設置為8K
GetMem(Buf, BufSize);//申請內存,用於獲取工作組信息
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
If ( Res = ERROR_NO_MORE_ITEMS )//資源列舉完畢
or (Res <> NO_ERROR )//執行失敗
Then Exit;
P := TNetResourceArray(Buf);
For I := 0 To Count - 1 Do//記錄各個網絡類型的信息
Begin
NetworkTypeList.Add(p);
Inc(P);
End;
//WNetCloseEnum關閉一個列舉句柄
Res := WNetCloseEnum(lphEnum);//關閉一次列舉
If Res <> NO_ERROR Then exit;
For J := 0 To NetworkTypeList.Count-1 Do //列出各個網絡類型中的所有工作組名稱
Begin//列出一個網絡類型中的所有工作組名稱
NetResource := TNetResource(NetworkTypeList.Items[J]^);//網絡類型信息
//獲取某個網絡類型的文件資源的句柄,NetResource為網絡類型信息,lphEnum為返回名柄
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
If Res <> NO_ERROR Then break;//執行失敗
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 ) //資源列舉完畢
or (Res <> NO_ERROR) //執行失敗
then break;
P := TNetResourceArray(Buf);
For I := 0 To Count - 1 Do//列舉各個工作組的信息
Begin
List.Add( StrPAS( P^.lpRemoteName ));//取得一個工作組的名稱
Inc(P);
End;
End;
Res := WNetCloseEnum(lphEnum);//關閉一次列舉
If Res <> NO_ERROR Then break;//執行失敗
End;
Result := True;
FreeMem(Buf);
NetworkTypeList.Destroy;
End;
以上是通過DELPHI中的WIN API來獲取局域網中的工作組信息,當然我們同樣可以使用WIN API來獲取局域網中的服務器以及其他終端信息,大家不妨按照上面的設計思路來試驗一下。