支持掩码输入的 .Net 2.0 Console 可用于使用掩码回显 password 的字符

原创 2007年09月28日 16:53:00
 .Net 1.1 下无法实现,终于在 .Net 2.0 可以解决了:

参阅了:
http://msdn2.microsoft.com/en-US/library/aa480477.aspx

增加了对: 方向键、Home键、End键 移动光标后插入字符的支持
增加了对: Delete键删除光标所在字符的支持

namespace Microshaoft
{
    
using System;
    
public class Class1
    
{
        
static void Main(string[] args)
        
{
            Console.WriteLine(
"Enter password:");
            
string password = ConsoleReadMaskLine('*',true);
            Console.WriteLine(
"/n" + password + "]");
            password 
= ConsoleReadMaskLine('%',false);
            Console.WriteLine(
"/n" + password + "]");
        }


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

    }

}

相关文章推荐

如何使用掩码格式化文本框

  • 2009年07月06日 11:44
  • 36KB
  • 下载

Asp.net 2.0 自定义伪静态源码

根据微软官方伪静态UrlRewrite.dll源码,自己改写应用进项目中。  1、首先,我们写个用于HttpModule请求的类 RolesProvider using System; us...
  • ysn1314
  • ysn1314
  • 2014年08月22日 17:08
  • 512

ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)

学习整理了一下 (一).功能         用HttpHandler实现图片验证码          (二).代码如下    1. 处理程序文件 ValidateImageH...

用mask掩码处理图片,Mat::copyTo函数第一个用于输出的传入参数不能是原图片

例如src.copyTo(src,mask)是绝对不能成功的。原本只想把理由粗略说一下,但是后来想一想看一看源代码还是有好处的,于是去源代码里面看了看,怎么知道由于本人的过于才疏学浅,就这么一看就看了...
  • jdpshq
  • jdpshq
  • 2013年06月02日 18:13
  • 10341

IP地址/子网掩码解析类(仅支持C类IP)

public class IPSubnetUtil { public static final String IPADDRESS_REGEX = "(((2[0-4]\\d)|(25[0-5]))|...

access 中有时候输入需要掩码

access 中有时候输入需要掩码。同时想保存掩码中的符号比如   9999-99-99;0;   第一个分隔号后面必须要加0才会保存”-“ 这个号。   一下为MSDN内容 InputMas...
  • yilin54
  • yilin54
  • 2011年08月19日 13:55
  • 3092

OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))

Mat - 基本图像容器 目的 从真实世界中获取数字图像有很多方法,比如数码相机、扫描仪、CT或者磁共振成像。无论哪种方法,我们(人类)看到的是图像,而让数字设备来“看“的时候,则是在记录图像中的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:支持掩码输入的 .Net 2.0 Console 可用于使用掩码回显 password 的字符
举报原因:
原因补充:

(最多只允许输入30个字)