怎么实现象WIN2000的网络连接图标那样,一但网线有变化就能够立刻知道。我在一个线程里用ADOCONNECTION这么做:
try
  if ADOConnection.Connect=false then
    ADOConnection.open;
  net:=true;
except
  ADOConnection.close;
  net:=false;
end;
当在网络未连接时发现一个问题,脱网时间很短时比较正常,当时间一长了,ADOConnection.Connect居然为真,不知道为什么,是ODBC的原因吗?

解决方案 »

  1.   

    应该用网络状态监测函数和一个timmer控件,隔一段时间检查一下是否断线
    我推荐一个控件包RainXP,模例XP界面,很美!!!上面有一个监测网络状态的控件。
      

  2.   

    zsy_good (只要坚定不移的走下去,那一定会成功) 大侠的网络函数大公开我借花献佛:{=========================================================================
       功  能: 网络函数库
       时  间: 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;
      

  3.   

    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;
      

  4.   

    {=================================================================
      功  能: 检测机器是否登入网络
      参  数: 无
      返回值: 成功:  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;
    大侠,你这个函数是怎么用的,无论怎么都返回TRUE,没什么作用啊
      

  5.   

    应该用网络状态监测函数和一个timmer控件,隔一段时间检查一下是否断线
    我推荐一个控件包RainXP,模例XP界面,很美!!!上面有一个监测网络状态的控件。哪里有下的?不大话发给我也行呀[email protected]