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;
            }
          
        } 

你可能感兴趣的:(C#查找局域网內所有電腦)