国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

在Delphi中ADSI創建Windows用戶帳號

2019-11-18 18:25:38
字體:
來源:轉載
供稿:網友
      在Delphi中可以使用微軟的ADSI(活動目錄服務接口)創建Windows用戶帳號。可能是由于ADSI的名字,許多人以為ADSI只能在Windows 2000下使用,實際上所有Win32平臺都支持ADSI。可能需要下載ADSI為不同的Windows版本。(更多詳細資料http://www.microsoft.com/china/windows2000/library/howitworks/activedirectory/adsilinks.htm)。Windows 2000 包含ADSI。

        ADSI是一個很大的話題。在這篇文章中我只粗略的介紹一下。ADSI是一類為許多不同計算機服務(大部分基于目錄)的通用接口。一些標準的ADSI提供者(PRovider就像可以在你的程序中使用的COM接口)有WinNT,IIS,LDAP和NDS。使用WinNT提供者(Provider)能創建、修改用戶帳號,設置或修改組。

        下面的小程序展示了在NT/2000下使用ADSI創建用戶帳號必要的步驟:

        首先你需要導入ADSI類庫(Project/Import Type Library菜單)。該類庫可以在system32子目錄中找到(如 C:/WINNT/system32/activeds.tlb)。文件名必須是“ activeds.tlb”。如果找不到該文件,你需要正確的安裝ADSI。在成功導入類庫以后,可以在Delphi的Imports目錄下找到activeds_tlb.pas這樣一個文件(如 ../Delphi6/Imports/activeds_tlb.pas)。還需要這個文件包含在你的Uses語句,讓ADSI可以在Delphi程序中使用。

    下面是ADSI創建用戶的例子。需要用你將要創建用戶的真正的計算機名稱替換[computername]。同樣[accountname]是要創建的用戶帳號。在WindowNT 4.0和Windows 2000中測試通過。

...

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;


上一篇:Delphi斷想

下一篇:Delphi7的IDE概述(二)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 思南县| 中山市| 清丰县| 三江| 临洮县| 东乌珠穆沁旗| 隆回县| 五常市| 甘孜县| 安达市| 义马市| 英山县| 尼玛县| 阳泉市| 辽宁省| 紫阳县| 新源县| 安化县| 松桃| 华阴市| 普宁市| 靖宇县| 仙居县| 桃园县| 怀宁县| 福泉市| 正镶白旗| 岗巴县| 涞水县| 安丘市| 临高县| 康平县| 化隆| 阳江市| 安陆市| 滨海县| 眉山市| 林甸县| 开化县| 乐亭县| 沈阳市|