delphi imoniker 在哪个单元

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi imoniker 在哪个单元相关的知识,希望对你有一定的参考价值。

活动目录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.
参考技术A uses
ActiveX
就这么简单,就是这个,这后面的就是为了凑字数,系统不让我发。

1,Delphi 生成的EXE 文件输出在哪个目录?如何改变?

你写一个简单的delphi程序,比如就在窗体上放一个标签和一个按钮,双击按钮,在代码编辑器的光标所在处,写上一名代码label1.Caption:=\'录制库房物品出库单\';然后按集成开发环境(IDE)菜单上的保存按钮,delphi会跳出保存路径对话框,在这个对话框中,你可以像保存WORD文档一样,选择保存文件的路径直到某个文件夹,第一下保存的是单元文件名,你可以使用默认文件名,也可以写一个不以数字开头的文件名,保存之后,会再次跳出一个保存对话框,这次是保存工程文件名,命名不要与单元文件名同名,也不要用数字打头.两次保存的位置要保持一样(最好),然后按一下DELPHI工具栏上的绿色三角形按钮,如果没有错误,运行窗体 就出现了,你可以按一下上面你放的那个按钮,标签上的字是不是改变了呢?关闭你的程序,到你刚才保存的文件的文件夹,是不是多了很多文件呢?看看文件的扩展名,里面是不是有一个与工程文件名相同的.EXE文件呢?在这些文件只有一个文件是你写过的,这就是.PAS文件,也单元文件,其它文件都是DELPHI自动生成的.你不要管它,也不要删除它.做一个程序最好新键一个文件夹,比如"水费收费软件",所有程序文件都放在这个文件夹内,在电脑中你可以随意的移动这个文件夹,甚至放到U盘上也可以,只要你在DELPHI的打开文件对话框中能找到它(工程文件名).如果要运行你的程序,你可以什么文件都不要,只要那个.EXE文件,把它考下来,用U盘装着,到任何WIN系统的机器上都可运行.当然如果有数据库,那就要保持原有保存路径,连同文件夹一起考到U盘上,这是后话. 参考技术A project菜单 点选项属性 找到director页签 第一栏输入框就是exe或dll
的输出目录。
参考技术B 当前目录,可以配置output 目录

以上是关于delphi imoniker 在哪个单元的主要内容,如果未能解决你的问题,请参考以下文章

delphi7.0中全部都有哪些单元?越多越好

delphi stringGrid

delphi中如何把有规律的文本文字放入STRINGGRID中的每个单元格中

1,Delphi 生成的EXE 文件输出在哪个目录?如何改变?

在Delphi的窗口单元中,如何调用其它窗口的单元。

delphi 如何将form2的值传递form1