当前位置:编程学习 > C#/ASP.NET >>

一个关于电脑部分信息的小程序

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.Diagnostics;
using System.Threading;

namespace Test_CPU_Info
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Process[] MyProcesses;
        Thread td;
        Thread mey;
        Thread bty;

        private void myUser()
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_Processor");
            foreach (ManagementObject myobject in searcher.Get())
            {
                this.lb_1.Text = myobject["LoadPercentage"].ToString() + " %";//CPU使用率
            }
        }

        private void myInfo()
        {
            ManagementClass cimobject = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moc = cimobject.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                this.lb_2.Text = mo.Properties["ProcessorId"].Value.ToString();//CPU序列号

            }

            ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); 
            ManagementObjectCollection moc1 = cimobject1.GetInstances(); 
            foreach (ManagementObject mo in moc1) 
            { 
                this.lb_6.Text = (string)mo.Properties["Model"].Value;//磁盘序列号 
            }        
            
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");   
            ManagementObjectCollection moc2 = mc.GetInstances();   
            foreach(ManagementObject mo in moc2)
            {   
                if((bool)mo["IPEnabled"] == true)     
                    
                this.lb_7.Text = mo["MacAddress"].ToString();//MAC地址       
        
            }

            ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_baseboard");
            foreach (ManagementObject mo in mos.Get())
            {
                this.lb_8.Text = mo["SerialNumber"].ToString();//主板序列号
                break;
            }


        }

        private void Memory()
        {
            Microsoft.VisualBasic.Devices.Computer myInfo = new Microsoft.VisualBasic.Devices.Computer();
            //获取物理内存总量
            pbMemorySum.Maximum = Convert.ToInt32(myInfo.Info.TotalPhysicalMemory / 1024 / 1024);
            pbMemorySum.Value = Convert.ToInt32(myInfo.Info.TotalPhysicalMemory / 1024 / 1024);
            lblSum.Text = (myInfo.Info.TotalPhysicalMemory / 1024).ToString()+"KB";
            //获取可用物理内存总量
            pbMemoryUse.Maximum = Convert.ToInt32(myInfo.Info.TotalPhysicalMemory / 1024 / 1024);
            pbMemoryUse.Value = Convert.ToInt32(myInfo.Info.AvailablePhysicalMemory / 1024 / 1024);
            lblMuse.Text = (myInfo.Info.AvailablePhysicalMemory / 1024).ToString() + "KB";
            //获取虚拟内存总量
            pbVmemorysum.Maximum = Convert.ToInt32(myInfo.Info.TotalVirtualMemory / 1024 / 1024);
            pbVmemorysum.Value = Convert.ToInt32(myInfo.Info.TotalVirtualMemory / 1024 / 1024);
            lblVinfo.Text = (myInfo.Info.TotalVirtualMemory / 1024).ToString() + "KB";
            //获取可用虚拟内存总量
            pbVmemoryuse.Maximum = Convert.ToInt32(myInfo.Info.TotalVirtualMemory / 1024 / 1024);
            pbVmemoryuse.Value = Convert.ToInt32(myInfo.Info.AvailableVirtualMemory / 1024 / 1024);
            lblVuse.Text = (myInfo.Info.AvailableVirtualMemory / 1024).ToString() + "KB";
        }

        private void Battery()
        {
            ManagementClass mc = new ManagementClass("Win32_Battery");
            ManagementObjectCollection moc = mc.GetInstances();

            ManagementObjectCollection.ManagementObjectEnumerator mom = moc.GetEnumerator(); 
            if (mom.MoveNext())
            {
                if (mom.Current.Properties["EstimatedChargeRemaining"].Value.ToString() == "100")
                {
                    this.lb_12.Text = "使用交流电";
                }
                else
                {
                
                    this.lb_12.Text = mom.Current.Properties["EstimatedChargeRemaining"].Value.ToString() + "%";//电池电量
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
            MyProcesses = Process.GetProcesses();
            this.lb_11.Text = MyProcesses.Length.ToString();
            myInfo();
            myUser();
            Memory();
            Battery();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            MyProcesses = Process.GetProcesses();
            this.lb_11.Text = MyProcesses.Length.ToString();//获取进程总数量
            td = new Thread(new ThreadStart(myUser));
            bty = new Thread(new ThreadStart(Battery));
            mey = new Thread(new ThreadStart(Memory));
            td.Start();//配合Timer控件进行刷新
            mey.Start();//配合Timer控件进行刷新
            bty.Start();//配合Timer控件进行刷新
        }

     
    }
}


環境:vss2010 .NET 4.0 vss --------------------编程问答--------------------

附圖一張~ --------------------编程问答-------------------- --------------------编程问答-------------------- 先顶一下 --------------------编程问答-------------------- 我可以很明白地告诉你,你得到的所谓cpu序列号和磁盘序列号,都是型号编码(非唯一)的。 --------------------编程问答-------------------- http://product.pconline.com.cn/notebook_hdd/hitachi/302027.html
这里有和你硬盘一样id的硬盘

http://www.cpu-world.com/cgi-bin/CPUID.pl?CPUID=5015&RAW_DATA=1
EDX: BFEBFBFF     "...." 
这是调用cpuid获取的第二部分的某一段。 --------------------编程问答-------------------- 那该如何获取唯一 --------------------编程问答--------------------
引用 6 楼 config_man 的回复:
那该如何获取唯一


需要指出的是,只有Intel Pentium III才拥有可以辨识其唯一性的序列号,并且可以在bios中关闭。这一设计争议很大,所以Intel最终屈服了,并且之后的处理器再也没有这一特性。 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 7 楼 caozhy 的回复:
引用 6 楼 config_man 的回复:
那该如何获取唯一

需要指出的是,只有Intel Pentium III才拥有可以辨识其唯一性的序列号,并且可以在bios中关闭。这一设计争议很大,所以Intel最终屈服了,并且之后的处理器再也没有这一特性。


这样的呀,这个还真不知道,学习了~ --------------------编程问答--------------------
引用 8 楼 wangheng0411 的回复:
顶一下楼主


thanks~ --------------------编程问答--------------------
引用 7 楼 caozhy 的回复:
引用 6 楼 config_man 的回复:那该如何获取唯一

需要指出的是,只有Intel Pentium III才拥有可以辨识其唯一性的序列号,并且可以在bios中关闭。这一设计争议很大,所以Intel最终屈服了,并且之后的处理器再也没有这一特性。

学习。多谢指教。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,