检测计算机是否联网

检测计算机是否联网比较简单的做法可以通过一个   Win32   Internet(WinInet)   函数   InternetCheckConnection来实现;  
这个函数的功能是检查是否能够建立   Internet   连接。  
它的实现是在   %SystemRoot%\System32\wininet.dll   中,Delphi   调用声明在   WinInet.pas   中,  
其   API   声明如下:  
   
BOOL   InternetCheckConnection(  
          IN   LPCSTR   lpszUrl,  
          IN   DWORD   dwFlags,  
          IN   DWORD   dwReserved  
);  
   
参数的意义是:  
   
lpszUrl:   需要测试能否建立连接的   URL   地址,可以为空;  
dwFlags:   目前只能是   FLAG_ICC_FORCE_CONNECTION(这个常量   Delphi   中没有声明,其值为   $00000001);  
dwReserved:   目前只能为   0。  
   
调用的说明:  
   
如果   lpszUrl   是非空的,Windows   从中解析出   Host   名然后   Ping   这个指定的   Host。  
如果   lpszUrl   是空的,并且   WinInet   内部服务器的   database   中有一个关于最近的   Server   的纪录,Windows   就从这条纪录中解析出   Host   名然后   Ping   它。  
   
如果能够成功的连接返回   True,否则返回   False;  
   
以下是一个判断当前计算机是否联网的例子:  
   
procedure   TForm1.Button1Click(Sender:   TObject);  
begin  
          if   InternetCheckConnection('http://www.yahoo.com/',   1,   0)   then  
                  edit1.text:=   'Connected'  
          else  
                  edit1.text:=   'Disconnected';  
end;  
   
通过上述的方法只能检测出当前计算机是否物理联网,即网线是否接好,网卡是否能顺利工作,不能确定是否能够实现获得   Internet   服务,即是否能和   ISP   进行   Internet   连接。  
这时可以通过另一个   Win32   Internet(WinInet)   函数   InternetQueryOption   来检测;  
这个函数的功能是查询指定   Internet   句柄的状态、选项。  
其   API   声明如下:  
   
BOOL   InternetQueryOption(  
          IN   HINTERNET   hInternet,  
          IN   DWORD   dwOption,  
          OUT   LPVOID   lpBuffer,  
          IN   OUT   LPDWORD   lpdwBufferLength  
);  
   
参数的意义是:  
   
hInternet:查询对象的   Internet   句柄(全局查询时为   nil),  
dwOption:查询的项目;  
lpBuffer:返回的查询结果;  
lpdwBufferLength:查询结果的字节长度(包括   IN   和   OUT);  
   
查询成功返回   True,否则返回   False;  
   
我们要查询当前计算机的   Internet   连接状态时可以使用查询项目   INTERNET_OPTION_CONNECTED_STATE,  
   
得到的   ConnectState   返回值可能是以下值的一个或几个值之和:  
   
INTERNET_STATE_CONNECTED                               :$00000001   连接状态;  
INTERNET_STATE_DISCONNECTED                         :$00000002   非连接状态(和   INTERNET_STATE_CONNECTED   对应);  
INTERNET_STATE_DISCONNECTED_BY_USER         :$00000010   用户请求的非连接状态  
INTERNET_STATE_IDLE                                         :$00000100   连接状态,并且空闲  
INTERNET_STATE_BUSY                                         :$00000200   连接状态,正在响应连接请求  
   
以下是一个判断当前计算机是否可以获得   Internet   服务的例子:  
   
function   TForm1.CheckOffline:   boolean;  
var  
          ConnectState:   DWORD;  
          StateSize:   DWORD;  
begin  
          ConnectState:=   0;  
          StateSize:=   SizeOf(ConnectState);  
          result:=   false;  
          if   InternetQueryOption(nil,   INTERNET_OPTION_CONNECTED_STATE,   @ConnectState,   StateSize)   then  
                  if   (ConnectState   and   INTERNET_STATE_DISCONNECTED)   <>   2   then   result:=   true;  
end;  
   
procedure   TForm1.Button1Click(Sender:   TObject);  
begin  
          if   CheckOffline   then  
                  edit1.text:=   'Connect   To   ISP'  
          else  
                  edit1.text:=   'Disconnect   To   ISP';  
end;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值