delphi编程验证域用户
10 |
[ '{987EAEB0-EDC4-4F77-852D-7C14418D549D}' ] |
11 |
procedure SetDomain(DomainName: string ); |
12 |
function GetDomain: string ; |
13 |
function CheckLogin(UserName, Password: string ; var ErrorMsg: string ): Boolean ; |
18 |
TLogin = class (TComponent, ILogin) |
20 |
FUserPassword: string ; |
25 |
function GetCanLogin: Boolean ; virtual; |
27 |
procedure SetDomain(sDomainName: string ); virtual; |
28 |
function GetDomain: string ; |
29 |
function CheckLogin(sUserName, sPassword: string ; var ErrorMsg: string ): Boolean ; virtual; |
31 |
constructor Create(AOwner: TComponent); override; |
32 |
destructor Destroy; override; |
34 |
property DomainName: string read FDomainName write FDomainName; |
35 |
property UserName: string read FUserName write FUserName; |
36 |
property UserPassword: string read FUserPassword write FUserPassword; |
37 |
property CanLogin: Boolean read GetCanLogin; |
44 |
function TLogin . CheckLogin(sUserName, sPassword: string ; var ErrorMsg: string ): Boolean ; |
46 |
FUserName := sUserName; |
47 |
FUserPassword := sPassword; |
49 |
ErrorMsg := FErrorMsg; |
52 |
constructor TLogin . Create(AOwner: TComponent); |
54 |
inherited Create(AOwner); |
58 |
destructor TLogin . Destroy; |
64 |
function TLogin . GetCanLogin: Boolean ; |
70 |
function TLogin . GetDomain: string ; |
72 |
Result := FDomainName; |
75 |
procedure TLogin . SetDomain(sDomainName: string ); |
77 |
FDomainName := sDomainName; |
[dephi]unit uADLogin;
interface
uses SysUtils, Classes, uLoginIntf;
type TADLogin = class(TLogin) protected function GetCanLogin: Boolean; override; end;
implementation
uses ComObj, ActiveX;
function GetObject(const Name: string): IDispatch; var Moniker: IMoniker; Eaten: Integer; BindContext: IBindCtx; Dispatch: IDispatch; begin OleCheck(CreateBindCtx(0, BindContext)); OleCheck(MkParseDisplayName(BindContext, PWideChar(WideString(Name)), Eaten, Moniker)); OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch, Dispatch));
Result := Dispatch; end;
{ TADLogin }
function TADLogin.GetCanLogin: Boolean; const C_WINNT_ROOT = ‘WinNT:’; var oADSI, oIIS: Variant; sUser, sPassword: string; begin Result := inherited GetCanLogin; try sUser := DomainName + ‘\’ + UserName; sPassword := UserPassword; oADSI := GetObject(C_WINNT_ROOT);
oIIS := oADSI.OpenDSObject(C_WINNT_ROOT + ‘//’ + DomainName, sUser, sPassword, 0); Result := True; except on E: Exception do begin FErrorMsg := E.Message; end; end; end;
end.
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ActiveDs_TLB, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) btn1: TButton; Edit1: TEdit; Edit2: TEdit; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation {$R *.DFM} uses uADLogin;
function CheckADLogin(UserName, Password: string; DomainName: string; var ErrorMsg: string): Boolean; var AAL: TADLogin; begin Result := False;
AAL := TADLogin.Create(nil); try AAL.SetDomain(DomainName); Result := AAL.CheckLogin(UserName, Password, ErrorMsg); finally FreeAndNil(AAL); end; end;
procedure TForm1.btn1Click(Sender: TObject); var sError: string; begin if CheckADLogin(Edit1.Text, Edit2.Text, ‘’, sError) then ShowMessage(‘登陆成功~!’) else ShowMessage(sError);
end;
end.
|