delphi imoniker 在哪个单元

 我来答
受司大人
推荐于2016-07-19 · 知道合伙人影视综艺行家
受司大人
知道合伙人影视综艺行家
采纳数:20253 获赞数:171848
毕业于浙江广厦,有一定的电脑专业基础和两年工作经验,读过相关书籍多本

向TA提问 私信TA
展开全部
活动目录Active Directory是用于Windows Server的目录服务,它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用。Active Directory使用结构化的数据存储作为目录信息的逻辑层次结构的基础。
在某些情况下我们需要通过程序来读取Active Directory中的信息,我们可以使用微软提供的ADSI(Active Directory Services Interface)。ADSI是一组以COM接口形式提供的目录 服务,因此任何支持COM编程的语言如Delphi、VB、VC等都可以使用ADSI。
在Delphi中使用ADSI需要导入活动目录类型库,具体操作如下:在IDE中选择菜单“Project->Import Type Library”,在弹出的对话框中选择“Active Ds Type Libarary(version 1.0)”,单击“Create Unit”,Delphi会自动产生封装单元文件。只要在相应文件中引用该单元文件即可使用ADSI了。下面给出一个在Delphi6中使用ADSI访问Windows Server活动目录信息的示例代码。
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActiveDs_TLB, ActiveX, ComObj, ComCtrls, StdCtrls;

type
TForm2 = class(TForm)
GroupBox1: TGroupBox;
lvGroup: TListView;
GroupBox2: TGroupBox;
lvUser: TListView;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetObject(const Name: String): IDispatch;
procedure EnumerateUsers(Container: IAdsContainer);
procedure AddGroupToListView(AGroup: IADsGroup);
procedure AddUserToListView(AUser: IAdsUser);
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

procedure TForm2.AddGroupToListView(AGroup: IADsGroup);
begin
lvGroup.Items.Add.Caption := AGroup.Name;
end;

procedure TForm2.AddUserToListView(AUser: IAdsUser);
begin
with lvUser.Items.Add do begin
Caption := AUser.FullName;
SubItems.Add(VarToStr(AUser.Get('sAMAccountName')));
end;
end;

procedure TForm2.EnumerateUsers(Container: IAdsContainer);
var
ADsObj: IADs;
Value: LongWord;
Enum: IEnumVariant;
ADsTempOjb: OleVariant;
begin
Enum :=(Container._NewEnum) as IEnumVariant;
while (Enum.Next(1, ADsTempOjb, Value) = S_OK) do begin
ADsObj := IUnknown(ADsTempOjb) as IADs;
try
if SameText(ADsObj.Class_, 'Group') then begin
AddGroupToListView(ADsObj as IADsGroup);
EnumerateUsers(ADsObj as IAdsContainer);
end
else if SameText(ADsObj.Class_, 'User') then
AddUserToListView(ADsObj as IADsUser);
except
end;
end;
end;

function TForm2.GetObject(const Name: String): IDispatch;
var
Eaten: Integer;
Moniker: IMoniker;
BindContext: IBindCtx;
begin
OleCheck(CreateBindCtx(0, BindContext));
OleCheck(MkParseDisplayName(BindContext, PWideChar(WideString(Name)), Eaten, Moniker));
OleCheck(Moniker.BindToObject(BindContext, Nil, IDispatch, Result));
end;

procedure TForm2.Button1Click(Sender: TObject);
var
Container: IADsContainer;
begin
Container := GetObject('LDAP://OU=Suzhou,OU=root,DC=ap,DC=emersonclimate,DC=org') as IADsContainer;
lvGroup.Items.BeginUpdate;
lvUser.Items.BeginUpdate;
try
Button1.Enabled := False;
EnumerateUsers(Container);
Button1.Enabled := True;
finally
lvGroup.Items.EndUpdate;
lvUser.Items.EndUpdate;
end;
Container._Release;
end;

end.
无耻之徒的徒弟
2023-01-19 · TA获得超过761个赞
知道小有建树答主
回答量:195
采纳率:75%
帮助的人:36.5万
展开全部
uses
ActiveX
就这么简单,就是这个,这后面的就是为了凑字数,系统不让我发。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式