{=========================================================================
   功  能: 网络函数库
   时  间: 2002/10/02
   版  本: 1.0
   备  注: 没有事情干,抄抄写写整理了一些网络函数供大家使用。
   希望大家能继续补充
=========================================================================}
unit Net;interface
  uses
      SysUtils
     ,Windows
     ,dialogs
     ,winsock
     ,Classes
     ,ComObj
     ,WinInet;  //得到本机的局域网Ip地址
  Function GetLocalIp(var LocalIp:string): Boolean;
  //通过Ip返回机器名
  Function GetNameByIPAddr(IPAddr: string; var MacName: string): Boolean ;
  //获取网络中SQLServer列表
  Function GetSQLServerList(var List: Tstringlist): Boolean;
  //获取网络中的所有网络类型
  Function GetNetList(var List: Tstringlist): Boolean;
  //获取网络中的工作组
  Function GetGroupList(var List: TStringList): Boolean;
  //获取工作组中所有计算机
  Function GetUsers(GroupName: string; var List: TStringList): Boolean;
  //获取网络中的资源
  Function GetUserResource(IpAddr: string; var List: TStringList): Boolean;
  //映射网络驱动器
  Function NetAddConnection(NetPath: Pchar; PassWord: Pchar;LocalPath: Pchar): Boolean;
  //检测网络状态
  Function CheckNet(IpAddr:string): Boolean;
  //检测机器是否登入网络
  Function CheckMacAttachNet: Boolean;  //判断Ip协议有没有安装   这个函数有问题
  Function IsIPInstalled : boolean;
  //检测机器是否上网
  Function InternetConnected: Boolean;
implementation{=================================================================
  功  能: 检测机器是否登入网络
  参  数: 无
  返回值: 成功:  True  失败:  False
  备 注:
  版 本:
     1.0  2002/10/03 09:55:00
=================================================================}
Function CheckMacAttachNet: Boolean;
begin
  Result := False;
  if GetSystemMetrics(SM_NETWORK) <> 0 then
    Result := True;
end;{=================================================================
  功  能: 返回本机的局域网Ip地址
  参  数: 无
  返回值: 成功:  True, 并填充LocalIp   失败:  False
  备 注:
  版 本:
     1.0  2002/10/02 21:05:00
=================================================================}
function GetLocalIP(var LocalIp: string): Boolean;
var
    HostEnt: PHostEnt;
    Ip: string;
    addr: pchar;
    Buffer: array [0..63] of char;
    GInitData: TWSADATA;
