[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
        );
        //获取当前创建的adsl宽带列表        public string[] adsllist()
        {
            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 = 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 = RasEnumEntries(null, null, names, ref lpSize, out lpNames);
            }
            string[] keysList = new string[names.Length];
            if (lpNames > 0)
            {
                for (int i = 0; i < names.Length; i++)
                {
                    keysList[i] = (names[i].szEntryName);
                }
            }            return keysList;
        }
        [DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue);        private static int currentTry = 0;
        public static bool IsConnected(out string ip, out string head)
        {            ip = "";
            head = "";
            //try
            //{
            currentTry++;
            HttpHelper http = new HttpHelper();
            string url = "http://iframe.ip138.com/ic.asp";
            http.timeout = 60000;
            string result = http.GetHtml(url);
            string regexStr = "(?<ip1>[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})(?<ip2>\\.[0-9]{1,3})";
            Regex r = new Regex(regexStr, RegexOptions.IgnoreCase);
            MatchCollection M = r.Matches(result);
            if (M.Count > 0)
            {
                ip = M[0].Groups["ip1"].Value + M[0].Groups["ip2"].Value;
                head = M[0].Groups["ip1"].Value;
                currentTry = 0;
                return true;
            }
            else if (currentTry < 3)
            {
                Thread.Sleep(1000);
                return IsConnected(out ip, out head);
            }
            else
            {
                currentTry = 0;
                return false;
            }
            //}
            //catch (Exception)
            //{            //    return false;
            //}        }  

解决方案 »

  1.   

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

  2.   

    你好 大哥 ~可以给QQ 我在不懂的地方询问下您么?可以的话~~~马上加下小弟QQ52115288 不甚感激。。