本文整理自网络,侵删。
参加学院的开发大赛,需要用到检测网络连接状态的功能,在网上找了下,找到了三种方法, 总结一下,备忘...
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中combobox.items.indexof用法
Delphi richedit memo1支持中文搜索、向上查找、区分大小写
Delphi 调试ios时出现 please specify exact device preset uuid
更多相关阅读请进入《Delphi》频道 >>