100分求ADSI接口查询活动目录中用户的写法 要用delphi编写,使用adsi com接口,查询AD中某一用户是否存在和是否禁用,域名tm,AD路径:'WinNT://tm',不用ldap 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 參考下uses ActiveX, // 使用了COM Moniker实例 ActiveDs_TLB, // 已创建的类库 ComObj; // 使用了OleCheck和其他COM函数implementation procedure TForm1.BtnCreateUserClick(Sender: TObject); var Usr: IADsUser; Comp: IADsContainer; begin try Comp := GetObject(WinNT://[computername],computer) as IADsContainer; Usr := Comp.Create(user, [accountname]) as IADsUser; Usr.SetInfo; except on E: EOleException do begin ShowMessage(E.Message); end; end; end; procedure TForm1.BtnSetPasswordClick(Sender: TObject); var Usr: IADsUser; begin try Usr := GetObject(WinNT://[computername]/[accountname],user) as IADsUser; Usr.SetPassword(thenewpassword); except on E: EOleException do begin ShowMessage(E.Message); end; end; end; // GetObject是在Usenet上找到的VB代码(GetObject)。// // GetObject能使用“ADSIPath”(如WinNT://....或IIS://localhost)// 和现有的ADSI提供者捆绑在一起function TForm1.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; end. 也能使用ADSI修改用户帐号的设置。下列代码能改动所有帐号的“密码永不过期”选项。procedure TFormMain.ButtonNeverExpiresClick(Sender: TObject); var Usr: IADsUser; begin try Usr := GetObject(WinNT://[computername]/[acccoutname],user) as IADsUser; // 检查Checkbox的状态 if CheckBoxPasswordNeverExpires.Checked then Usr.Put(UserFlags, Usr.Get(UserFlags) OR 65536) // 65536在微软ADSI SDK的iads.h中被定义为UF_DONT_EXPIRE_PASSWORD else Usr.Put(UserFlags, Usr.Get(UserFlags) XOR 65536); Usr.SetInfo; except on E: EOleException do begin ShowMessage(E.Message); end; end; end; http://download.csdn.net/source/1462183下载这个代码看看,是关于windows用户的,不知道满不满足你的要求 以下链接是有关ADSI的详细说明,可以解决你的问题http://www.agnisoft.com/white_papers/active_directory.asp 问个FTP下载的问题 一个SQL语句错误:InsUserQuery:Missing SQL property 怎样捕获单击Treeview一个结点(不是其它区域)的事件? 请教各位:两个问题,急!!! 关于动态创建的问题 请问画完一幅图后如何檫掉画另外一幅图呢?????????? dbgrid中无数据显示的问题 这个问题怎么这么难? delphi中SQL操作的问题 小数点保留问题 关于线程和一小问题. 求助:cxgrid脚注处求平均值问题
uses ActiveX, // 使用了COM Moniker实例
ActiveDs_TLB, // 已创建的类库
ComObj; // 使用了OleCheck和其他COM函数implementation procedure TForm1.BtnCreateUserClick(Sender: TObject);
var
Usr: IADsUser;
Comp: IADsContainer;
begin
try
Comp := GetObject(WinNT://[computername],computer) as
IADsContainer;
Usr := Comp.Create(user, [accountname]) as IADsUser;
Usr.SetInfo;
except
on E: EOleException do begin
ShowMessage(E.Message);
end;
end;
end;
procedure TForm1.BtnSetPasswordClick(Sender: TObject);
var
Usr: IADsUser;
begin
try
Usr := GetObject(WinNT://[computername]/[accountname],user)
as IADsUser;
Usr.SetPassword(thenewpassword);
except
on E: EOleException do begin
ShowMessage(E.Message);
end;
end;
end;
// GetObject是在Usenet上找到的VB代码(GetObject)。
//
// GetObject能使用“ADSIPath”(如WinNT://....或IIS://localhost)
// 和现有的ADSI提供者捆绑在一起
function TForm1.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; end. 也能使用ADSI修改用户帐号的设置。下列代码能改动所有帐号的“密码永不过期”选项。procedure TFormMain.ButtonNeverExpiresClick(Sender: TObject);
var
Usr: IADsUser;
begin
try
Usr := GetObject(WinNT://[computername]/[acccoutname],user) as IADsUser;
// 检查Checkbox的状态
if CheckBoxPasswordNeverExpires.Checked then
Usr.Put(UserFlags, Usr.Get(UserFlags) OR 65536)
// 65536在微软ADSI SDK的iads.h中被定义为UF_DONT_EXPIRE_PASSWORD
else
Usr.Put(UserFlags, Usr.Get(UserFlags) XOR 65536);
Usr.SetInfo; except
on E: EOleException do begin
ShowMessage(E.Message);
end;
end;
end;
下载这个代码看看,是关于windows用户的,不知道满不满足你的要求
http://www.agnisoft.com/white_papers/active_directory.asp