⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_32990.htm

📁 vc
💻 HTM
字号:
<p>
序号:32990 发表者:Toney520 发表日期:2003-03-17 09:30:39
<br>主题:C#中使用网上邻居
<br>内容:请各路大侠指教,如何在Wingdows Form程序中得到网上邻居上的共享用户、目录!谢谢!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:落叶夏日 回复日期:2003-03-17 09:43:13
<br>内容:System.DirectoryServices.DirectoryEntry组件提供了对Active Directory的访问也就是你要的,我发个使用的例子<BR>DirectoryEntry组件提供了Path属性,根据文档,此属性指定了目录服务中用来访问对象的对象名,其格式如下:<BR><BR>protocol://servername:port number/distinguished name<BR><BR>此语句的第一部分定义了访问将使用的协议,如<BR><BR>LDAP: (Lightweight Directory Access Protocol)<BR><BR>IIS: (提供IIS元数据来读及配置Internet Infomation Server)<BR><BR>WinNT: (提供在非常有限的性能下对Windows NT域的访问)<BR><BR>NDS: (提供对Novell Directory Service的访问)<BR><BR>等等(详细信息清参考MSDN)。<BR><BR>据此,我们构造了一个DirectoryEntry实例,将它的Path设为"WinNT:",以通过对它的所有子项的枚举来发现网络上的所有域(以及工作组)。这样,再对所发现的域(以及工作组)的子项进行枚举,就可以发现网络上的所有计算机。下面的一个控制台小程序演示了这一点。<BR><BR>using System;<BR>using System.DirectoryServices;<BR><BR>class TempClass<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;static void Main()<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnumComputers();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;static void EnumComputers()<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using(DirectoryEntry root = new DirectoryEntry("WinNT:"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach(DirectoryEntry domain in root.Children)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Domain | WorkGroup:\t"+domain.Name);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach(DirectoryEntry computer in domain.Children)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Computer:\t"+computer.Name);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>改进后的Windows Forms方案<BR><BR>上面代码中两个嵌套的foreach循环看起来并不是太好,并且控制台的显示效果也并不那么美观。下面,我将对代码进行一些改动,并将它移植到WinForm上。<BR><BR>新建一个Windows Application[C#],在Form上添加一个TreeView,命名为treeView1。<BR><BR>添加以下几个函数:<BR><BR>//用指定的文本构造一个节点,将其添加为参数parant的子节点,并返回刚构造的节点<BR>private TreeNode AddNode(TreeNode parant,string text)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;TreeNode node = new TreeNode(text);<BR>&nbsp;&nbsp;&nbsp;&nbsp;parant.Nodes.Add(node);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return node;<BR>}<BR><BR>//递归地找到参数entry的所有子节点,并在treeView1中显示;这里的entry与entryNode需相对应<BR>private void EnumChildren(DirectoryEntry entry,TreeNode entryNode)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(entry.Children!=null)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果无子节点则结束<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach(DirectoryEntry i in entry.Children)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将各子节点加入TreeView,并进行递归<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnumChildren(i,AddNode(entryNode,i.Name));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>//用给定的字符串构造根节点,并列出其所有子节点<BR>private void Enumerate(string path)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;try <BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using(DirectoryEntry root = new DirectoryEntry(path))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TreeNode node = new TreeNode(root.Name);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;treeView1.Nodes.Add(node);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnumChildren(root,node);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;catch {}<BR>}<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:落叶夏日 回复日期:2003-03-17 09:43:36
<br>内容:这样,通过传递 "WinNT:" 给函数Enumerate(string),就可以在TreeView中看到网络上的所有计算机,以及每台计算机上的用户、组、服务等资源,效果如图:<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:落叶夏日 回复日期:2003-03-17 09:47:54
<br>内容:还有你可以看看WMI可能也是可以的
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Toney520 回复日期:2003-03-17 10:27:11
<br>内容:老落呀!真佩服你的能力!对C#学的这么Great!<BR>也非常感谢你的指点!<BR>你学他多长时间了?谈谈你的学习秘决和心得如何!让大家分享一下你的决招儿!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:落叶夏日 回复日期:2003-03-17 10:44:36
<br>内容:常来这里解决大家的问题就会提高的,呵呵
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:兰兰的天空 回复日期:2003-04-05 19:02:35
<br>内容:我在机子上试了一下。<BR>有问题呀。<BR>是不是需要对方的电脑有什么设置呀?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:九尾猫 回复日期:2003-12-12 22:15:59
<br>内容:类型或命名空间名称“DirectoryServices”在类或命名空间“System”中不存在(是否缺少程序集引用?)<BR><BR>这是怎么回事呀?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:新柳一叶 回复日期:2003-12-23 08:14:22
<br>内容:好象这段代码在有的机器上不能正常运行吧,运行的结果有点问题。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -