C# 實(shí)現(xiàn)ADSL自動(dòng)斷網(wǎng)和撥號(hào)的方法(適用于撥號(hào)用戶)
封裝類:
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 //要?jiǎng)h除的類型。
{
  File,//表示internet臨時(shí)文件
  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);
  }
}
調(diào)用方法:
RASDisplay ras = new RASDisplay();
ras.Disconnect();//斷開連接
ras.Connect("ADSL");//重新?lián)芴?hào)
注意:斷開后連接時(shí),如果不想出現(xiàn)確認(rèn)對(duì)話框,請(qǐng)按下面的步驟進(jìn)行設(shè)置:
1、右擊“網(wǎng)上鄰居”--屬性;
2、在隨后出現(xiàn)的“寬帶連接”窗口中,右擊寬帶連接,單擊“屬性”;
3、在隨后出現(xiàn)的屬性對(duì)話框中,單擊“選項(xiàng)”;
4、把隨后出現(xiàn)的“提示名稱、密碼和證書等”前面的對(duì)號(hào)去掉,點(diǎn)“確定”退出;
以上這篇C# 實(shí)現(xiàn)ADSL自動(dòng)斷網(wǎng)和撥號(hào)的方法(適用于撥號(hào)用戶)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持我們。
上一篇:SQL+C#實(shí)現(xiàn)獲得當(dāng)前月的第一天與最后一天
欄 目:C#教程
下一篇:C#控制臺(tái)基礎(chǔ) list&lt;&gt;初始化的兩種方法
本文標(biāo)題:C# 實(shí)現(xiàn)ADSL自動(dòng)斷網(wǎng)和撥號(hào)的方法(適用于撥號(hào)用戶)
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6123.html
您可能感興趣的文章
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
 - 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
 - 01-10C#實(shí)現(xiàn)清空回收站的方法
 - 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
 - 01-10C#實(shí)現(xiàn)多線程下載文件的方法
 - 01-10C#實(shí)現(xiàn)Winform中打開網(wǎng)頁頁面的方法
 - 01-10C#實(shí)現(xiàn)遠(yuǎn)程關(guān)閉計(jì)算機(jī)或重啟計(jì)算機(jī)的方法
 - 01-10C#自定義簽名章實(shí)現(xiàn)方法
 - 01-10C#文件斷點(diǎn)續(xù)傳實(shí)現(xiàn)方法
 - 01-10winform實(shí)現(xiàn)創(chuàng)建最前端窗體的方法
 


閱讀排行
- 1C語言 while語句的用法詳解
 - 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
 - 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
 - 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
 - 5c語言計(jì)算三角形面積代碼
 - 6什么是 WSH(腳本宿主)的詳細(xì)解釋
 - 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
 - 8正則表達(dá)式匹配各種特殊字符
 - 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
 - 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
 
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
 - 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
 - 01-10WinForm限制窗體不能移到屏幕外的方法
 - 01-10WinForm繪制圓角的方法
 - 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
 - 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
 - 01-10C#停止線程的方法
 - 01-10C#實(shí)現(xiàn)清空回收站的方法
 - 01-10C#通過重寫Panel改變邊框顏色與寬度的
 - 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
 
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
 - 01-10delphi制作wav文件的方法
 - 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
 - 04-02jquery與jsp,用jquery
 - 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
 - 01-11ajax實(shí)現(xiàn)頁面的局部加載
 - 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 


