用for 语句和getch( );putchar (‘*’);来实现的,而getch 不分区另ENTER和BACKSPACE等特殊键,不好控制它的结束。因此只有避过问题强行规定密码必须是8位的,但在输入密码时仍然不允许用户输入ENTER和BACKSPACE等特殊键。
以下程序功能:
接受所有打印字符。
不接受控制字符,如Ctrl+ ,Alt,F1等。
可使用退格键删除以输入字符。
回车键为密码输入完毕
可定义最大字符数。当输入字符数等于最大字符个数时,视为密码结束。
#include <stdio.h> 。
#include <conio.h> 。
#define TRUE 1 。
#define FALSE 0 。
#define MIN_INPUT 0x20 。
#define MAX_INPUT 0x7e 。
/*
* 所有功能有此函数实现:
* pszPw : 保存密码的缓冲 。
* iMaxSize :最大的密码长度,该长度必须小于缓冲区大小。
* 返回值为TRUE为成功获取密码。总是返回TRUE 。
*/
int GetPassword(unsigned char* pszPw,int iMaxSize) 。
{
unsigned char ch; 。
int i=0;
int bIsEcho=TRUE; 。
//while( ! kbhit() && i<iMaxSize ) 。
while( ( ch = (unsigned char)getch() ) && i < iMaxSize ) 。
{
//ch = (unsigned char)getch(); 。
bIsEcho=TRUE;
if ( ch == 13) 。
{
pszPw[i++]=0;
break;
}
else if ( ch >= MIN_INPUT && ch <= MAX_INPUT) /*所有可打印字符*/ 。
{
pszPw[i++]=ch; 。
}
else if ( ch == 8 && i> 0 ) /*退格键*/ 。
{
pszPw[i--] = 0; 。
bIsEcho = FALSE; 。
putchar( ch ); 。
putchar( ' ' ); 。
putchar( ch ); 。
}
else
bIsEcho = FALSE; 。
if(bIsEcho)
putchar('*');
}
pszPw[i]=0;
return TRUE;
}
int main(void) 。
{
int iMaxSize=80; 。
unsigned char pw[99]; 。
if ( GetPassword(pw,iMaxSize) == TRUE ){ 。
printf("\npassword=%s",pw); 。
}
else{
printf("\nCan not get the password!"); 。
}
键盘上下左右 方向键的键码(keyCode)是38、40、37和39,或者称虚拟ASCII值是38、40、37和39。
下图是虚拟ASCII值:
keyCode(键码),指定与引发事件的键关联的Unicode的键码。此属性旨在与所述的onkeydown,的onkeyup和onkeypress事件的事件中使用。
句法:
object.keyCode[=keyCode]。
设置:
这个读写属性可以设置为Unicode代码。如果没有击键造成的事件是零。
VB6.0可用以下代码测试:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)。
Debug.Print KeyCode。
End Sub
参考:http://baike.baidu.com/link?url=z9Q9IcvNHtfWAcNwsIGH1d5tfJPLBT8JFxhO2btWaxDNYTnXujcRhjWApwSsoNPuyFKP1nZuS2LREZy-otw_Gm64LFqTa1G__-CtMh64CxQ0l3NzI50QTsQcRv8PA7hYpTdGhyab6c-uZg1d2vWdGK。
你好楼主,前一阵正好研究了一下linux串口编程,苦恼了一阵,不过总算弄通了,下面说一下我的思路和理解。
struct termios state; 这是一个设计到串口属性的结构体,通过给结构体内的属性赋值来设计串口。
的一些属性。
tcgetattr (STDIN_FILENO,。