begin
  Result := False;
  try
    WSAStartup(2, GInitData);
    GetHostName(Buffer, SizeOf(Buffer));
    HostEnt := GetHostByName(buffer);
    if HostEnt = nil then Exit;
    addr := HostEnt^.h_addr_list^;
    ip := Format('%d.%d.%d.%d', [byte(addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
    LocalIp := Ip;
    Result := True;
  finally
    WSACleanup;
  end;
end;{=================================================================
  功  能: 通过Ip返回机器名
  参  数:
          IpAddr: 想要得到名字的Ip
  返回值: 成功:  机器名   失败:  ''
  备 注:
    inet_addr function converts a string containing an Internet
    Protocol dotted address into an in_addr.
  版 本:
    1.0  2002/10/02 22:09:00
=================================================================}
function GetNameByIPAddr(IPAddr : String;var MacName:String): Boolean;
var
  SockAddrIn: TSockAddrIn;
  HostEnt: PHostEnt;
  WSAData: TWSAData;
begin
  Result := False;
  if IpAddr = '' then exit;
  try
    WSAStartup(2, WSAData);
    SockAddrIn.sin_addr.s_addr := inet_addr(PChar(IPAddr));
    HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
    if HostEnt <> nil then
      MacName := StrPas(Hostent^.h_name);
    Result := True;
  finally
    WSACleanup;
  end;
end;{=================================================================
  功  能: 返回网络中SQLServer列表
  参  数:
          List: 需要填充的List
  返回值: 成功:  True,并填充List  失败 False
  备 注:
  版 本:
    1.0  2002/10/02 22:44:00
=================================================================}
Function GetSQLServerList(var List: Tstringlist): boolean;
var
   i: integer;
   sRetValue: String;
   SQLServer: Variant;
   ServerList: Variant;
begin
  Result := False;
  List.Clear;
  try
    SQLServer := CreateOleObject('SQLDMO.Application');
    ServerList := SQLServer.ListAvailableSQLServers;
    for i := 1 to Serverlist.Count do
      list.Add (Serverlist.item(i));
    Result := True;
  Finally
    SQLServer := NULL;
    ServerList := NULL;
  end;
end;{=================================================================
  功  能: 判断Ip协议有没有安装
  参  数: 无
  返回值: 成功:  True 失败: False;
  备 注:   该函数还有问题
  版 本:
     1.0  2002/10/02 21:05:00
=================================================================}
Function IsIPInstalled : boolean;
var
  WSData: TWSAData;
  ProtoEnt: PProtoEnt;
begin
  Result := True;
  try
    if WSAStartup(2,WSData) = 0 then
    begin
      ProtoEnt := GetProtoByName('IP');
      if ProtoEnt = nil then
        Result := False
    end;
  finally
    WSACleanup;
  end;
end;

解决方案 »

  1.   

    {=================================================================
      功  能: 返回网络中的共享资源
      参  数:
              IpAddr: 机器Ip
              List: 需要填充的List
      返回值: 成功:  True,并填充List 失败: False;
      备 注:
         WNetOpenEnum function starts an enumeration of network
         resources or existing connections.
         WNetEnumResource function continues a network-resource
         enumeration started by the WNetOpenEnum function.
      版 本:
         1.0  2002/10/03 07:30:00
    =================================================================}
    Function GetUserResource(IpAddr: string; var List: TStringList): Boolean;
    type
      TNetResourceArray = ^TNetResource;//网络类型的数组
    Var
      i: Integer;
      Buf: Pointer;
      Temp: TNetResourceArray;
      lphEnum: THandle;
      NetResource: TNetResource;
      Count,BufSize,Res: DWord;
    Begin
      Result := False;
      List.Clear;
      if copy(Ipaddr,0,2) <> '\\' then
        IpAddr := '\\'+IpAddr;   //填充Ip地址信息
      FillChar(NetResource, SizeOf(NetResource), 0);//初始化网络层次信息
      NetResource.lpRemoteName := @IpAddr[1];//指定计算机名称
      //获取指定计算机的网络资源句柄
      Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
                          RESOURCEUSAGE_CONNECTABLE, @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 i := 0 to Count - 1 do
        begin
           //获取指定计算机中的共享资源名称,+2表示删除"\\",
           //如\\192.168.0.1 => 192.168.0.1
           List.Add(Temp^.lpRemoteName + 2);
           Inc(Temp);
        end;
      end;
      Res := WNetCloseEnum(lphEnum);//关闭一次列举
      if Res <> NO_ERROR then exit;//执行失败
      Result := True;
      FreeMem(Buf);
    End;{=================================================================
      功  能: 返回网络中的工作组
      参  数:
              List: 需要填充的List
      返回值: 成功:  True,并填充List 失败: False;
      备  注:
      版  本:
         1.0  2002/10/03 08:00:00
    =================================================================}
    Function GetGroupList( 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;
      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;{=================================================================
      功  能: 列举工作组中所有的计算机
      参  数:
              List: 需要填充的List
      返回值: 成功:  True,并填充List 失败: False;
      备  注:
      版  本:
         1.0  2002/10/03 08:00:00
    =================================================================}
    Function GetUsers(GroupName: string; var List: TStringList): Boolean;
    type
      TNetResourceArray = ^TNetResource;//网络类型的数组
    Var
      i: Integer;
      Buf: Pointer;
      Temp: TNetResourceArray;
      lphEnum: THandle;
      NetResource: TNetResource;
      Count,BufSize,Res: DWord;
    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 i := 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;{=================================================================
      功  能: 列举所有网络类型
      参  数:
              List: 需要填充的List
      返回值: 成功:  True,并填充List 失败: False;
      备 注:
      版 本:
         1.0  2002/10/03 08:54:00
    =================================================================}
    Function GetNetList(var List: Tstringlist): Boolean;
    type
      TNetResourceArray = ^TNetResource;//网络类型的数组
    Var
      p: TNetResourceArray;
      Buf: Pointer;
      i: SmallInt;
      lphEnum: THandle;
      NetResource: TNetResource;
      Count,BufSize,Res: DWORD;
    begin
      Result := False;
      List.Clear;
      Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                          RESOURCEUSAGE_CONTAINER, Nil,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 := TNetResourceArra
      

  2.   

    {=================================================================
      功  能: 映射网络驱动器
      参  数:
              NetPath: 想要映射的网络路径
              Password: 访问密码
              Localpath 本地路径
      返回值: 成功:  True  失败: False;
      备 注:
      版 本:
         1.0  2002/10/03 09:24:00
    =================================================================}
    Function NetAddConnection(NetPath: Pchar; PassWord: Pchar
                              ;LocalPath: Pchar): Boolean;
    var
      Res: Dword;
    begin
      Result := False;
      Res := WNetAddConnection(NetPath,Password,LocalPath);
      if Res <> No_Error then exit;
      Result := True;
    end;{=================================================================
      功  能:  检测网络状态
      参  数:
              IpAddr: 被测试网络上主机的IP地址或名称,建议使用Ip
      返回值: 成功:  True  失败: False;
      备 注:
      版 本:
         1.0  2002/10/03 09:40:00
    =================================================================}
    Function CheckNet(IpAddr: string): Boolean;
    type
      PIPOptionInformation = ^TIPOptionInformation;
      TIPOptionInformation = packed record
         TTL:         Byte;      // Time To Live (used for traceroute)
         TOS:         Byte;      // Type Of Service (usually 0)
         Flags:       Byte;      // IP header flags (usually 0)
         OptionsSize: Byte;      // Size of options data (usually 0, max 40)
         OptionsData: PChar;     // Options data buffer
      end;  PIcmpEchoReply = ^TIcmpEchoReply;
      TIcmpEchoReply = packed record
         Address:       DWord;                // replying address
         Status:        DWord;                // IP status value (see below)
         RTT:           DWord;                // Round Trip Time in milliseconds
         DataSize:      Word;                 // reply data size
         Reserved:      Word;
         Data:          Pointer;              // pointer to reply data buffer
         Options:       TIPOptionInformation; // reply options
      end;  TIcmpCreateFile = function: THandle; stdcall;
      TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;
      TIcmpSendEcho = function(
         IcmpHandle:          THandle;
         DestinationAddress:  DWord;
         RequestData:         Pointer;
         RequestSize:         Word;
         RequestOptions:      PIPOptionInformation;
         ReplyBuffer:         Pointer;
         ReplySize:           DWord;
         Timeout:             DWord
      ): DWord; stdcall;const
      Size = 32;
      TimeOut = 1000;
    var
      wsadata: TWSAData;
      Address: DWord;                     // Address of host to contact
      HostName, HostIP: String;           // Name and dotted IP of host to contact
      Phe: PHostEnt;                      // HostEntry buffer for name lookup
      BufferSize, nPkts: Integer;
      pReqData, pData: Pointer;
      pIPE: PIcmpEchoReply;               // ICMP Echo reply buffer
      IPOpt: TIPOptionInformation;        // IP Options for packet to send
    const
      IcmpDLL = 'icmp.dll';
    var
      hICMPlib: HModule;
      IcmpCreateFile : TIcmpCreateFile;
      IcmpCloseHandle: TIcmpCloseHandle;
      IcmpSendEcho:    TIcmpSendEcho;
      hICMP: THandle;                     // Handle for the ICMP Calls
    begin
      // initialise winsock
      Result:=True;
      if WSAStartup(2,wsadata) <> 0 then begin
         Result:=False;
         halt;
      end;
      // register the icmp.dll stuff
      hICMPlib := loadlibrary(icmpDLL);
      if hICMPlib <> null then begin
        @ICMPCreateFile := GetProcAddress(hICMPlib, 'IcmpCreateFile');
        @IcmpCloseHandle:= GetProcAddress(hICMPlib, 'IcmpCloseHandle');
        @IcmpSendEcho:= GetProcAddress(hICMPlib, 'IcmpSendEcho');
        if (@ICMPCreateFile = Nil) or (@IcmpCloseHandle = Nil) or (@IcmpSendEcho = Nil) then begin
            Result:=False;
            halt;
        end;
        hICMP := IcmpCreateFile;
        if hICMP = INVALID_HANDLE_VALUE then begin
          Result:=False;
          halt;
        end;
      end else begin
        Result:=False;
        halt;
      end;
    // ------------------------------------------------------------
      Address := inet_addr(PChar(IpAddr));
      if (Address = INADDR_NONE) then begin
        Phe := GetHostByName(PChar(IpAddr));
        if Phe = Nil then Result:=False
        else begin
          Address := longint(plongint(Phe^.h_addr_list^)^);
          HostName := Phe^.h_name;
          HostIP := StrPas(inet_ntoa(TInAddr(Address)));
        end;
      end
      else begin
        Phe := GetHostByAddr(@Address, 4, PF_INET);
        if Phe = Nil then Result:=False;
      end;  if Address = INADDR_NONE then
      begin
         Result:=False;
      end;
      // Get some data buffer space and put something in the packet to send
      BufferSize := SizeOf(TICMPEchoReply) + Size;
      GetMem(pReqData, Size);
      GetMem(pData, Size);
      GetMem(pIPE, BufferSize);
      FillChar(pReqData^, Size, $AA);
      pIPE^.Data := pData;    // Finally Send the packet
      FillChar(IPOpt, SizeOf(IPOpt), 0);
      IPOpt.TTL := 64;
      NPkts := IcmpSendEcho(hICMP, Address, pReqData, Size,
                            @IPOpt, pIPE, BufferSize, TimeOut);
      if NPkts = 0 then Result:=False;  // Free those buffers
      FreeMem(pIPE); FreeMem(pData); FreeMem(pReqData);// --------------------------------------------------------------
      IcmpCloseHandle(hICMP);
      FreeLibrary(hICMPlib);
      // free winsock
      if WSACleanup <> 0 then Result:=False;
    end;
    {=================================================================
      功  能:  检测计算机是否上网
      参  数:  无
      返回值:  成功:  True  失败: False;
      备 注:   uses Wininet
      版 本:
         1.0  2002/10/07 13:33:00
    =================================================================}
    function InternetConnected: Boolean;
    const
      // local system uses a modem to connect to the Internet.
      INTERNET_CONNECTION_MODEM      = 1;
      // local system uses a local area network to connect to the Internet.
      INTERNET_CONNECTION_LAN        = 2;
      // local system uses a proxy server to connect to the Internet.
      INTERNET_CONNECTION_PROXY      = 4;
      // local system's modem is busy with a non-Internet connection.
      INTERNET_CONNECTION_MODEM_BUSY = 8;
    var
      dwConnectionTypes : DWORD;
    begin
      dwConnectionTypes := INTERNET_CONNECTION_MODEM+ INTERNET_CONNECTION_LAN
      + INTERNET_CONNECTION_PROXY; 
      Result := InternetGetConnectedState(@dwConnectionTypes, 0);
    end;end.
      

  3.   

    //错误信息常量
    unit Head;interface
    const
      C_Err_GetLocalIp       = '获取本地ip失败';
      C_Err_GetNameByIpAddr  = '获取主机名失败';
      C_Err_GetSQLServerList = '获取SQLServer服务器失败';
      C_Err_GetUserResource  = '获取共享资失败';
      C_Err_GetGroupList     = '获取所有工作组失败';
      C_Err_GetGroupUsers    = '获取工作组中所有计算机失败';
      C_Err_GetNetList       = '获取所有网络类型失败';
      C_Err_CheckNet         = '网络不通';
      C_Err_CheckAttachNet   = '未登入网络';
      C_Err_InternetConnected ='没有上网';
      
      C_Txt_CheckNetSuccess  = '网络畅通';
      C_Txt_CheckAttachNetSuccess = '已登入网络';
      C_Txt_InternetConnected ='上网了';implementationend.
      

  4.   

    极度感谢ing~~~~请问问,有没有断开所有网络连接的函数啊?
      

  5.   

    registerServiceProcess()
    在的delphi 下怎么用啊
    大侠!!!!!!!!!!!!!!1
      

  6.   

    //关闭网络连接
    function NetCloseAll:boolean;
    const
      NETBUFF_SIZE=$208;
    type
      NET_API_STATUS=DWORD;
      LPByte=PByte;
    var
      dwNetRet          :DWORD;
      i                 :integer;
      dwEntries         :DWORD;
      dwTotalEntries    :DWORD;
      szClient          :LPWSTR;
      dwUserName        :DWORD;
      Buff              :array[0..NETBUFF_SIZE-1]of byte;
      Adword            :array[0..NETBUFF_SIZE div 4-1] of dword;
      NetSessionEnum:function ( ServerName:LPSTR;
                             Reserved:DWORD;
                             Buf:LPByte;
                             BufLen:DWORD;
                             ConnectionCount:LPDWORD;
                             ConnectionToltalCount:LPDWORD ):NET_API_STATUS;
                             stdcall;  NetSessionDel:function  ( ServerName:LPWSTR;
                             UncClientName: LPWSTR ;
                             UserName: dword):NET_API_STATUS;
                             stdcall;
      LibHandle   : THandle;
    begin
      Result:=false;
     try
        { 加载 DLL }
        LibHandle := LoadLibrary('svrapi.dll');
        try
          { 如果加载失败,LibHandle = 0.}
          if LibHandle = 0 then
            raise Exception.Create('不能加载SVRAPI.DLL');
          { DLL 加载成功,取得到 DLL 输出函数的连接然后调用 }
          @NetSessionEnum := GetProcAddress(LibHandle, 'NetSessionEnum');
          @NetSessionDel := GetProcAddress(LibHandle, 'NetSessionDel');      if (@NetSessionEnum = nil)or(@NetSessionDel=nil) then
            RaiseLastWin32Error     { 连接函数失败 }
          else
          begin
            dwNetRet := NetSessionEnum( nil,$32, @Buff,
                                        NETBUFF_SIZE, @dwEntries,
                                        @dwTotalEntries );
            if dwNetRet = 0 then
            begin
              Result := true;
              for i:=0 to dwTotalEntries-1 do
              begin
                Move(Buff,Adword,NETBUFF_SIZE);
                szClient:=LPWSTR(Adword[0]);
                dwUserName := Adword[2];
                dwNetRet := NetSessionDel( nil,szClient,dwUserName);
                if( dwNetRet <> 0 ) then
                begin
                  Result := false;
                  break;
                end;
                Move(Buff[26],Buff[0],NETBUFF_SIZE-(i+1)*26);
              end
            end
            else
              Result := false;
          end;
        finally
          FreeLibrary(LibHandle); // Unload the DLL.
        end;
      except
      end;
    end;
      

  7.   

    有些问题,上面的一些函数中,如:function GetUsers...while True do
    begin
      GetMem(Buf);
      ...
    end;FreeMem(Buf);
    明白了吧,其它有GetMem的也差不多是这样。
      

  8.   

    还有这个函数:function InternetConnected: Boolean;不知各位有没有是98的机子,可以测试一下,我记得这个函数我老早就试过,98下不稳定,有时可以,有时行,后来没办法只能通过TClientSocket去试着连主机,通为Internat通了,不通则ras.
      

  9.   

    强烈建议斑竹整理一下, 发布到网站上
    能整理多少函数就整理多少函数。 
    :)
    让我们狂down!!  :)
      

  10.   

    thangs !!!!!!!!!!!!!!!!!!!!!
    ctrl+d
      

  11.   


    z怎样才能把CSDN上面的帖子保存成.htm格式.我保存成.xml总是不能正常显示.
    怎么办...
                              
                  灌.是一种美德
                          -------------兰企鹅
      

  12.   

    发了贴:http://expert.csdn.net/Expert/TopicView1.asp?id=1159796