星空网 > 软件开发 > ASP.net

C# 实现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("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 INTE.NET_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自动断网和拨号(适用于拨号用户)

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

facebook群组营销教程:https://www.kjdsnews.com/a/1481668.html
订单下跌一半!卖家:广告费花完仍不出单:https://www.kjdsnews.com/a/1481669.html
一文读懂进口食品进口商备案2023年版:https://www.kjdsnews.com/a/1481670.html
关于宰牲节你需要知道的一切:https://www.kjdsnews.com/a/1481671.html
点淘MCN机构入驻条件:https://www.kjdsnews.com/a/1481672.html
TikTok 推出新的 AI 广告脚本生成器:https://www.kjdsnews.com/a/1481673.html
五月电商盛宴:节假日营销策略解析与商机揭秘 :https://www.kjdsnews.com/a/1842215.html
2023年意大利在线销售额超800亿欧元,增长27.14%:https://www.kjdsnews.com/a/1842216.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流