C#写的ADSL拨号程序示例

ADSL自动拨号类,前提是在系统中已经有了一个宽带拨号连接

调用代码:

Code

[copy to clipboard]CODE:

RASDisplay ras = new RASDisplay();
ras.Disconnect();//断线
ras.Connect("adsl");//拨号
using System;
using System.Runtime.InteropServices;
public struct RASCONN
{
  public int dwSize;
  public IntPtr hrasconn;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst=257)]
  public string szEntryName;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst=17)]
  public string szDeviceType;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst=129)]
  public string szDeviceName;
}
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]
public struct RasStats
{
  public int dwSize;
  public int dwBytesXmited;
  public int dwBytesRcved;
  public int dwFramesXmited;
  public int dwFramesRcved;
  public int dwCrcErr;
  public int dwTimeoutErr;
  public int dwAlignmentErr;
  public int dwHardwareOverrunErr;
  public int dwFramingErr;
  public int dwBufferOverrunErr;
  public int dwCompressionRatioIn;
  public int dwCompressionRatioOut;
  public int dwBps;
  public int dwConnectionDuration;
}
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]
public struct RasEntryName
{
  public int dwSize;
  //[MarshalAs(UnmanagedType.ByValTStr,SizeConst=(int)RasFieldSizeConstants.RAS_MaxEntryName + 1)]
  public string szEntryName;
  //#if WINVER5
  // public int dwFlags;
  // [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260+1)]
  // public string szPhonebookPath;
  //#endif
}
public class RAS
{
  [DllImport("Ra<a href="http://dev.21tx.com/corp/sap/"; target="_blank">SAP</a>i32.dll", EntryPoint="RasEnumConnectionsA",
    SetLastError=true)]
  internal static extern int RasEnumConnections
    (
    ref RASCONN lprasconn, // buffer to receive connections data
    ref int lpcb, // size in bytes of buffer
    ref int lpcConnections // number of connections written to buffer
    );
  [DllImport("rasapi32.dll",CharSet=CharSet.Auto)]
  internal static extern uint RasGetConnectionStatistics(
    IntPtr hRasConn,   // handle to the connection
    [In,Out]RasStats lpStatistics // buffer to receive statistics
    );
  [DllImport("rasapi32.dll",CharSet=CharSet.Auto)]
  public extern static uint RasHangUp(
    IntPtr hrasconn // handle to the RAS connection to hang up
    );
  [DllImport("rasapi32.dll",CharSet=CharSet.Auto)]
  public extern static uint RasEnumEntries (
    string reserved,       // reserved, must be NULL
    string lpszPhonebook,    // pointer to full path and
    // file name of phone-book file
    [In,Out]RasEntryName[] lprasentryname, // buffer to receive
    // phone-book entries
    ref int lpcb,         // size in bytes of buffer
    out int lpcEntries      // number of entries written
    // to buffer
    );
  [DllImport("wininet.dll",CharSet=CharSet.Auto)]
  public extern static int InternetDial(
    IntPtr hwnd,
    [In]string lpszConnectoid,
    uint dwFlags,
    ref int lpdwConnection,
    uint dwReserved
    );
  public RAS()
  {
  }
}
public enum DEL_CACHE_TYPE //要删除的类型。
{
  File,//表示internet临时文件
  Cookie //表示Cookie
};
public class RASDisplay
{
  [DllImport("wininet.dll",CharSet=CharSet.Auto)]
  public static extern bool DeleteUrlCacheEntry(
    DEL_CACHE_TYPE type
    );
  private string m_duration;
  private string m_ConnectionName;
  private string[] m_ConnectionNames;
  private double m_TX;
  private double m_RX;
  private bool m_connected;
  private IntPtr m_ConnectedRasHandle;
  RasStats status = new RasStats();
  public RASDisplay()
  {
    m_connected = true;
    RAS lpras = new RAS();
    RASCONN lprasConn = new RASCONN();
    lprasConn.dwSize = Marshal.SizeOf(typeof(RASCONN));
    lprasConn.hrasconn = IntPtr.Zero;
    int lpcb = 0;
    int lpcConnections = 0;
    int nRet = 0;
    lpcb = Marshal.SizeOf(typeof(RASCONN));
    nRet = RAS.RasEnumConnections(ref lprasConn, ref lpcb, ref
      lpcConnections);
    if(nRet != 0)
    {
      m_connected = false;
      return;
    }
    if(lpcConnections > 0)
    {
      //for (int i = 0; i < lpcConnections; i++)
      //{
      RasStats stats = new RasStats();
      m_ConnectedRasHandle = lprasConn.hrasconn;
      RAS.RasGetConnectionStatistics(lprasConn.hrasconn, stats);
      m_ConnectionName = lprasConn.szEntryName;
      int Hours = 0;
      int Minutes = 0;
      int Seconds = 0;
      Hours = ((stats.dwConnectionDuration /1000) /3600);
      Minutes = ((stats.dwConnectionDuration /1000) /60) - (Hours * 60);
      Seconds = ((stats.dwConnectionDuration /1000)) - (Minutes * 60) - (Hours * 3600);
      m_duration = Hours + " hours " + Minutes + " minutes " + Seconds + " secs";
      m_TX = stats.dwBytesXmited;
      m_RX = stats.dwBytesRcved;
      //}
    }
    else
    {
      m_connected = false;
    }
    int lpNames = 1;
    int entryNameSize = 0;
    int lpSize = 0;
    RasEntryName[] names = null;
    entryNameSize=Marshal.SizeOf(typeof(RasEntryName));
    lpSize=lpNames*entryNameSize;
    names=new RasEntryName[lpNames];
    names[0].dwSize=entryNameSize;
    uint retval = RAS.RasEnumEntries(null,null,names,ref lpSize,out lpNames);
    //if we have more than one connection, we need to do it again
    if(lpNames > 1)
    {
      names=new RasEntryName[lpNames];
      for(int i=0;i<names.Length;i++)
      {
        names.dwSize=entryNameSize;
      }
      retval = RAS.RasEnumEntries(null,null,names,ref lpSize,out lpNames);
    }
    m_ConnectionNames = new string[names.Length];
    if(lpNames>0)
    {
      for(int i=0;i<names.Length;i++)
      {
        m_ConnectionNames = names.szEntryName;
      }
    }
  }
  public string Duration
  {
    get
    {
      return m_connected ? m_duration : "";
    }
  }
  public string[] Connections
  {
    get
    {
      return m_ConnectionNames;
    }
  }
  public double BytesTransmitted
  {
    get
    {
      return m_connected ? m_TX : 0;
    }
  }
  public double BytesReceived
  {
    get
    {
      return m_connected ? m_RX : 0;
    }
  }
  public string ConnectionName
  {
    get
    {
      return m_connected ? m_ConnectionName : "";
    }
  }
  public bool IsConnected
  {
    get
    {
      return m_connected;
    }
  }
  public int Connect(string Connection)
  {
    int temp = 0;
    uint INTERNET_AUTO_DIAL_UNATTENDED = 2;
    int retVal = RAS.InternetDial(IntPtr.Zero,Connection,INTERNET_AUTO_DIAL_UNATTENDED,ref temp,0);
    return retVal;
  }
  public void Disconnect()
  {
    RAS.RasHangUp(m_ConnectedRasHandle);
  }
}

