天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧软件 >> 正文

运用注册表给系统应用程序加口令

2011-1-19不详佚名

几乎每个应用系统都有相应的权限管理功能。对于大型多用户应用系统,一般是将权限设置保存在数据库中。但是对于小型的单用户应用系统和非数据库应用系统,就没有必要将权限设置保存在数据库中,但是用文件来保存既不方便又不安全,因为文件很可能被删除或毁坏。其实,灵活地利用Windows注册表的特点,可以很方便地为应用系统设置用户名和口令,这种方法不但编程简便,而且安全性比较高。下面举例说明,该例程在Windows98,Delphi4环境下调试通过。   

设计流程为:先判断是否为第一次使用,如果为第一次使用,则要求设置新的用户名和口令,系统将用户名和口令保存起来;如果不是第一次使用,则要求输入用户名和口令才能登录。   

在Delphi开发环境中,新建一个工程Project1,在Project1中增加一个窗体Form1;在Form1上增加两个按纽,一个为确定,另一个为取消;再在Form1上增加两个Text框EditUser和EditPass,分别为用户名和口令输入框。定义窗体级全局变量RegF:TRegistry。并在interface的Uses中加上Registry。 

增加函数Wsz_IfFirst,判断是否是第一次使用;增加过程Wsz_SaveUse,保存用户名和口令;增加函数Wsz_CheckUser,判断用户名和口令是否正确。然后在Form1的FormShow事件和确定按纽事件中分别调用这三个函数和过程,达到设计要求。   

//判断是否是第一次使用 

function Wsz_IfFirst:Boolean; 

var 

sUser:string; 

sPass:string; 

begin 

result := false; 

RegF:=TRegistry.Create; 

RegF.RootKey :=HKEY_LOCAL_MACHINE; 

RegF.OpenKey("SOFTWARE\MicroSoft\whh726",TRUE); 

sUser := RegF.ReadString("user"); 

sPass := RegF.ReadString("pass"); 

if ((length(sUser)<=0) and (length(sPass)<=0)) then 

result := true ; 

RegF.Free; 

end; 

file://判断用户名和口令是否正确 

function Wsz_CheckUser(MyUser:string;MyPass :string):Boolean; 

var 

sUser:string; 

sPass:string; 

begin 

result:= false; 

RegF:=TRegistry.Create; 

RegF.RootKey :=HKEY_LOCAL_MACHINE; 

RegF.OpenKey("SOFTWARE\MicroSoft\whh726",TRUE); 

sUser := RegF.ReadString("user"); 

sPass := RegF.ReadString("pass"); 

if (sUser=MyUser) and (sPass=MyPass) then 

result := true; 

RegF.Free; 

end; 

file://保存用户名和口令 

procedure Wsz_SaveUser(MyUser:string;MyPass :string); 

begin 

RegF:=TRegistry.Create; 

RegF.RootKey :=HKEY_LOCAL_MACHINE; 

RegF.OpenKey("SOFTWARE\MicroSoft\whh726",TRUE); 

RegF.WriteString("user",MyUser); 

RegF.WriteString("pass",MyPass); 

RegF.Free; 

end; 

file://取消按纽事件 

procedure TWszLoginForm.BitBtnCloseClick(Sender: TObject); 

begin 

Close; 

end; 

file://确定按纽事件 

procedure TWszLoginForm.BitBtnYesClick(Sender: TObject); 

var 

suser:string; 

spass:string; 

begin 

suser := trim(edituser.text); 

spass := trim(editpass.text); 

if (length(suser)<=0) or (length(spass)<=0) then 

begin 

Application.MessageBox("用户名和口令都必须输入!", 

"系统提示", 

MB_OK + MB_ICONINFORMATION); 

edituser.SetFocus ; 

exit; 

end; 

if Wsz_IfFirst then 

begin 

file://处理第一次登录的用户名和口令 

if Application.MessageBox( 

"您是第一次使用本软件,请记住您的用户名和口令, 

以便下次登录。现在进入系统吗?", 

"系统提示", 

MB_OKCANCEL + MB_ICONQUESTION) = IDOK then 

begin 

file://保存 

Wsz_SaveUser(suser,spass); 

end 

else 

begin 

edituser.SetFocus ; 

exit; 

end; 

end else 

begin 

if not Wsz_CheckUser(suser,spass) then 

begin 

Application.MessageBox 

("对不起,用户名和口令输入不正确!", "系统提示", 

MB_OK + MB_ICONINFORMATION); 

edituser.setfocus ; 

exit; 

end; 

end; 

file://全局变量 

GB_Wsz_User := suser; 

GB_Wsz_PASS := spass; 

Close; 

end; 

file://窗体的Show事件 

procedure TWszLoginForm.FormShow(Sender: TObject); 

begin 

if Wsz_IfFirst then 

begin 

Application.MessageBox( 

"您是第一次使用本软件,您可以随便输入用户名和口令。", 

"系统提示", 

MB_OK + MB_ICONINFORMATION); 

end; 

本文来源:不详 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。文章是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 Email:support@txwb.com,系统开号,技术支持,服务联系微信:_WX_1_本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行