管理系统,管理者要求看到所有开着的机器(通过程序),并且想发送信息,操作系统为windows98,如何实现.
解决方案 »
- 在mainfrm创建内嵌窗体innerfrm后,再在mainfrm操作报内存错误
- 有谁知道在哪里可以下载《Delphi软件项目开发实例》的源代码?
- 如何把一个bitmap文件另存为pdf和png格式文件?
- 再问TIdTCPClient SendBuffer方法。
- Access 数据库的连接问题
- 关于随机抽数问题(100)
- 从SQL里边读出来的bin类型字段的值,怎样写入Access数据库?(ADO)
- 哪里有介绍DELPHI优势的资料
- 拖动无标题栏窗体时的出现问题?在线等待
- delphi7下程序移植到DelphiXE下,有什么需要注意的呢?大家多给建议!
- ereport如何使用
- 高分求助:如何才能显示和保存unicode字符?分不够可再加。谢谢!
procedure GetServerList(List: TStrings);
type
{$H+}
PMyRec = ^MyRec;
MyRec = record
dwScope: Integer;
dwType: Integer;
dwDisplayType: Integer;
dwUsage: Integer;
LocalName: string;
RemoteName: string;
Comment: string;
Provider: string;
end;
{H-}
var
NetResource: TNetResource;
TempRec: PMyRec;
Buf: Pointer;
Count,
BufSize,
Res: DWORD;
lphEnum: THandle;
p: PNetResourceArr;
i,
j: SmallInt;
NetworkTypeList: TList;
begin
// Result := False;
NetworkTypeList := TList.Create;
List.BeginUpdate;
List.Clear;
GetMem(Buf, 8192);
try
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, nil, lphEnum);
if Res <> 0 then
raise Exception(Res);
Count := $FFFFFFFF;
BufSize := 8192;
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
if Res = ERROR_NO_MORE_ITEMS then
Exit;
if (Res <> 0) then
raise Exception(Res);
P := PNetResourceArr(Buf);
for I := 0 to Count - 1 do
begin
New(TempRec);
TempRec^.dwScope := P^.dwScope;
TempRec^.dwType := P^.dwType;
TempRec^.dwDisplayType := P^.dwDisplayType;
TempRec^.dwUsage := P^.dwUsage;
TempRec^.LocalName := StrPas(P^.lpLocalName);
TempRec^.RemoteName := StrPas(P^.lpRemoteName);
TempRec^.Comment := StrPas(P^.lpComment);
TempRec^.Provider := StrPas(P^.lpProvider);
NetworkTypeList.Add(TempRec);
Inc(P);
end;
Res := WNetCloseEnum(lphEnum);
if Res <> 0 then
raise Exception(Res);
for J := 0 to NetworkTypeList.Count - 1 do
begin
TempRec := NetworkTypeList.Items[J];
NetResource := TNetResource(TempRec^);
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, @NetResource, lphEnum);
if Res <> 0 then
raise Exception(Res);
while true do
begin
Count := $FFFFFFFF;
BufSize := 8192;
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
if Res = ERROR_NO_MORE_ITEMS then
Break;
if (Res <> 0) then
raise Exception(Res);
P := PNetResourceArr(Buf);
for I := 0 to Count - 1 do
begin
List.Add(P^.lpRemoteName);
Inc(P);
end;
end;
end;
Res := WNetCloseEnum(lphEnum);
if Res <> 0 then
raise Exception(Res);
//Result := True;
finally
FreeMem(Buf);
NetworkTypeList.Destroy;
end;
List.EndUpdate;
end;procedure GetUserList(fServer: string; List: TStrings);
var
NetResource: TNetResource;
Buf: Pointer;
Count,
BufSize,
Res: DWord;
Ind: Integer;
lphEnum: THandle;
Temp: PNetResourceArr;
begin
GetMem(Buf, 8192);
try
FillChar(NetResource, SizeOf(NetResource), 0);
NetResource.lpRemoteName := @fServer[1];
NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;
NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
NetResource.dwScope := RESOURCETYPE_DISK;
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, @NetResource, lphEnum);
if Res <> 0 then
Exit;
while True do
begin
Count := $FFFFFFFF;
BufSize := 8192;
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
if Res = ERROR_NO_MORE_ITEMS then
Exit;
if (Res <> 0) then
Exit;
Temp := PNetResourceArr(Buf);
for Ind := 0 to Count - 1 do
begin
List.Add(Temp^.lpRemoteName + 2);
{ Add all the network usernames to List StringList }
Inc(Temp);
end;
end;
Res := WNetCloseEnum(lphEnum);
if Res <> 0 then
raise Exception(Res);
// Result := True;
finally
FreeMem(Buf);
end;
end;var
i:integer;
ServerList, IPList: TStringList;
begin
GetServerList(ServerList);
for I := 0 to ServerList.count - 1 do
GetUserList(ServerList.Strings[I], IPList);//IPList字符串列表就是你所要的网络上
上的机器名
end;
//获取工作组中所有计算机
Function NetGetUsers(GroupName: string; var List: TStringList): Boolean;
{=================================================================
功 能: 列举工作组中所有的计算机
参 数:
List: 需要填充的List
返回值: 成功: True,并填充List 失败: False;
备 注:
版 本:
1.0 2002/10/03 08:00:00
=================================================================}
Function TPub.NetGetUsers(GroupName: string; var List: TStringList): Boolean;
type
TNetResourceArray = ^TNetResource;//网络类型的数组
Var
i: Integer;
Buf: Pointer;
Temp: TNetResourceArray;
lphEnum: THandle;
NetResource: TNetResource;
Count,BufSize,Res: DWord;
begin
Result := False;
List.Clear;
FillChar(NetResource, SizeOf(NetResource), 0);//初始化网络层次信息
NetResource.lpRemoteName := @GroupName[1];//指定工作组名称
NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//类型为服务器(工作组)
NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
NetResource.dwScope := RESOURCETYPE_DISK;//列举文件资源信息
//获取指定工作组的网络资源句柄
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
if Res <> NO_ERROR then Exit; //执行失败
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 then break;//资源列举完毕
if (Res <> NO_ERROR) then Exit;//执行失败
Temp := TNetResourceArray(Buf);
for i := 0 to Count - 1 do//列举工作组的计算机名称
begin
//获取工作组的计算机名称,+2表示删除"\\",如\\wangfajun=>wangfajun
List.Add(Temp^.lpRemoteName + 2);
inc(Temp);
end;
end;
Res := WNetCloseEnum(lphEnum);//关闭一次列举
if Res <> NO_ERROR then exit;//执行失败
Result := True;
FreeMem(Buf);
end;