时间: 2024-10-27 13:05:33

C#写的ADSL拨号程序示例的相关文章

用C#写的ADSL拨号程序的代码示例_C#教程

<!--StartFragment-->ADSL自动拨号类,前提是在系统中已经有了一个宽带拨号连接 调用代码: RASDisplay ras = new RASDisplay(); ras.Disconnect();//断线 ras.Connect("adsl");//拨号  复制代码 代码如下: using System;  using System.Runtime.InteropServices;  public struct RASCONN  {      publi

ADSL拨号678错误的解决

我的电脑有时经常出现ADSL无法拨号,报告错误678.上网查了不少资料,才找到一个临时的解决方案,就是把原来的拨号程序删除,再重新安装一次能恢复正常,但是一般情况下,如果出现错误678,很难恢复正常. 首先看看官方解释: 错误代码:ADSL Error 678 问题描述:拨入方计算机没有应答,无法完成拨号网路连接. 导致原因:(很多原因都能导致678错误) 1.ADSL Modem没有接通电源,导致电脑无法与ADSL Modem连接 2.连接ADSL Modem与网卡之间的连接网线出现问题,导致

c语言基础-真的很着急,大一学生党,求大神指导写一个c语言拨号程序

问题描述 真的很着急,大一学生党,求大神指导写一个c语言拨号程序 能显示出通讯录中所有人姓名,当选中某个姓名时,屏幕上模拟打字机效果依次显示出此人的电话号码中的各个数字,并伴随相应的拨号声 解决方案 http://zhidao.baidu.com/link?url=svF4fjRTNuBmCJyCiRipzB_21UO5zvNc0hCye7qj8nxOY1lC78667ycDqYnJ7xHiGT00M4NuYqGIak2R5cEU961mjRl1ADLf-Eh1nDKpiBi

