zoukankan      html  css  js  c++  java
  • 用Delphi即时判断当前的网络的连接方式



    判断网络的是否连接或者连接方式,比较重要的一点就是是不是即时判断,如果你明明无连接,判断出来却说你有,连接上了,却说你还未连接,下面要介绍的两个方法中 InternetGetConnectedState就是不怎么够即时的API函数,而第二个使用的是IsNetworkAlive这个API函数,这个没有InternetGetConnectedState的那种问题,但是可能需要安装SDK,也就是.Net框架。

    一、InternetGetConnectedState



    在DELPHI中 引用wininet这个单元就可以直接使用 InternetGetConnectedState函数了,下面给出一个判断当前网络连接状态的函数,在注释中会一一解释它的一些相关返回值的含义。



    uses wininet; //这个已经说了 必须引用它才可以使用InternetGetConnectedState函数



    function ConnectionKind :boolean;
    var flags: dword;
    begin
    Result := InternetGetConnectedState(@flags, 0);
    if Result then
    begin
    if (flags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then showmessage('在线:拨号上网');
    if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then showmessage('在线:通过局域网');
    if (flags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then showmessage('在线:代理');
    if (flags and INTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSY then showmessage('MODEM被其他非INTERNET连接占用');
    end; //if
    end; //function

    过程结束 下面说下各各返回值的意思:
    INTERNET_CONNECTION_MODEM: //现在是通过拨号方式上网的
    INTERNET_CONNECTION_LAN: //现在是通过局域网上网的
    INTERNET_CONNECTION_PROXY: //现在是通过代理上网的
    INTERNET_CONNECTION_MODEM_BUSY: //现在MODEM被其他非INTERNET连接占用(离线)

    以上就是通过使用InternetGetConnectedState函数实现的判断网络状态的方法



    --------------------------------------------------------------------------------


    二、IsNetworkAlive

    Delphi中没有对这个函数进行声明,所以我们要自己声明,请把下面的代码加入到当前窗体或者单元的 声明全局变量的地方 也就是第一个var下面。

    Function IsNetworkAlive(var lpdwFlagsLib:Integer):Integer;stdcall;external'SENSAPI.DLL';

    还有要定义三个常量:

    Const NETWORK_ALIVE_LAN = 1; //通过局域网上网
    Const NETWORK_ALIVE_WAN = 2; //通过广域网上网
    Const NETWORK_ALIVE_AOL = 4; //仅对9895有效判断是否联上美国网络

    下面还是给出一个过程来判断当前网络的状态,这次是一个过程

    procedure ShowNetWorkState();
    var
    falg:integer;
    Bos:boolean;
    begin
    Bos:=false;
    IsNetworkAlive(falg);
    case falg of
    NETWORK_ALIVE_LAN:
    begin
    Showmessage('通过局域网上网。');
    Bos:=true;
    end;
    NETWORK_ALIVE_WAN:
    begin
    Showmessage('通过广域网上网。');
    Bos:=true;
    end;
    NETWORK_ALIVE_AOL:
    begin
    Showmessage('联上美国的网络。'); //仅对9895有效所以一般不用判断NETWORK_ALIVE_AOL
    Bos:=true;
    end;
    else Showmessage('没有联网。');
    end; //case
    if Bos then Showmessage('你现在是联网状态!')
    else Showmessage('你现在是离线状态!');
    end;



    这个我就不多做解释了,上面的这两个方法是可以用来判断网络连接的方式,也可以用来判断网络是否连通。



    --------------------------------------------------------------------------------


    下面再介绍一个方法可以判断网络是否连通的。

    三、URL.DLL中的InetIsOffline函数。

    Delphi中没有对该函数进行声明,所以我们要自己声明,这跟上面的第二种方法的声明是同个道理
    函数申明为:
    function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL';


    然后就可以调用函数判断系统是否连接到INTERNET


    if InetIsOffline(0) then ShowMessage('没有连接到网络')
    else ShowMessage('已经连接到网络');


    该函数返回TRUE说明本地系统没有连接到INTERNET。
    附:
    大多数装有IE或OFFICE97的系统都有此DLL可供调用。
    InetIsOffline
    BOOL InetIsOffline(
    DWORD dwFlags,
    );

    http://blog.csdn.net/chinazhd/article/details/45060081

  • 相关阅读:
    2013.4.15 Particle Swarm Optimization with Skyline Operator for Fast Cloudbased Web Service Composition
    Adaptive service composition in flexible processes
    2013.4.13 DomainSpecific Service Selection for Composite Services
    2013.4.14 Modeling and Algorithms for QoSAware Service Composition in VirtualizationBased Cloud Computing
    2013.5.29 Towards Networkaware Service Composition in the Cloud
    Efficient algorithms for Web services selection with endtoend QoS constraints
    SQL Server中常用的SQL语句
    接口限流自定义注解
    linux服务器生产环境搭建
    MVEL自定义函数重复掉用报错:duplicate function
  • 原文地址:https://www.cnblogs.com/findumars/p/4823938.html
Copyright © 2011-2022 走看看