C# 实现ADSL自动断网和拨号的方法(适用于拨号用户)_C#教程

封装类:

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("Rasapi32.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[i].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[i] = names[i].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);
  }
}

调用方法:

RASDisplay ras = new RASDisplay();
ras.Disconnect();//断开连接
ras.Connect("ADSL");//重新拨号

注意:断开后连接时,如果不想出现确认对话框,请按下面的步骤进行设置:

1、右击“网上邻居”--属性;

2、在随后出现的“宽带连接”窗口中,右击宽带连接,单击“属性”;

3、在随后出现的属性对话框中,单击“选项”;

4、把随后出现的“提示名称、密码和证书等”前面的对号去掉,点“确定”退出;

以上这篇C# 实现ADSL自动断网和拨号的方法(适用于拨号用户)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索adsl拨号
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-10-02 02:09:33

C# 实现ADSL自动断网和拨号的方法(适用于拨号用户)_C#教程的相关文章

笔记本为什么会自动断网

  解决方法 第一步.右键单击任务栏网络连接图标,选择"打开网络和共享中心", 第二步.然后点击"更改适配器设置",右键单击网络连接图标,并选择"属性"选项.切换到"选项"设置页,将"挂断前的空闲时间"选为"从不"即可(图1). 第三步.打开IE浏览器,点击"工具"菜单选"Internet选项",切换到"连接"选项卡,选择&qu

win8系统自动断网怎么办

  win8系统自动断网怎么办 1.进入控制面板,再进入"网络和共享中心" 2.进入网络和共享中心之后,点击左侧的"更改适配器设置", 3.在"网络链接"窗口中,右单击那个无线链接,选择"属性" 4.进入属性之后,然后去掉TCP/IPv6协议的那个勾,如图示 5.完成第四步之后,点击"配置"按钮 6.在配置窗口,去掉第一项的勾,如图

如何避免因电源管理造成的自动断网

你会不会经常遇到待机情况下网络就自动断开了呢?本文就教你避免因电源管理造成的自动断网.小编对此情况有过研究,发现如果电脑设置成一段时间自动待机的话,系统就会自动关闭网卡来节省电源,由此而导致网络自动断掉.那么你可以通过以下方法解决此类情况(xp及win7都适用) 1.进入控制面板->网络和Internet,右键单击"本地连接",在弹出的菜单中选择"属性",如下图所示: 2.此时,系统将出现"本地连接 属性"对话框,点击其中的"配置

win7 32位系统待机状态自动断网的解决方法

  目前ghost win7 的用户越来越多,这个系统里面有很多功能都是可以满足用户需求的.不过其中也有的功能会困扰用户,比如当正在下载文件而电脑进入待机状态的时候,系统可能自动断开网络,导致正在进行的任务失败,十分的烦人.那么下面就来看看win7 32位系统待机状态自动断网的解决方法吧. 1.其实有个最简单的方法,在进行文件下载的时候,保持电脑一直不要进入待机状态就可以了,不过这种方法却解决不了根本的问题.一旦离开的时候,待机断网问题又出现了,这时候可以通过修改注册表来解决. 在对注册表修改的

win7系统自动断网怎么办

  win7系统的稳定性大家都是知道的,但是由于各种各样的问题,其实在某种程度上win7系统还是令人有点不省心的,尤其是在一些我们长时间没操作的情况下,win7系统会进入休眠.待机的状态,然后网络连接就会自动断了.那该怎么解决呢? 步骤一:在win7 64位旗舰版的桌面使用鼠标右键点网络,点击"网络和共享中心"打开; 步骤二:在"网络和共享中心"的左侧点击"更改适配器设置"选项; 步骤三:然后在雨林木风系统的"更改适配器设置"

Word自动断字功能介绍使用方法

Word的自动断字是Microsoft Word具有的一项排版功能.为了保持Word文档页面的整齐,Word提供断字功能.即在行尾的单词由于太长而无法完全放下时,会在适当的位置将该单词分成两部分,并在行尾使用连接符进行连接. 启用自动断字功能 以在Word 2010软件中启用"自动断字"功能介绍使用方法: 第1步,打开Word2010窗口,切换到"页面布局"功能区.在"页面设置"分组中单击"断字"按钮,并在打开的菜单中单击&q

无线路由器自动断网重拔的故障处理

问题描述:无线路由器上网用户出现几分钟断网,过几分钟又自动恢复 网络拓扑介绍:10M光纤接入-路由器A-交换机-无线路由器B(交换机到无线路由器的线直接接入无线路由器的4个LAN口其中的一个,所有通过无线上网的用户IP地址自动获取) 无线路由器的设置: 1.关闭DHCP功能,使无线用户能获取到出外网的路由器A分配的地址. 2.设置好无线的加密密码. 结果:无线路由器上网用户出现几分钟断网,过几分钟又自动恢复. 故障排除过程:登录无线路由器检查系统日志,发现路由器每过几分钟尝试拨号一次,因为只是所

Mac省电模式后WiFi 自动断网的修复

  有好多人抱怨,新版的Mac OS X系统,会在系统进入Sleep之后,自动断WiFi网,对好多用户来说这个不能接受.遇到一个人,需要开上数个ssh连接,一旦断网,需要重新开这些连接,给工作带来不变. 经过测试,新版的支持一个Standby的模式的,在GUI界面是看不见的,也没有休眠的设置,所以需要使用命令. 使用下面的Terminal[终端]命令来设定系统,可以禁止Standby状态: sudo pmset -a standby 0 sleep 20 hibernatemode 3 netw

Windows7下ADSL自动断线的问题及解决方法

在Windows7 中,为什么ADSL 闲置一段时间就会自动断线呢?在其它软硬件工作正常的情况下,出现这种问题,多半是因为启用了闲置自动断线设定.只要关闭这项功能,问题就能解决了. 具体步骤如下: 1.打开"开始-〉控制面板" 2.点击"网络和 Internet" 3.再按一下"网络和共享中心" 4.单击页面左上角的"更改适配器设置" 5.接着,在 ADSL 宽带连接图标上,右键鼠标,选择"属性" 6.切换