C#实现ADSL拨号功能及扩展

今天在园子里的博问中,看到一个关于打开和断开网络链接的提问.正好自己以前写过一个类似的程序,现在分享给大家. 这个简单的程序可以实现使用河南网通ADSL的帐户进行拨号.断开的功能,在Vista和XP系统中可以正常使用,其他系统未测试.界面如下: 河南网通帐户,获取加密后的真实用户名的具体方法 : 网上邻居=>右键=>属性=>选项=>连接选项,在选中"提示名称.密码和证书等". 然后,使用客户端输入用户名和密码,进行拨号 ,成功后,打开IE的属性,选中"

使用.NET发送E-Mail小程序示例

本文主要是以.NET下怎么实现发送E-Mail作为示例分析讲解,故在示例程序里有许多涉及到.Net.Mail之外的内容都没做.最近比较忙没太多的时候去完善其功能,有兴趣的朋友可以下载源码去完善下.这不是一个什么大的软件,也不是什么很特别的东西,我写这个文章的目的是让大家一起来学习.NET下发送E-mail的实现,希望这篇文章可以帮助到还没搞清楚怎么实现发送邮件的朋友,对于已经会的或是这方面的牛人的前辈们看了本文请留下宝贵的建议. 本程序是采用.NET框架下的Mail类来完成邮件的发送操作的,里面

ADSL拨号上网常见问题

我们大多数人是通过ADSL方式实现与互联网连接的,但是有好多问题大家还是有点模糊,下面的内容针对相关问题,总结出大家需要了解的一些内容,拿出来和大家分享,希望对您有所帮助! 1 ADSL设备需要专用的驱动程序吗? 答:不需要,安装任意一个遵守PPPoE协议的软件即可,但是网卡的驱动还是要装的非标准ADSL(USB,内置ADSL卡除外) 2 如何选用adsl拨号软件? 答:ADSL使用的是PPPoE(Point-to-Point Protocol over Ethernet,以太网上的点对点协议)

解密ADSL拨号上网错误代码

我们现在大多数人是通过ADSL方式与互联网接入.可是在上网过程中ADSL动不动就发个小脾气,出现一些这样那样的错误,让我们很是头疼,现在经过搜集整理,把ADSL拨号上网错误代码进行了一下总结,希望对您能有所帮助: ◆错误602Theportisalreadyopen问题:拨号网络网络由于设备安装错误或正在使用,不能进行连接原因:RasPPPoE没有完全和正确的安装解决:卸载干净任何PPPoE软件,重新安装 ◆错误605Cannotsetportinformation问题:拨号网络网络由于设备安装

妙招巧施 让你的ADSL拨号上网自动到底

在工作站数量相对较少的家庭组网环境中,大家 往往都会选用共享ADSL设备的方式来进行拨号上网.尽管这种上网方式可以充分发挥ADSL设备的自身使用价值,不过让人 感到烦恼的是每次上网之前,都需要先对ADSL设备进行手工拨号,而且其他工作站的上网连接状态都会受到与ADSL设备直接相连工作站运行状态的影响, 例如一旦与ADSL设备直接相连的工作站被注销时,其他工作站的上网连接状态就会因此被迫中断,很明显这种共享上网方式影响局域网其他工作站的上网效率.为了提升拨号上网效率,我们能否让ADSL设备随工作站

《C Primer Plus(第6版)中文版》一第2章 C语言概述2.1 简单的C程序示例

第2章 C语言概述 C Primer Plus(第6版)中文版 本章介绍以下内容: 运算符:= 函数:main().printf() 编写一个简单的C程序 创建整型变量,为其赋值并在屏幕上显示其值 换行字符 如何在程序中写注释,创建包含多个函数的程序,发现程序的错误 什么是关键字 C程序是什么样子的?浏览本书,能看到许多示例.初见C程序会觉得有些古怪,程序中有许多{.cp->tort和*ptr++这样的符号.然而,在学习C的过程中,对这些符号和C语言特有的其他符号会越来越熟悉,甚至会喜欢上它们.