程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#寫的ADSL撥號程序示例

C#寫的ADSL撥號程序示例

編輯:關於C語言

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);
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved