在DELPHI中,如何知道本台计算机的工作组名?

13003646492 2000-09-12 09:44:00
各位高手:
在DELPHI中,如何知道本台计算机的工作组名?
...全文
467 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
13003646492 2000-09-12
  • 打赏
  • 举报
回复
请注意一点,我只想知道自己正在使用的计算机的工作组名,比如知道自己的计算机名可以用GETCOMPUTERNAME的函数。我只不过是不知道知道工作组名的函数
netsong 2000-09-12
  • 打赏
  • 举报
回复
怎么回事?我以为提交失败了,原来发了三次。
netsong 2000-09-12
  • 打赏
  • 举报
回复
如何在程序中动态取得Win95/98的网络邻居中的工作组及计算机名?

procedure GetDomainList(TV:TTreeView);
var
a : Integer;
ErrCode : Integer;
NetRes : Array[0..1023] of TNetResource;
EnumHandle : THandle;
EnumEntries : DWord;
BufferSize : DWord;
s : string;
itm : TTreeNode;
begin
{ Start here }
try
With NetRes[0] do begin
dwScope :=RESOURCE_GLOBALNET;
dwType :=RESOURCETYPE_ANY;
dwDisplayType :=RESOURCEDISPLAYTYPE_DOMAIN;
dwUsage :=RESOURCEUSAGE_CONTAINER;
lpLocalName :=NIL;
lpRemoteName :=NIL;
lpComment :=NIL;
lpProvider :=NIL;
end;
{ get net root }
ErrCode:=WNetOpenEnum(
RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
@NetRes[0],
EnumHandle
);
If ErrCode=NO_ERROR then begin
EnumEntries:=1;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(
EnumHandle,
EnumEntries,
@NetRes[0],
BufferSize
);
WNetCloseEnum(EnumHandle);
ErrCode:=WNetOpenEnum(
RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
@NetRes[0],
EnumHandle
);
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(
EnumHandle,
EnumEntries,
@NetRes[0],
BufferSize
);
IF ErrCode=No_Error then with TV do try
a:=0;
Items.BeginUpDate;
Items.Clear;
Itm:=Items.Add(TV.Selected,string(NetRes[0].lpProvider));
Itm.ImageIndex:=0;
Itm.SelectedIndex:=0;
netsong 2000-09-12
  • 打赏
  • 举报
回复
要列举网络中的工作组信息,首先要获取网络中的网络类型,再获取每一种类型网络中包含的
工作组的名称。
  1、获取网络类型信息
    局域网中可以是由多种类型的网络组成,如由Microsoft、Novell等类型的网络组成。用API
  函数WNetOpenEnum和WNetEnumResource可以获取网络类型信息。
  (1)用WNetOpenEnum函数返回一个句柄,作为WNetEnumResource列举网络资源的依据。我们的目
   标是列举“整个网络”的工作组名称,因而网络范围为RESOURCE_GLOBALNET(所有机器)、资源类
   型为RESOURCETYPE_DISK(文件资源)、资源用途为RESOURCEUSAGE_CONTAINER(所有container资源)、
   网络层次为最高层(NIL),这样可以得到一个句柄,以便进一步列举网络资源。具体的程序段如下:
{ Res : DWORD; lphEnum : THandle; }
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
If Res <> NO_ERROR Then exit;//执行失败
  (2)用API函数WNetEnumResource可以获取网络类型信息,此时要用到上面获取的句柄lphEnum,
   可以获取一个NetResource类型的数组,每个NetResource元素即为一种网络类型信息。
   具体的请参见以下程序段及注释信息。
type
TNetResourceArray = ^TNetResource;//网络类型的数组
Var
NetResource : TNetResource;
Buf : Pointer;
Count,BufSize,Res : DWORD;
lphEnum : THandle;
p : TNetResourceArray;
i,j : SmallInt;
NetworkTypeList : TList;
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 Exit;
P := TNetResourceArray(Buf);
For I := 0 To Count - 1 Do//记录各个网络类型的信息
Begin
NetworkTypeList.Add(p);
Inc(P);
End;
......
end;
  2、获取工作组信息
    在获取网络类型信息后,可以根据此信息获取此类型网络中的服务器(工作组)信息。
    在WNetOpenEnum函数中,将参数lpNetResource指定为一种网络类型信息,可以获取一
个句柄,在WNetEnumResource中利用这个句柄,可以获取一个NetResource类型的数组,每个
NetResource元素的lpRemoteName部分即为一个工作组名称(如“MyWorkGroup”)。
    具体的请参见以下程序段及注释信息。
//列出一个网络类型中的所有工作组名称
NetResource := TNetResource(NetworkTypeList.Items[J]^);//网络类型信息
//获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回句柄
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
If Res <> NO_ERROR Then break;//执行失败

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;

  3、获取工作组信息的完全源代码
//列举出整个网络中的工作组名称,返回值为TRUE表示执行成功,
//参数List中返回服务器(工作组)的名称
Function GetServerList( var List : 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;
List.Clear;
//获取整个网络中的文件资源的句柄,lphEnum为返回名柄
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
If Res <> NO_ERROR Then exit;//Raise Exception(Res);//执行失败
//获取整个网络中的网络类型信息
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为返回名柄
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
If Res <> NO_ERROR Then break;//执行失败

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;
netsong 2000-09-12
  • 打赏
  • 举报
回复
如何在程序中动态取得Win95/98的网络邻居中的工作组及计算机名?

procedure GetDomainList(TV:TTreeView);
var
a : Integer;
ErrCode : Integer;
NetRes : Array[0..1023] of TNetResource;
EnumHandle : THandle;
EnumEntries : DWord;
BufferSize : DWord;
s : string;
itm : TTreeNode;
begin
{ Start here }
try
With NetRes[0] do begin
dwScope :=RESOURCE_GLOBALNET;
dwType :=RESOURCETYPE_ANY;
dwDisplayType :=RESOURCEDISPLAYTYPE_DOMAIN;
dwUsage :=RESOURCEUSAGE_CONTAINER;
lpLocalName :=NIL;
lpRemoteName :=NIL;
lpComment :=NIL;
lpProvider :=NIL;
end;
{ get net root }
ErrCode:=WNetOpenEnum(
RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
@NetRes[0],
EnumHandle
);
If ErrCode=NO_ERROR then begin
EnumEntries:=1;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(
EnumHandle,
EnumEntries,
@NetRes[0],
BufferSize
);
WNetCloseEnum(EnumHandle);
ErrCode:=WNetOpenEnum(
RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
@NetRes[0],
EnumHandle
);
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(
EnumHandle,
EnumEntries,
@NetRes[0],
BufferSize
);
IF ErrCode=No_Error then with TV do try
a:=0;
Items.BeginUpDate;
Items.Clear;
Itm:=Items.Add(TV.Selected,string(NetRes[0].lpProvider));
Itm.ImageIndex:=0;
Itm.SelectedIndex:=0;
Delphi 7 新概念百例》是一本通过讲解Delphi实例,来说明使用Delphi编程时通常采用的编程思路以及具体方法的计算机书籍。通过对每个实例从编程思路和代码实现的详细分析和讲解,力求带领读者快速地提高自己的程序设计水平,并达到举一反三的目的。很多实例的重要部分都做了特别注意和技巧等提示,目的是强调一些技巧的使用或使读者尽量避免一些常见的错误,以使更高效地利用Delphi这个强大的程序开发工具。  该书精选了100多个经典的实例从易到难、由浅入深、由简单到综合地进行讲解,内容涉及面也很广泛,基本上涵盖了用Delphi进行应用程序设计的方方面面,凝聚了作者多年的Delphi编程经验,相信对启发读者的思想并提高读者的编程水平台有很大帮助。  该书主要面向高级读者,但对那些熟悉Object Pascal语法并有一定编程经验的初级读者也很有帮助。本书也可以作为初涉Delphi的实例教材使用。  本文件是《Delphi 7 新概念百例》的配书源代码,包含编译好的可执行文件。内容如下:├─综合应用篇│ ├─87 用TreeView来显示数据库信息│ ├─86 显示彩色数据表格│ ├─85 文件切割器│ ├─84 加密解密器│ ├─83 TButton增加OnMouseLeave事件│ ├─82 将IE收藏夹导出为HTML文件│ ├─81 NT Win2000发送Winpop消息│ ├─80 制作无闪烁的动画│ ├─79 定制自己的幽灵程序│ ├─78 简单的文件查看器│ ├─77 简单的文件夹浏览器│ └─76 实现自己的控制面板├─练习提高篇│ ├─99 获取TRichEdit控件光标所在行号│ ├─98 获取内存信息│ ├─97 获取CPU 信息│ ├─96 获取Windows的版本│ ├─95 临时文件的操作│ ├─94 获取Windows和System目录│ ├─93 将窗体大小限定在一定范围内│ ├─92 闪烁窗口│ ├─91 在窗体客户区用鼠标拖曳窗体│ ├─90 使TMemo组件带边界│ ├─89 给ListBox控件增加水平滚动条│ ├─88 运行时拖动控件│ ├─104 防止程序或系统关闭│ ├─103 设置屏幕分辨率│ ├─102 获取系统和显卡的BIOS信息│ ├─101 使应用程序不出现在任务栏上│ └─100 隐藏或显示桌面上的图标└─基础实例篇 ├─8第八节 数据库技术 │ ├─75 通过注册表在程序增减和修改数据源 │ ├─74 获取BDE的配置信息 │ ├─73 动态建立和使用别 │ │ ├─在程序动态地建立和使用别(四) │ │ ├─在程序动态地建立和使用别(二) │ │ ├─在程序动态地建立和使用别(三) │ │ └─在程序动态地建立和使用别(一) │ ├─72 自动检测、建立数据库别和数据表 │ ├─71 用Delphi进行数据库之间转换 │ ├─70 图像数据的存取 │ ├─69 压缩、反删除dBase或FoxPro数据表 │ ├─68 处理数据库日期型字段的显示与输入 │ │ └─数据库 │ └─67 在数据库存取Word文档 ├─7第七节 网络编程 │ ├─66 动态更改DNS │ ├─65 网络资源树形浏览 │ ├─64 实现网络驱动器的映射和断开 │ ├─63 在网络邻居上得到某台机器的磁盘空间 │ ├─62 在网络邻居获取指定工作组内的所有计算机及其共享资源信息 │ ├─61 在WinNT-2000网络邻居获取所有的工作组 │ ├─60 计算机与IP地址的互相获取 │ ├─59 实现Ping操作 │ ├─58 网页浏览器 │ └─57 获取本机机器、IP信息以及网卡的MAC地址 ├─6第六节 多媒体技术 │ ├─56 实现图像之间的平滑过渡 │ ├─55 制作能播放Midi、Wav和Avi文件的播放器 │ ├─54 检测声卡是否安装 │ ├─53 获取Audio-CD的序列号 │ ├─52_关闭CD-ROM │ └─51 检测_设置CD-ROM是否自动运行 ├─5第五节 图像技术 │ ├─50 创建Jpeg图像的缩略图 │ ├─49 实现图像的翻转 │ ├─48 多种渐变色的实现 │ ├─47 TColor与RGB值的互相转换 │ ├─46 将文本转换成图像 │ ├─45 提高对位图象素的访问速度 │ ├─44 将彩色位图转换为灰度图 │ ├─43 将图像从jpg,ico,bmp,wmf格式转换为emf格式 │ ├─42 将图像从jpg,ico,emf,wmf格式转换为bmp格式 │ └─41 将图像从bmp格式转换为Jpg格式 ├─4第四节 VCL分析 │ ├─40 消除在TEdit控件按下回车键时的声音 │ ├─39 在StringGrid设置只读栏 │ ├─38 加速TTreeView控件的填充和清空 │ ├─37 加速TListBox控件的填充和清空 │ ├─36 在TStringGrid控件删除整行 │ ├─35 动态创建主菜单和菜单项 │ ├─34 使程序能在循环响应界面操作 │ ├─33 在TListbox、TCombobox实现自动搜索 │ ├─32 用剪贴板复制和粘贴图像 │ └─31 实现.dfm文件和.txt文件的互相转换 ├─3第三节 Shell研究 │ ├─30 为程序创建快捷方式 │ ├─29 获取Windows的若干特殊文件夹路径(二) │ ├─28 获取Windows的若干特殊文件夹路径(一) │ ├─27 抽取程序关联图标 │ ├─26 磁盘格式化的实现 │ ├─25 将文件加入“开始”菜单的“文档” │ ├─24 文件的拖放 │ ├─23 整个目录的复制、移动、删除 │ ├─22 将指定文件类型设置为与自己的应用程序相关联 │ └─21 文件的自动打开和超链接的实现 ├─2第二节 系统探秘 │ ├─20 操作INI文件 │ ├─19 获取驱动器类型信息 │ ├─18 在自己的程序关闭其它的程序 │ ├─17 使程序开机自动运行 │ ├─16 在自己的程序打开或关闭IE窗口 │ ├─15 模拟鼠标的行为 │ ├─14 限制光标的移动区域 │ ├─13 获取或更改计算机 │ ├─12 运行程序的单实例 │ └─11 隐藏任务栏 └─1第一节 界面设计 ├─09 在系统菜单上添加自定义菜单项 ├─08 使窗体始终最大化 ├─07 使窗体始终最小化 ├─06 为窗体创建动画光标 ├─05 制作始终位于最上层的窗体 ├─04 制作带背景窗体 ├─03 制作圆形窗体 ├─02 制作无标题栏窗体 ├─10 给窗体边框“镶边” └─01 制作不可移动的窗体
目录: 1 Uppas40.htm Delphi 4增訂的Object Pascal 19K 2 Api_printer.htm Api函数列表-与打印有关 30K 3 Autocreate.htm 在Delphi3程序自动检测、建立数据库别 7K 4 Autoxize.htm DELPHI自适应表单的实现 3K 5 Bat.htm 在Delphi利用Tbatch组件完成数据批处理 5K 6 Bde.htm 如何在注册表注册BDE 2K 7 Bjjlb.htm Delphi编辑俱乐部 4K 8 Cgi_1.htm CGI技术及其开发 11K 9 Cgi_2.htm CGI技术及其开发(二) 12K 10 Chang_backmap.htm 用Delphi实现壁纸更换 3K 11 Change_ip_dns.htm 任何动态改变/添加网络设置的 TCP/IP 的 DNS 地址 1K 12 Colorcour.htm 让彩色光标出现在Delphi程序 2K 13 Compon_mk.htm 面向组件的系统开发方法 2K 14 Comtech.htm COM/DCOM如何传递数组 2K 15 Comvsdcom.htm COM/DCOM的区别与联系 2K 16 Cookite.htm Delphi 3Cookie的建立使用 6K 17 Copy_screen.htm 一个实用的Delphi屏幕拷贝程序的设计 11K 18 Create_oracle7.htm 开发基于ORACLE7数据库的管理信息系统 9K 19 Cs_fast.htm 提高客户机/服务器应用系统性能的一些方法 8K 20 Def_color_dlg.htm 用Delphi实现自定义颜色对话框及其构件 12K 21 Def_preview.htm 自定义快速报表的打印预览窗口 6K 22 Delete.htm 如何把文件删除到回收站 1K 23 Delphi_c.htm 在Delphi与C++之间实现函数与对象共享 7K 24 Delphi_err.htm Delphi编译错误文手册 34K 25 Delphi_net1.htm DELPHI与INTERNET 34K 26 Delphi_net2.htm DELPHI与INTERNET 46K 27 Delphi_quick_develop.htm Delphi之快速设计(程序设计篇) 8K 28 Delphi_quick_develop2.htm Delphi之快速设计(界面篇) 3K 29 Delphi23_io.htm 在DELPHI2.0/3.0直接操作端口 3K 30 Delphivspb.htm 开发AS/400应用系统PB5与Delphi3的比较 9K 31 Device_isok.htm 检查驱动器是否就绪 1K 32 Dtccw03.htm 资源文件在DELPHI的使用 10K 33 Dttray.htm 如何创建任务栏的应用程序 11K 34 Edit_sysmenu.htm 控制系统菜单 3K 35 Fix_sybase.htm 如何恢复Sybase SQL Anywhere的数据库 4K 36 Fixsysbase_in.htm 解决sybase用户数据库不能进入故障的一种方法 5K 37 From_move.htm 用Delphi实现无边界窗体的移动 3K 38 Function.htm 部分函数、命令、属性文说明 13K 39 Get_form.htm Win95/98下监控运行的其他程序 2K 40 Get_info.htm 使用Delphi获取系列信息 3K 41 Get_net_friend.htm 如何在程序动态取得Win95/98的网络邻居工作组计算机 12K 42 H_sort.htm 在DELPHI用线程排序 4K 43 Happymouse.htm 用Delphi编制趣味动画鼠标 3K 44 Hint.htm 改造HINT的输出方式 5K 45 Howto_chinese_delphi.htm "Delphi之完全汉语"终结版 6K 46 If.htm Delphi数据集过滤技巧 4K 47 Img.htm Delphi下汉字输入法的编程及使用 5K 48 Index_notf.htm 怎样解决打开一个DBF表时的"Index not found.."错误 3K 49 Install.htm 如何制作Delphi程序安装盘 7K 50 Ip

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