RAS ADSL Dial 宽带 拨号


namespace Microshaoft
{
    using System;
    using RAS;
    public class Class1
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World");
            Console.WriteLine(Environment.Version.ToString());
            Console.WriteLine("Pls Input EntryName (网络连接名称):");
            string EntryName = Console.ReadLine();
            Console.WriteLine("Pls Input UserName (用户名):");
            string UserName = Console.ReadLine();
            Console.WriteLine("Pls Input Password (密码):");
            string Password = ConsoleReadMaskLine('*',true);
            RasManager rm = new RasManager();
            rm.EntryName = EntryName; // entry name in phonebook
            rm.UserName = UserName;
            rm.Password = Password;
            int r = -1;
            r = rm.Connect();
            string s = "失败";
            if (r == 0)
            {
                s = "成功";
            }
            Console.WriteLine("\n网络连接: \"{0}\" 拨号上网{1},Result: {2}", EntryName, s, r);
            Console.ReadLine();
        }
        public static string ConsoleReadMaskLine
            (
                char PasswordChar
                , bool WithMask
            )
        {
            string password = "";
            ConsoleKey ck;
            string s = @"~!@#$%&*()_+`1234567890-="; //可输入字符
            s += @"QWERTYUIOP{}|qwertyuiop[]\";
            s += "ASDFGHJKL:\"asdfghjkl;'";
            s += "ZXCVBNM<>?zxcvbnm,./ ";
            do
            {
                ConsoleKeyInfo cki = Console.ReadKey(true);
                char c = cki.KeyChar;
                ck = cki.Key;
                int p = Console.CursorLeft;
                if (ck == ConsoleKey.Backspace)
                {
                    string left = "";
                    if (p > 0)
                    {
                        left = password.Substring(0, p - 1);
                    }
                    string right = password.Substring(p);
                    password  = left + right;
                    Console.Write(c);
                    string output = right;
                    if (WithMask)
                    {
                        output = GetPasswordChars(right, PasswordChar);
                    }
                    output += "\0";
                    Console.Write(output);
                    if (p > 0)
                    {
                        p --;
                    }
                }
                else if (ck == ConsoleKey.Delete)
                {
                    string left = "";
                    if (p > 0)
                    {
                        left = password.Substring(0, p);
                    }
                    string right = "";
                    if (p < password.Length)
                    {
                        right = password.Substring(p + 1);
                    }
                    password = left + right;
                    //Console.Write(right + " ");
                    string output = right;
                    if (WithMask)
                    {
                        output = GetPasswordChars(right, PasswordChar);
                    }
                    output += "\0";
                    Console.Write(output);
                }
                else
                {
                    if (s.IndexOf(c) >= 0)
                    {
                        string left = password.Substring(0, p);
                        string right = password.Substring(p);
                        password = left + c + right;
                        string output = c + right;
                        if (WithMask)
                        {
                            output = GetPasswordChars(c + right, PasswordChar);
                        }
                        Console.Write(output);
                        p ++;
                    }
                    else
                    {
                        switch (ck)
                        {
                            case ConsoleKey.LeftArrow :
                                if (p > 0)
                                {
                                    p --;
                                }
                                break;
                            case ConsoleKey.RightArrow :
                                if (p < password.Length)
                                {
                                    p ++;
                                }
                                break;
                            case ConsoleKey.Home :
                                p = 0;
                                break;
                            case ConsoleKey.End :
                                p = password.Length;
                                break;
                            default :
                                Console.Beep();
                                break;
                        }
                    }
                }
                Console.CursorLeft = p;
            } while (ck != ConsoleKey.Enter);
            return password;
        }
        private static string GetPasswordChars(string s, char c)
        {
            string passwordChars = "";
            for (int i = 0; i < s.Length; i++)
            {
                passwordChars += c;
            }
            return passwordChars;
        }
    }
}
namespace RAS
{
    using System;
    using System.Runtime.InteropServices;
    public class RasManager
    {
        public const int RAS_MaxEntryName = 256;
        public const int RAS_MaxPhoneNumber = 128;
        public const int UNLEN = 256;
        public const int PWLEN = 256;
        public const int DNLEN = 15;
        public const int MAX_PATH = 260;
        public const int RAS_MaxDeviceType = 16;
        public const int RAS_MaxCallbackNumber = RAS_MaxPhoneNumber;
        public delegate void Callback(uint unMsg, int rasconnstate, int dwError);
        [StructLayout(LayoutKind.Sequential, Pack = 4,CharSet = CharSet.Auto)]
        public struct RASDIALPARAMS
        {
            public int dwSize;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxEntryName + 1)]
            public string szEntryName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst= RAS_MaxPhoneNumber + 1)]
            public string szPhoneNumber;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst= RAS_MaxCallbackNumber + 1)]
            public string szCallbackNumber;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst= UNLEN + 1)]
            public string szUserName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst= PWLEN + 1)]
            public string szPassword;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst= DNLEN + 1)]
            public string szDomain;
            public int dwSubEntry;
            public int dwCallbackId;
        }

        [DllImport("rasapi32.dll", CharSet=CharSet.Auto)]
        public static extern int RasDial
                                    (
                                        int lpRasDialExtensions
                                        , string lpszPhonebook
                                        , ref RASDIALPARAMS lprasdialparams
                                        , int dwNotifierType
                                        , Callback lpvNotifier
                                        , ref int lphRasConn
                                    );

        private RASDIALPARAMS RasDialParams;
        private int Connection;
        public RasManager()
        {
            Connection = 0;
            RasDialParams = new RASDIALPARAMS();
            RasDialParams.dwSize = Marshal.SizeOf(RasDialParams);
        }

        #region Properties
        public string UserName
        {
            get
            {
                return RasDialParams.szUserName;
            }
            set
            {
                RasDialParams.szUserName = value;
            }
        }
        public string Password
        {
            get
            {
                return RasDialParams.szPassword;
            }
            set
            {
                RasDialParams.szPassword = value;
            }
        }

        public string EntryName
        {
            get
            {
                return RasDialParams.szEntryName;
            }
            set
            {
                RasDialParams.szEntryName = value;
            }
        }
        #endregion

        public int Connect()
        {
            Callback rasDialFunc = new Callback(RasManager.RasDialFunc);
            RasDialParams.szEntryName += "\0";
            RasDialParams.szUserName += "\0";
            RasDialParams.szPassword += "\0";
            int result = RasDial (0, null, ref RasDialParams, 0, rasDialFunc, ref Connection);
            return result;
        }
        public static void RasDialFunc
                                (
                                    uint unMsg
                                    , int rasconnstate
                                    , int dwError
                                )
        {
            Console.WriteLine
                        (
                            "CallBack: unMsg={0},rasconnstate={1},dwError={2}"
                            , unMsg
                            , rasconnstate
                            , dwError
                        );
        }
    }
}

posted @ 2009-01-04 23:55  于斯人也  阅读(5823)  评论(0编辑  收藏  举报