コード例 #1
0
        protected static string ReadPassword()
        {
            var pwd      = new Stack <char>();
            var filtered = new ConsoleKey[] { ConsoleKey.Tab, ConsoleKey.Spacebar, ConsoleKey.Enter, ConsoleKey.Escape };

            ConsoleKeyInfo key;

            do
            {
                key = Console.ReadKey(true);

                // ctrl+backsp
                if (key.Key == ConsoleKey.Backspace && key.Modifiers.HasFlag(ConsoleModifiers.Control))
                {
                    while (pwd.Count > 0)
                    {
                        Console.Write("\b \b");
                        pwd.Pop();
                    }
                }
                // backsp
                else if (key.Key == ConsoleKey.Backspace)
                {
                    if (pwd.Count > 0)
                    {
                        Console.Write("\b \b");
                        pwd.Pop();
                    }
                }
                // '\u0000' if the key pressed does not correspond to a printable character, e.g. F1, Pause-Break, etc
                else if (key.KeyChar != '\u0000' && !filtered.Any(k => k == key.Key))
                {
                    pwd.Push(key.KeyChar);
                    Console.Write("*");
                }
            } while (key.Key != ConsoleKey.Enter);

            Console.WriteLine();

            return(new string(pwd.Reverse().ToArray()));
        }