• ADSL自动拨号类


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

    调用代码:
    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
           );
    ******* string m_duration;
    ******* string m_ConnectionName;
    ******* string[] m_ConnectionNames;
    ******* double m_TX;
    ******* double m_RX;
    ******* bool m_connected;
    ******* 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);
    }
    }

  • 相关阅读:
    iOS中多线程的实现方案
    初识多线程
    《文献管理与信息分析》第一讲学习总结
    《构建之法》第一章读书摘要
    Total Commander的初次体验
    学习《深入理解计算机系统》第一章摘要
    Vim编辑器的学习
    关于《文献管理与信息分析》的一些问题
    阅读《构建之法》后所产生的问题
    阅读《深入理解计算机系统(第三版)》产生的一些疑惑和困惑
  • 原文地址:https://www.cnblogs.com/hackpig/p/1668377.html
Copyright © 2020-2023  润新知