在我的C#WPF应用程序中,我编写了一个对话框,允许用户从本地硬盘驱动器中选择一个文件夹。自定义对话框保持我的应用程序的外观和感觉,并提供常见对话框对此问题不重要的功能。
我现在正在为程序的新功能添加功能,这要求对话框包含对话框TreeView
控件中本地计算机/用户可见的计算机名称。扩展计算机的条目应列出本地计算机/用户可见的所有共享。
换句话说,当您展开“网络”选项时,我希望这个新功能像Windows资源管理器窗口一样工作。
如何发现机器可以看到的计算机的名称,以及用户可以访问的共享?
编辑1:
我确实需要比计算机名称更多的信息。感谢Jonathan Reinhart提出的问题。我没有在自己的搜索中找到它。
要明确的是,除了网络上的计算机名称之外,我还需要知道当前用户有权查看的每个共享的名称。在评论中链接的答案并没有告诉我有关获得股票的任何信息。我也没有目录服务的经验,所以我不知道我错过了什么。
编辑2:
评论中链接的代码存在其他问题。它遍历Active Directory以查找计算机,而不检查当前用户是否可以访问每个计算机。返回的计算机列表包括Active Directory中的所有计算机帐户,包括未打开的计算机帐户。它很慢。在我的位置,我写的代码必须循环遍历所有用户和&群组到达计算机帐户之前。
当用户展开网络选项时,我需要Windows资源管理器返回的确切计算机列表,以及用户展开计算机树节点时显示的每个计算机的共享列表。
如何获取此列表?
编辑3:
我找到了一篇包含我需要的代码的CodeProject文章。由于这个问题已经结束,我无法创造答案。但是,这是一个link to the article。基本上,我必须向WNetOpenEnum
拨打P / INVOKE电话,然后拨打一次或多次拨打WNetEnumResource
,并在完成所有操作后拨打WNetCloseEnum
。链接到的文章包含用于执行这些操作的C#代码。