delphi检测本机的网络连接状态的三种方法


本文整理自网络,侵删。

  
参加学院的开发大赛,需要用到检测网络连接状态的功能,在网上找了下,找到了三种方法,

总结一下,备忘...

1、添加单元 wininet

然后调用 BOOL InternetGetConnectedState(   LPDWORD lpdwFlags, DWORD dwReserved );这个API函数

参数lpdwFlages可以为以下的组合或者不进行初始化:

INTERNET_CONNECTION_MODEM 拨号上网
INTERNET_CONNECTION_LAN 通过局域网上网
INTERNET_CONNECTION_PROXY 使用代理上网
INTERNET_CONNECTION_MODEM_BUSY  MODEM被其他非INTERNET连接占用(离线)

代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
Types:DWORD;
begin
if InternetGetConnectedState(@Types,0) then
begin
if (types and INTERNET_CONNECTION_MODEM)=INTERNET_CONNECTION_MODEM then
Edit1.Text:='拨号上网';
if (types and INTERNET_CONNECTION_LAN )=INTERNET_CONNECTION_LAN then
Edit1.Text:='通过局域网上网';
if (types and INTERNET_CONNECTION_PROXY )=INTERNET_CONNECTION_PROXY then
Edit1.Text:='使用代理上网';
if (types and INTERNET_CONNECTION_MODEM_BUSY )=INTERNET_CONNECTION_MODEM_BUSY then
Edit1.Text:='不在线';
end;
end;

据说这种方法不是太即时的,有时候连接了显示无连接,无连接时显示连接,我也没遇到过...

2、试用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 TForm1.Button2Click(Sender: TObject);
var
Flag:integer;
begin
IsNetworkAlive(flag);
case flag of
NETWORK_ALIVE_LAN:
begin
Edit2.Text:='局域网上网';
end;
NETWORK_ALIVE_WAN:
begin
Edit2.Text:='广域网上网';
end;
NETWORK_ALIVE_AOL:
begin
Edit2.Text:='联上美国的网络'; //仅对98\95有效所以一般不用判断NETWORK_ALIVE_AOL
end;
end;
end;

3、URL.DLL中的InetIsOffline函数

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

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

代码如下:

procedure TForm1.Button3Click(Sender: TObject);
var Flag:integer;
begin
flag:=0;
if InetIsOffline(flag) then Edit3.Text:='没有连接到网络'
else Edit3.Text:='连接到网络';
end;


相关阅读 >>

Delphi webbrowser设置自己定义user-agent

Delphi 暴力搜索api

Delphi中combobox.items.indexof用法

Delphi 提高unigui开发效率的两个方法

Delphi richedit memo1支持中文搜索、向上查找、区分大小写

Delphi中实现dbgrid列宽度自动调整

Delphi 判断文件名是否有效

Delphi 调试ios时出现 please specify exact device preset uuid

Delphi 根据开始和结束符取得中间字符串

Delphi中嵌入汇编检测是否在虚拟机里运行

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...