判断网络的是否连接或者连接方式,比较重要的一点就是是不是即时判断,如果你明明无连接,判断出来却说你有,连接上了,却说你还未连接,下面要介绍的两个方法中 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; //仅对98\95有效判断是否联上美国网络

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

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('联上美国的网络。'); //仅对98\95有效所以一般不用判断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

用Delphi即时判断当前的网络的连接方式的更多相关文章

  1. 4.ClassLink - 一种新型的VPC 经典网络的连接方式

    阿里云CLassLink文档地址:https://help.aliyun.com/document_detail/65412.html?spm=a2c4g.11186623.2.9.41a25a07F ...

  2. iOS学习之判断是否有网络的方法

    在实际开发中, 会有这样一个需求: 用户在有网的状态下会直接从网络请求数据, 在没网的情况下直接从本地读取数据. 下边的方法可以判断是否有网络. - (BOOL)connectedToNetwork ...

  3. Reachability(判断网络是否连接)

    类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...

  4. 判断网络是否连接 和 判断GPS是否连接

    //判断网络是否连接 public static Boolean isNetworkEnabled(Context context){ int status=-1  //设置默认连接的状态为-1 Co ...

  5. Android判断网络是否连接

    <!-- 配置文件判断网络是否连接 --> <uses-permission android:name="android.permission.ACCESS_NETWORK ...

  6. Reachability判断网络是否连接

    类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...

  7. 判断GPS、网络是否开启

    判断GPS.网络是否开启 1.判断GPS打开与否,没有打开则打开GPS private void initGPS(Context context) { LocationManager location ...

  8. c# 判断网络是连接到互联网

    方法1:InternetGetConnectedState         [System.Runtime.InteropServices.DllImport("wininet") ...

  9. android 开发中判断网络是否连接的代码

    在android的开发中,尤其是与访问网络有关的开发,都要判断一下手机是否连接上了网络,下面是一个判断是否连接网络的嗲吗片段: package cn.com.karl.util; import com ...

随机推荐

  1. C语言结构体的字节对齐原则

    为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据 ...

  2. 【习题 3-6 UVA - 232】Crossword Answers

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟题.注意场宽为3 [代码] #include <bits/stdc++.h> using namespace std ...

  3. NSArray NSDictionary一些用法

    //从字符串分割到数组- componentsSeparatedByString: NSString *str = [NSString alloc] initWithString:@"a,b ...

  4. Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)

    Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Tota ...

  5. generating permunation——全排列(算法汇总)

    本文一共提供了4种全排列的方法,包括递归非字典序版本.递归字典序版本.标准库版本和BFS字典序版本,当然BFS非字典序实现相对于BFS字典序版本更加简洁,稍加修改即可. 说明:递归版本基于网上现有代码 ...

  6. stm32的ADC规则组通道采样顺序设置

    先看一下固件库手册 再看一下手册上的例子:  有两个通道,,并且顺序如下

  7. (一)RabbitMQ消息队列-RabbitMQ的优劣势及产生背景

    原文:(一)RabbitMQ消息队列-RabbitMQ的优劣势及产生背景 本篇并没有直接讲到技术,例如没有先写个Helloword.我想在选择了解或者学习一门技术之前先要明白为什么要现在这个技术而不是 ...

  8. 用SQL找出前N名

    业务系统中常常会有排名的需求,考试和比赛中则更普遍了.Excel 中也有个 Rank 函数供排名之用,数据库中更不例外了. 如果须要找出工资最高的前三个员工工资(及其员工号). 只是."前三 ...

  9. .NET Framework基础知识(二)(转载)

    1.课外:为什么object数组可以赋值给object类型,int数组却不能赋值给int类型? 答:因为不管是什么什么数组都继承自Array,而Array又继承自object. 2.线程:是操作系统分 ...

  10. CMakeListx.txt 编辑语法学习

    已hello.cpp为源文件,构建一个CMakeLists.txt cmake_minimum_required(VERSION 2.8) project(hello) add_executable( ...