超级DIY 用注册表给应用程序加口令

  •   2009-07-28/13:33
  • 作者: 王洪海 出处: 天极网

    几乎每个应用系统都有相应的权限管理功能。对于大型多用户应用系统,一般是将权限设置保存在数据库中。但是对于小型的单用户应用系统和非数据库应用系统,就没有必要将权限设置保存在数据库中,但是用文件来保存既不方便又不安全,因为文件很可能被删除或毁坏。其实,灵活地利用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)$#@60;=0) and (length(sPass)$#@60;=0)) then
    result := true ;
    RegF.Free;
    end;

    //判断用户名和口令是否正确
    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 ee;
    end;

    //保存用户名和口令
    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;

    //取消按纽事件
    procedure TWszLoginForm.BitBtnCloseClick(Sender: TObject);
    begin
    Close;
    end;

    //确定按纽事件
    procedure TWszLoginForm.BitBtnYesClick(Sender: TObject);
    var
    suser:string;
    spass:string;
    begin
    suser := trim(edituser.text);
    spass := trim(editpass.text);
    if (length(suser)$#@60;=0) or (length(spass)$#@60;=0) then
    begin
    Application.MessageBox("用户名和口令都必须输入!", "系统提示",
    MB_OK + MB_ICONINFORMATION);
    edituser.SetFocus ;
    exit;
    end;
    if Wsz_IfFirst then
    begin

    //处理第一次登录的用户名和口令
    if Application.MessageBox(
    "您是第一次使用本软件,请记住您的用户名和口令,以便下次登录。现在进入系统吗?",
    "系统提示",
    MB_OKCANCEL + MB_ICONQUESTION) = IDOK then
    begin

    //保存
    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;

    //全局变量
    GB_Wsz_User := suser;
    GB_Wsz_PASS := spass;
    Close;
    end;

    //窗体的Show事件
    procedure TWszLoginForm.FormShow(Sender: TObject);
    begin
    if Wsz_IfFirst then
    begin
    Application.MessageBox(
    "您是第一次使用本软件,您可以随便输入用户名和口令。",
    "系统提示",
    MB_OK + MB_ICONINFORMATION);
    end;
    end;


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多