中国程序员联盟 正在重新改版中ing 不便之处还请见谅 改版后将内容涉及java delphi .net php
 
  首页 | 数据库开发 | 网络通讯 | 多线程 | 多媒体开发 | 图像处理 | 程序人生 | 系统函数 | 控件开发 | Web服务
 
  当前位置:笨鱼delphi技术网>网络通讯>文章内容

delphi 取得LAN上所有登录用户名称

来源:站内 关于:bill 发布时间:2007-06-29   [收藏] [推荐]
unit fwqxz_s;

interface

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

type
  Tfwqxz = class(TForm)
    Panel1: TPanel;
    UserList: TListBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure FormShow(Sender: TObject);
    Function GetServerList( var List : TStringList ) : Boolean;
    Function GetUsers( GroupName : string; var List : TStringList ) : Boolean;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fwqxz: Tfwqxz;

implementation

uses main_s;

{$R *.DFM}

procedure Tfwqxz.FormShow(Sender: TObject);
var list1,list2:TStringList;
    i,j:Integer;
begin
i:=1;
list1:= TStringList.Create;
list2:= TStringList.Create;
if GetServerList(list1) then
begin
   showmessage('执行成功');
   for i:=0 to list1.Count-1 do
   begin
      if getusers(list1.Strings[i],list2) then
        begin
          for j:=0 to list2.Count-1 do
          UserList.Items.Add(list2.Strings[j]);
        end;
   end;
end;
list1.Destroy;
list2.Destroy;
end;

Function Tfwqxz.GetServerList( var List : TStringList ) : Boolean;
type
    TNetResourceArray = ^TNetResource;//网络类型的数组
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;

Function Tfwqxz.GetUsers( GroupName : string; var List : TStringList ) : Boolean;
type
    TNetResourceArray = ^TNetResource;//网络类型的数组
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 := @GroupName[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 <> 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 Tfwqxz.BitBtn1Click(Sender: TObject);
begin
main.Edit1.Text:=UserList.Items.Strings[UserList.itemIndex];
fwqxz.Close;
end;

procedure Tfwqxz.BitBtn2Click(Sender: TObject);
begin
fwqxz.Close;
end;

procedure Tfwqxz.FormCreate(Sender: TObject);
var list1,list2:TStringList;
    i,j:Integer;
begin
i:=1;
list1:= TStringList.Create;
list2:= TStringList.Create;
if GetServerList(list1) then
begin
   for i:=0 to list1.Count-1 do
   begin
      if getusers(list1.Strings[i],list2) then
        begin
          for j:=0 to list2.Count-1 do
          UserList.Items.Add(list2.Strings[j]);
        end;
   end;
end;
list1.Destroy;
list2.Destroy;
end;

end.

[浏览: 次]   
上一篇:delphi Delphi实现UDP广播   下一篇:delphi 统计局域网里的工作组数目
[收藏] [推荐] [返回顶部] [打印本页] [关闭窗口]  
    评论加载中…
google adsense热点文章
·delphi 学习WinSocket的编程
·delphi 用Delphi实现远程控制
·delphi 木马DIY
·delphi Delphi实现UDP广播
·delphi 检测计算机的 Internet 连接状
·delphi 获取BIOS信息
·delphi Base64编码转换
·delphi 发送raw IP类型的数据包
·delphi 使用ftp控件下载目录
·delphi 获取IP地址以及全部TCPIP连接的
·delphi 监测TCP IP协议是否安装了
·delphi 编写上网计费软件
     delphi技术网 | firefox 下载 | Avant Browser下载 | dedecms 技术网 | drupal 爱好者 | php 技术网
  Copyright@www.delphichm.com,2006-2009.All Rights Reserved.
 
程序员联盟 | delphi Java .net|QQ:707102932