检测是否已上网,及上网的方式(API)

 http://publishblog.blogdriver.com/blog/tb.b?diaryID=397543

我们将使用“wininet.dll”的InternetGetConnectedState函数。
我不想用测试某网址、又或系检查网卡有几个IP的方法去检测自己是否在线,好象被动了些。
InternetGetConnectedState函数不仅解决了我的问题,还可以检测用户是用什么方式上网的,真是棒极了。
我找到了极有限但相当有用的资料,利用VC我找到了几个常量的值。
好了,过程是这样的。
首先定义几个常量
private const long INTERNET_CONNECTION_MODEM = 1;
private const long INTERNET_CONNECTION_LAN = 2;
private const long INTERNET_CONNECTION_PROXY = 4;
private const long INTERNET_CONNECTION_MODEM_BUSY = 8;
我还是用了默认的名字,程序中,多些共性,少些个性,我始终认为相当有必要。
定义(引用)API函数
[DllImport("wininet.dll")]
public static extern bool InternetGetConnectedState (out long lpdwFlags , long dwReserved );
关于API的使用我在这里不想多说,打好每个字(象我一样的新手都会做得很好)。我建议大家还是看看msdn中对这个API函数的描述,再对照下我们的使用,将对大家学习大有好处。因为,在msdn中有很多我们想要的知识,问题是我们如何读懂他。
随便建个按件,在其Click事件中,我们将示范如何使用这个API函数,代码如下:
private void button2_Click(object sender, System.EventArgs e)
{
  long lfag;
  string strConnectionDev="";
  if(InternetGetConnectedState(out lfag,0))
    strConnectionDev="在线呀!!用的是 ";
  else
    strConnectionDev="不在线呀!!";
  if( (lfag & INTERNET_CONNECTION_MODEM ) > 0)
    strConnectionDev += "Modem";
  if( (lfag & INTERNET_CONNECTION_LAN ) > 0)
    strConnectionDev += "LAN";
  if( (lfag & INTERNET_CONNECTION_PROXY ) > 0)
    strConnectionDev += "a Proxy";
  if((lfag & INTERNET_CONNECTION_MODEM_BUSY) >0 )
    strConnectionDev += "Modem but modem is busy";
  MessageBox.Show(strConnectionDev);
}
?diaryID=397543

posted on 2008-02-08 01:54  Above The Sky  阅读(471)  评论(0)    收藏  举报

导航