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 注入不用writeprocessmemory 函数

Delphi 利用unigui中的tunipagecontrol实现多页面

Delphi 程序动态改变皮肤

Delphi 用空格把 s 凑够 n 的长度

Delphi unigui 调用js

Delphi使用idhttp 获取 httpsurl内容

几个webbrowser相关的函数

winapi 字符及字符串函数(10): lstrcpy - 复制字符串

Delphi webbrowser getelementbyid().innerhtml与getelementbyid().value的区别

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



打赏

取消

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

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

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

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

评论

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