全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1332
推到 Plurk!
推到 Facebook!

如何取得Windows 2000 網域中群組的名稱?

答題得分者是:bruce0211
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-05 14:01:21 IP:163.17.xxx.xxx 未訂閱
小弟有一VB.NET 的程式,可以用來取得Windows 2000 群組的名稱 請問如何改寫成Delphi呢? function getgroup() dim domain=getobject("WinNT://NTDomainName") dim member for each member in domain if member.class="Group" and instr(member.name,"Domain")=0 then if member.grouptype="2" then group.items.add(member.name) end if end if next end function
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-05 14:21:08 IP:211.21.xxx.xxx 未訂閱
之前一值找不到相關 API 用 bcb 寫的偷吃步 ...    //--------------------------------------------------------------------------- String __fastcall _WorkgroupName() //求工作群組名稱 - 2003/04/02 {   TStringList *TempList = new TStringList;   String keyword;   String temp;      try {         TempList->LoadFromFile("C:\\WINNT\\Debug\\NetSetup.LOG");         for (int i=0;i<=TempList->Count-1;i++)             {               temp=TempList->Strings[i];               if (temp.Pos(" is valid for type 2")>0) keyword=temp;             }          }   __finally       {         delete TempList;       }      return (_StringSegment(keyword,"'",2));    }    //--------------------------------------------------------------------------- //依照分隔符號,取出字串中某一區段 //--------------------------------------------------------------------------- String __fastcall _StringSegment(String Str , String Comma , int Seg) {   if ((Str=="") || (Seg<1)) return ""; String C=Comma; if (C=="") C=","; String s=Str; String sTmp; String r; int iPosComma; TStringList *TempList = new TStringList; // declare the list TempList->Clear(); while (s.Pos(C)>0) { iPosComma = s.Pos(C); // locate commas sTmp = s.SubString(1,iPosComma - 1); // copy item to tmp string TempList->Add(sTmp); // add to list s = s.SubString(iPosComma 1,s.Length()); // delete item from string } // trap for trailing filename if (s.Length()!=0) TempList->Add(s); if (Seg > TempList->Count) r=""; else r= TempList->Strings[Seg-1]; delete TempList; // destroy the list object return r; }
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-05 14:53:04 IP:163.17.xxx.xxx 未訂閱
謝謝    但是不知道有沒有呼叫API的方法    
引言: 之前一值找不到相關 API 用 bcb 寫的偷吃步 ...
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-08 10:30:58 IP:218.163.xxx.xxx 未訂閱
這一類的API應屬於 "Lan Manager Function" 你可由Delphi6中Help | Window SDK 中先Search "NetGroupGetUser" 這些API應是你要的吧
pc1820
一般會員


發表:3
回覆:2
積分:1
註冊:2003-05-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-11 17:22:57 IP:61.222.xxx.xxx 未訂閱
WNetEnumResource()函數的原型如下: DWORD WNetEnumResource( Handle hEnum, //將要列舉的Handle LPDWORD lpcCount, //列出Handle的個數 LPVOID lpBuffer, //緩衝區 LPDWORD lpBufferSize) //緩衝區大小 WNetOpenEnum()函數原型如下: DWORD WNetOpenEnum( DWORD dwScope, //列舉範圍 DWORD dwType, //列舉的資源類型 DWORD dwUsage, //列舉的資源用途 LPNETRESOURCE lpNetResource, //資源結構 LPHANDLE lphEnum //列舉Handle緩衝區 範例程式, 建立一個表單, 上面放一個EditBox和一個ListBox: type TNetResourceArray = ^TNetResource; Function GetServerList(var List: TStringList): Boolean; //傳回值為True表示取得網路資源成功 Var NetResource : TNetResource; Buf : Pointer; Count,BufSize,Res : DWORD; lphEnum : THandle; p : TNetResourceArray; i, j : SmallInt; NetworkTypeList : TList; Begin Result:= False; NetworkTypeList:= TList.Create; List.Clear; //取得整個網路中資源的控制碼,lphEnum為傳回的Handle Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum); If Res <> NO_ERROR Then exit; //取得整個網路中的網路類型資訊失敗即離開程式 Count := $FFFFFFFF; //不限資源數目 BufSize := 8192; //緩衝區大小設置為8K GetMem(Buf, BufSize); //配置記憶體,用於放置工作群組資訊 Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); //資源列舉完畢或執行失敗 If ( Res = ERROR_NO_MORE_ITEMS ) or (Res <> NO_ERROR ) then Exit; P := TNetResourceArray(Buf); For I := 0 To Count - 1 Do //記錄各個網路類型的資訊 Begin NetworkTypeList.Add(p); Inc(P); End; //WNetCloseEnum關閉一個列舉控制碼 Res := WNetCloseEnum(lphEnum);//關閉一次列舉 If Res <> NO_ERROR Then exit; For J := 0 To NetworkTypeList.Count-1 Do //列出各個網路類型中的所有工作群組名稱 Begin //列出一個網路類型中的所有工作群組名稱 NetResource := TNetResource(NetworkTypeList.Items[J]^); //網路類型資訊//獲取某個網路類型的檔資源的控制碼,NetResource為網路類型資訊,lphEnum為傳的回Handle Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum); If Res <> NO_ERROR Then break; //執行失敗,就中斷For迴圈程式執行 While true Do //列舉一個網路類型的所有工作群組的資訊 Begin Count := $FFFFFFFF; //不限資源數目 BufSize := 8192; //緩衝區大小設置為8K GetMem(Buf, BufSize); //配置記憶體,用於放置工作群組資訊 //取得一個網路類型的檔資源資訊, Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); //資源列舉完畢或執行失敗 If ( Res = ERROR_NO_MORE_ITEMS ) or (Res <> NO_ERROR) then break; P := TNetResourceArray(Buf); For I := 0 To Count - 1 Do //列舉各個工作群組的資訊 Begin List.Add( StrPAS( P^.lpRemoteName )); //取得一個工作群組的名稱 Inc(P); End; End; Res := WNetCloseEnum(lphEnum); //關閉一次列舉 If Res <> NO_ERROR Then break; //執行失敗 End; Result := True; FreeMem(Buf); NetworkTypeList.Destroy; End; procedure TForm1.Button1Click(Sender: TObject); var Groups: TStringList; begin Groups:= TStringList.Create; Try GetServerList(Groups); ListBox1.Items:= Groups; Edit1.Text:= IntToStr(ListBox1.Count); Finally Groups.Free; {Do nothing} End; end;
系統時間:2024-05-04 20:01:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!