用注冊表給應用程序加口令
幾乎每個應用系統都有相應的權限管理功能。對于大型多用戶應用系統,一般是將權限設置保存在數據庫中。但是對于小型的單用戶應用系統和非數據庫應用系統,就沒有必要將權限設置保存在數據庫中,但是用文件來保存既不方便又不安全,因為文件很可能被刪除或毀壞。其實,靈活地利用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("SOFTWAREMicroSoftwhh726",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("SOFTWAREMicroSoftwhh726",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("SOFTWAREMicroSoftwhh726",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; end; |