如何取得Windows 2000 網域中群組的名稱? |
答題得分者是:bruce0211
|
will
中階會員 發表:176 回覆:135 積分:62 註冊:2002-04-14 發送簡訊給我 |
小弟有一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 發送簡訊給我 |
之前一值找不到相關 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 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
pc1820
一般會員 發表:3 回覆:2 積分:1 註冊:2003-05-22 發送簡訊給我 |
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;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |