上一篇:C#开发的两个原则的深入讨论 >>
Visual C#构建网络计算机树形图
一.Active Directory服务接口和DirectoryEntry类
Active Directory服务接口是Microsoft Windows Active Directory的编程接口。它允许应用程序使用单个接口与网络上的不同目录进行交互。Visual C#是通过创建DirectoryEntry和 DirectorySearcher能够轻松访问这个接口。而这种操作对其他编程语言而言,却意味着要调用需要WinAPI函数。
Active Directory服务接口可以实现很多操作,本文所实现的访问Active Directory树,以构建网络配置的计算机分层树形结构图,只是其中的一个很小的部分。若要使用Active Directory服务接口,必须在客户端计算机上安装 ADSI 2.5或更高版本。Windows 2000自动安装了ADSI 2.5,而对Win 98及以下的系统,则没有安装ADSI 2.5,这也就是下面介绍的这个网络功能无法获得系统是Win 98及以下操作系统在网络树形图对应的位置。所以下面介绍的网络功能成功构建网络的计算机树形图前提之一就是网络上的计算机的操作系统在Windows 2000及以上。
由于本文只使用了DirectoryEntry类,故只介绍DirectoryEntry的结构和使用方法,表01和表02是DirectoryEntry类常用属性、常用方法及其说明:
| 属性 | 说明 |
| AuthenticationType | 获取或设置要使用的身份验证的类型。 |
| Children | 获取DirectoryEntries实例,它包含Active |
| Name | 获取用基础目录服务命名的对象的名称。 |
| NativeObject | 获取本机Active Directory服务接口(ADSI)对象。 |
| Parent | 获取Active Directory层次结构中的此项的父级。 |
| Password | 获取或设置在对客户端进行身份验证时使用的密码。 |
| Path | 获取或设置此DirectoryEntry的路径。 |
| Properties | 获取在此对象上设置的属性的PropertyCollection。 |
| SchemaClassName | 获取用于此DirectoryEntry的架构的名称。 |
| SchemaEntry | 获取DirectoryEntry,它保存此项的架构信息。项的架构确定其强制属性和可选属性的名称的列表。 |
| UsePropertyCache | 获取或设置一个值,该值指示在每次运算之后是否应提交缓存。 |
| Username | 获取或设置在对客户端进行身份验证时使用的用户名。 |
| 方法 | 说明 |
| Close | 关闭DirectoryEntry并释放与此组件关联的任何系统资源。 |
| CommitChanges | 保存对Active |
| CopyTo | 创建此项的副本,并将其作为指定父级的子项。 |
| DeleteTree | 从Active Directory层次结构中删除此项及其整个子树。 |
| Exists | 搜索指定路径处的目录存储区,以查看是否存在项。 |
| Invoke | 在本机Active Directory上调用方法。 |
| MoveTo | 将此项移至指定父级。 |
| RefreshCache | 将此目录项的属性值加载到属性缓存中。 |
| Rename | 更改此项的名称。 |
二.Visual C#使用ADSI构建网络计算机树形图
创建DirectoryEntry类实例后,并为该实例指定一个路径,指示所访问的系统上使用的提供程序的类型以及要绑定到的对象。表03为DirectoryEntry类可以访问的服务提供程序以及每种服务提供程序的标识符。
| 服务提供程序 | 路径标识符 |
| Windows 2000或Windows XP | WinNT://path |
| 轻量目录访问协议(LDAP) | LDAP://path |
| Novell NetWare目录服务 | NDS://path |
| Novell Netware 3.x | NWCOMPAT://path |
当创建DirectoryEntry类实例,并把此实例绑定到指定路径的Active Directory中的节点。如果是此节点对应的是Windows NT服务提供程序,那就可以访问此节点下域、计算机、打印队列和会话。本文就是通过DirectoryEntry此种功能访问网络中计算机,从而构建网络计算机树形图的。下面就来介绍具体的实现方法。
三.本文中介绍的程序设计及运行环境
(1).微软视窗2000 服务器版。
(2).Visual Studio .Net 2003企业结构版,.Net Framework SDK 4322。
四.Visual C#构建网络计算机树形图的实现步骤
Visual C#构建网络计算机树形图的具体步骤如下:
1. 启动Visual Studio .Net。
2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。
3. 将【项目类型】设置为【Visual C#项目】。
4. 将【模板】设置为【Windows应用程序】。
5. 在【名称】文本框中输入【Visual C#构建网络计算机树形图】。
6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在"E:\VS.NET项目"目录中就产生了名称为"Visual C#构建网络计算机树形图"的文件夹,并在里面创建了名称为"Visual C#构建网络计算机树形图"的项目文件。
7. 把Visual Studio .Net的当前窗口切换到【Form1.cs(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的操作:
一个TreeView组件,名称为treeView1,使用此组件来显示网络计算机的树形图。
一个Button组件,通过此组件的Click事件来读取网络中域和工作组,并在此Button组件拖入Form1的设计窗体后,双击它,则系统会在Form1.cs文件分别产生此组件的Click事件对应的处理代码。
8. 在【解决方案资源管理器】窗口中,双击Form1.cs文件,进入Form1.cs文件的编辑界面。并在Form1.cs文件的开头,用下列导入命名空间代码替代系统缺省的导入命名空间代码。
| using System.Drawing ; using System.Collections ; using System.ComponentModel ; using System.Windows.Forms ; using System.Data ; using System.Threading ; |
9. 在Form1.cs的class代码区中添加下列代码,下列代码是创建DirectoryEntry类实例,并把此实例绑定到Windows NT服务提供程序:
| private DirectoryEntry entryPC = new DirectoryEntry ( "WinNT:" ) ; |
10. 以下面代码替代系统产生的InitializeComponent过程,下列代码的作用是初始化程序中的组件,并定义treeView1组件的DoubleClick事件:
| private void InitializeComponent ( ) { this.treeView1 = new System.Windows.Forms.TreeView ( ) ; this.button1 = new System.Windows.Forms.Button ( ) ; this.SuspendLayout ( ) ; this.treeView1.ImageIndex = -1; this.treeView1.Location = new System.Drawing.Point ( 16 , 8 ) ; this.treeView1.Name = "treeView1" ; this.treeView1.SelectedImageIndex = -1 ; this.treeView1.Size = new System.Drawing.Size ( 316 , 302 ) ; this.treeView1.TabIndex = 0 ; this.treeView1.DoubleClick += new System.EventHandler ( this.treeView1_DoubleClick ) ; this.button1.Location = new System.Drawing.Point ( 118 , 324 ) ; this.button1.Name = "button1" ; this.button1.Size = new System.Drawing.Size ( 82 , 34 ) ; this.button1.TabIndex = 1 ; this.button1.Text = "获取" ; this.button1.Click += new System.EventHandler ( this.button1_Click ) ; this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ; this.ClientSize = new System.Drawing.Size ( 350 , 369 ) ; this.Controls.Add ( this.button1 ) ; this.Controls.Add ( this.treeView1 ) ; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle ; this.MaximizeBox = false ; this.Name = "Form1" ; this.Text = "Visual C#构建网络计算机树形图" ; this.ResumeLayout ( false ) ; } |
至此【Visual C#构建网络计算机树形图】项目的界面设计和功能实现的准备工作就完成了,设计后的界面如图01所示:
|
图01:【Visual C#构建网络计算机树形图】项目的设计界面 |
11. 用下列代码替换Form1.cs中的button1的Click事件对应的处理代码,下列代码读取网络中域或工作组,并加入到树形图中:
| private void button1_Click ( object sender , System.EventArgs e ) { foreach ( DirectoryEntry child in entryPC.Children ) { TreeNode node = new TreeNode ( ) ; node.Text = child.Name ; treeView1.Nodes.Add ( node ) ; //在treeView1组件中添加节点 } //利用foreach语句实现对网络域和工作组的遍历, //并通过treeView1组件显示出来 } |
12. 在Form1.cs中的button1的Click代码之后, 添加下列代码,下列代码的作用是定义treeView1的DoubleClick事件,在此事件中读取选定域或工作组中对应的计算机主机:
| private void treeView1_DoubleClick ( object sender , System.EventArgs e ) { if ( treeView1.SelectedNode!= null ) { string s =treeView1.SelectedNode.Text ; treeView1.SelectedNode.Nodes.Clear ( ) ; DirectoryEntry temp= new DirectoryEntry ( ) ; temp.Path ="WinNT://" + s ; TreeNode node = treeView1.SelectedNode ; foreach ( DirectoryEntry pc in temp.Children ) { if ( String.Compare ( pc.SchemaClassName ,"computer" ,true ) == 0 ) //判断此节点是否为计算机 { TreeNode son = new TreeNode ( ) ; son.Text = pc.Name ; node.Nodes.Add ( son ) ; } } } treeView1.SelectedNode.Expand ( ) ; //展开treeView1选中的节点 } |
13. 至此在上述步骤都正确完成后,【Visual C#构建网络计算机树形图】项目的全部工作就基本完成了。此时单击快捷键F5运行程序,单击【读取】按钮,则程序会读取网络中的域或工作组,并通过treeView1组件显示出来,此时再双击treeView1中的节点,则程序会读取当前节点对应的域或工作组中的计算机,并显示出来。图02是【Visual C#构建网络计算机树形图】项目的运行界面:
|
图02:【Visual C#构建网络计算机树形图】项目的运行界面 |
五.总结
Visual C#构建网络计算机树形图其实是ADSI解决网络问题的一个应用,Visual C#之所以能够轻松、灵活的使用ADSI接口就是因为.Net FrameWork SDK中提供了可操作ADSI的类,灵活使用这些类库的确能够解决看似很烦杂的实际问题。当然本文介绍的网络功能也存在一些弊端,譬如:网络中的Windows 98及以下的计算机就无法访问,从而也无法显示在树形图中,这是因为Windows 98及以下计算机没有安装ADSI 2.5。并且此网络功能只能构建简单型的网络树形图,如果网络存在多个网段,那此网络功能也只能构建运行此程序主机所在网段的树形图,如果此网络还存在多个Vlan(虚拟子网),那此网络功能也只能构建运行此程序主机所在网段及所在Vlan的网络树形图。
下一篇:C# 3.0 新特性:扩展方法初探 >>
相关文章:
- · 两种特殊的Java容器类List和Set分析
- · 06年搜索市场十五大趋势 Google唱主角
- · Delphi实现动态修改显示器分辨率
- · 更改IE下载文件后的默认处理方法
- · 网管必备的智能监控软件:网络执法官
- · 用Delphi设计循环播放声音文件程序
- · Delphi编程禁止用户关闭操作系统
- · PHP 5.0 中的对象重载技术研究
- · 美政府黑客大会寻人才 培养黑客界线人
- · 腾讯RTX能带给企业客户的价值
- · 腾讯RTX提供给用户的主要解决方案
- · 腾讯RTX的主要功能特性介绍
- · MM购物人人埋单 人人网重金搜寻品味美女
- · 是猫友就要有猫窝!猫扑我的空间试用小记
- · UUME引领网络视频娱乐狂潮
- · 让我们停止这场战争
- · 一个“小圈子”,聚拢大家庭
- · 个人博客盈利并不难 要根据特点选对广告
- · 猫扑网友热心公益 齐力捐助善良老人
- · 猫扑网友自拍漫画玩火世界杯
- · 美少女足球队让你High到爽
- · 激情盛夏 趋势科技送大礼
- · 把软件当硬件卖 趋势给中国市场的独创方案
- · 我的媒体中心—“猫仔队1.7”新鲜登场
- · 猫扑音乐随身听,保护数字音乐版权有新招
- · 网络创业者们看过来 网站的盈利方式
- · 警报:转信服务已危及全球Internet安全
- · 百度硬盘搜索2.0 Beta版抢先试用
- · 继续前行 百度硬盘搜索发布一周年
- · 百度超级搜霸有六大搜索利器
- · 百度搜霸——让你做个精明的管家
- · 启动3D聊天模式 与Q友站到系统桌面上畅聊
- · 体验腾讯QQ新酷功能——3D秀
- · QQ新版3月发布 增3D秀、网络城市等新元素
- · QQ宠物常见问题解答(十四)
- · QQ宠物常见问题解答(十五)
- · 快速学用腾讯TM:方便的个人名片
- · 快速学用腾讯TM:自定义个人形象
