⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 可以检查网络欲行状态
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TNetResourceArray = ^TNetResource;  //网络资源类型的数组
  TfrmMain = class(TForm)
    Panel1: TPanel;
    memResult: TMemo;
    GroupBox1: TGroupBox;
    btnRun: TButton;
    btnExit: TButton;
    procedure btnRunClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.DFM}

//函数GetServerList列举出整个网络中的工作组名称,返回值为TRUE表示执行成功,
//参数List中返回服务器(工作组)的名称
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;
  Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
  RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
  //获取整个网络中的文件资源的句柄,lphEnum为返回名柄
  If Res <> NO_ERROR Then exit;
  //执行失败,退出
  //执行成功,开始获取整个网络中的网络类型信息
  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;

procedure TfrmMain.btnRunClick(Sender: TObject);
var
  sl:TstringList;
  i:integer;
begin
  memResult.lines.Clear;
  sl:=Tstringlist.create;
  if GetServerList(sl) then
  begin
    memResult.lines.Add('总共找到'+inttostr(sl.count)+'个工作组!');
    for i:=0 to sl.count-1 do
      memResult.lines.Add (sl.Strings[i]);
  end
  else
    memResult.lines.Add('没有找到工作组!');
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  memResult.lines.Clear;
end;

procedure TfrmMain.btnExitClick(Sender: TObject);
begin
  frmMain.Close;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -