支持掩码输入的 .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;
        }

    }

}

信号、信号集、信号掩码、信号处理

一、信号的概念:信号时发给进程的特殊消息,当进程收到xinhai
  • vvvbird
  • vvvbird
  • 2014年11月23日 11:41
  • 997

矩阵的掩码操作

在矩阵上进行掩码操作很简单,主要的思想就是根据一个掩码矩阵(也称为核)去重新计算一幅图像中的每一个像素值。这个掩码矩阵里面的值将决定临近的像素对新像素值的影响多大。从数学的观点上来看,我们利用我们给定...
  • jameshater
  • jameshater
  • 2016年02月29日 11:03
  • 1160

位掩码的介绍与使用

位掩码的介绍与使用一、小白鼠试毒有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,问至少要多少只小白鼠才能在24小时鉴别出哪瓶水有毒,刚看类似的问题,一般人一定是一脸懵逼的状...
  • huqiongailei
  • huqiongailei
  • 2017年05月21日 13:24
  • 1331

java中位掩码的作用

java中有个类,叫DefaultButtonModel,其中用到了位掩码,至少我理解是位掩码 /** * The default implementation of a Button compon...
  • zz89522186
  • zz89522186
  • 2013年11月19日 21:32
  • 1283

OpenCV 对图像进行掩码操作

掩码操作是根据核来重新计算每个像素点的值,也就是对该像素点根据周围的像素点做一个加权平均。 就以增强图片对比对来展示吧,使用的是下面的这个公式: 利用指针,通过函数实现:void Sharpe...
  • qq_22033759
  • qq_22033759
  • 2015年09月02日 00:29
  • 3013

Java位运算在程序设计中的使用:位掩码(BitMask)

在Java中,位运算符有很多,例如与(&)、非(~)、或(|)、异或(^)、移位(>)等。这些运算符在日常编码中很少会用到。 在下面的一个例子中,会用到位掩码(BitMask),其中包含大量的位...
  • findsafety
  • findsafety
  • 2016年09月21日 10:55
  • 520

关于标准ACL的反掩码使用方法

近来通过学习Cisco的标准ACL发现该ACL有两个
  • u013047651
  • u013047651
  • 2014年04月06日 12:06
  • 1942

OpenCV学习笔记(五)图像掩码操作

图像掩码操作 图像的掩码操作是指通过掩码核算子重新计算图像中各个像素的值,掩码核算子刻画领域像素点对新像素值得影响程度,同时根据掩码算子中权重因子对像素点进行加权平均。图像掩码操作常用于图像平滑、边...
  • spw_1201
  • spw_1201
  • 2016年12月10日 13:50
  • 1675

linux下的getch模拟(无回显读取字符)

我们知道getchar()函数可以读取一个字符,但是必须在按下回车键之后字符才会从缓冲区送给程序。如何在linux终端里实现无回显读取字符呢?下面的代码给出了一个简单有效的实现。 #include ...
  • u014495327
  • u014495327
  • 2014年04月02日 17:42
  • 1416

图像掩码操作的两种实现

#include #include #include #include #include using namespace cv; using namespace s...
  • Gone_HuiLin
  • Gone_HuiLin
  • 2016年11月18日 20:50
  • 599
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:支持掩码输入的 .Net 2.0 Console 可用于使用掩码回显 password 的字符
举报原因:
原因补充:

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