如何获得本机的工作组名称?(200分)

C

caowei

Unregistered / Unconfirmed
GUEST, unregistred user!
本机的工作组名称如何获得?在2000下的。
98下可以读注册表,2000下注册表里面没有啊....
我已经把dfw里面涉及工作组的所有文章翻遍了,也没有找到答案....
 
我觉得应该在注册表里面能找到域的资料,但我没试试工作组,希望能给你个参考吧
HKEY_CURRENT_USER/SOFTWARE/MICROSOFT/WINDOWS/CURRENTVERSION/EXPLORER/LAST DOMAIN
HKEY_LOCAL_MACHINE/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/WINLOGON/DOMAINCACHE
 
当然需要WINSOCK了
列举局域网内的工作组的代码
//************************************************************
type
TNetResourceArray = ^TNetResource;

function GetWorkGroupList( var myList : TStringList ) : Boolean;
var
NetResource : TNetResource;
Buf : Pointer;
Count,BufSize,Res : DWORD;
lphEnum : THandle;
p: TNetResourceArray;
i,j : SmallInt;
NetworkTypeList : TList;
begin
Result := False;
NetworkTypeList := TList.Create;
myList.Clear;

//打开网络资源牧举操作
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, nil,lphEnum);
if Res <> NO_ERROR then exit;
Count := $FFFFFFFF;
BufSize := 8192;
GetMem(Buf, BufSize);

//继续由WNetOpenEnum打开的网络资源牧举
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;

//结束由WNetOpenEnum打开的牧举
Res:= WNetCloseEnum(lphEnum);
if Res <> NO_ERROR then exit;
for J := 0 to NetworkTypeList.Count-1 do
begin
NetResource := TNetResource(NetworkTypeList.Items[J]^);
//打开网络资源牧举
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER,
@NetResource,lphEnum);
if Res <> NO_ERROR then break;
while true do
begin
Count := $FFFFFFFF;
BufSize := 8192;
GetMem(Buf, BufSize);

//继续由WNetOpenEnum打开的网络资源牧举
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
myList.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;
//************************************************************

 
分给我了
 
这段代码我看到过。但是我现在需要的是得到“本机”的工作组名称,
不是要去枚举网络上面所有的工作组...
sword说的没有用,2000下面的注册表没有这个内容...
 
我就是在用2000看的啊
 
我的2000里面没有这两个啊....
 
完全可以的,我就是用这个写了聊天程序的一部分
 
journer: 请看清楚我的需求啊....是得到本机的就可以了。
你的那个程序是得到网络上所有的工作组名称,这会费一下时间的。
你所提供的程序在dfw上面能够找到,但是不和我的要求相符合啊...
 
列举成功一次,获得工作组名字就可以了
http://xuguohua.myrice.com/skill/57.htm
 
NetWkstaGetInfo,用这个。
 
具体用法?
 
NET_API_STATUS NetUserGetLocalGroups(

LPWSTR servername,
LPWSTR username,
DWORD level,
DWORD flags,
LPBYTE *bufptr,
DWORD prefmaxlen,
LPDWORD entriesread,
LPDWORD totalentries
);
 
顶部