C#查找局域网內所有電腦

本文主要示例winform中的异步調用,至于活動目錄等相關知識,還需另查資料.

要完成本例的調試,需在一個窗体上加一個richTextBox1和一button1.點button1時會在richTextBox1中顯示所有域名及其下的各計算机名稱和IP地址.一台電計算机顯示一行,如果有多個IP也顯示在同一行.

using System.Threading;
using System.DirectoryServices;
using System.Net; 

   public void ShowComputers()
        {
            //or  use  "WinNT://your_domain_name" 
            DirectoryEntry root = new DirectoryEntry("WinNT:");
            DirectoryEntries domains = root.Children;
            domains.SchemaFilter.Add("domain");
            foreach (DirectoryEntry domain in domains)
            {
                AddContent(domain.Name+"/t/r");

                DirectoryEntries computers = domain.Children;
                computers.SchemaFilter.Add("computer");
                foreach (DirectoryEntry computer in computers)
                {
                    AddContent("/t" + computer.Name);
                    IPHostEntry iphe;
                    try
                    {
                        iphe = Dns.GetHostEntry(computer.Name);
                        foreach (IPAddress ip in iphe.AddressList)
                        {
                            AddContent("/t/t" + ip);//多個网卡顯示在一行
                        }
                        AddContent("/r");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                        AddContent("/t/t" + "未知"+"/r");
                    }

                    //DirectoryEntries users = computer.Children;

                }
            }

            Complete("完成");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.Text = "正在查找....";
            ThreadStart threadStart = new ThreadStart(ShowComputers);//通过ThreadStart委托告诉子线程执行什么方法
            Thread thread = new Thread(threadStart);
            thread.Start();
        }

        delegate void changeText(string result);
        private void AddContent(string content)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new changeText(AddContent), content);
            }
            else
            {
                this.richTextBox1.AppendText(content);
            }
           
        }
        private void Complete(string content)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new changeText(Complete), content);
            }
            else
            {
                this.button1.Text = content;
            }
          
        } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值