2011-01-20 82 views
14

有没有办法通过使用c#脚本来获取以下信息。在windows机器上获取pc(系统)信息 - C#脚本

PC名称 服务标签 CPU类型 CPU速度 大小的C:\驱动器, 安装的RAM, 操作系统名称, OS产品密钥, Office版本和Office产品密钥。

谢谢。

+10

顺便说一句,C#通常不称为'脚本' – 2011-01-20 00:46:54

回答

10
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Management; //This namespace is used to work with WMI classes. For using this namespace add reference of System.Management.dll . 
using Microsoft.Win32;  //This namespace is used to work with Registry editor. 

namespace OperatingSystemInfo1 
{ 
    class TestProgram 
    { 
     static void Main(string[] args) 
     { 
      SystemInfo si = new SystemInfo();  //Create an object of SystemInfo class. 
      si.getOperatingSystemInfo();   //Call get operating system info method which will display operating system information. 
      si.getProcessorInfo();     //Call get processor info method which will display processor info. 
      Console.ReadLine();      //Wait for user to accept input key. 
     } 
    } 
    public class SystemInfo 
    { 
     public void getOperatingSystemInfo() 
     { 
      Console.WriteLine("Displaying operating system info....\n"); 
      //Create an object of ManagementObjectSearcher class and pass query as parameter. 
      ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_OperatingSystem"); 
      foreach (ManagementObject managementObject in mos.Get()) 
      { 
       if (managementObject["Caption"] != null) 
       { 
        Console.WriteLine("Operating System Name : " + managementObject["Caption"].ToString()); //Display operating system caption 
       } 
       if (managementObject["OSArchitecture"] != null) 
       { 
        Console.WriteLine("Operating System Architecture : " + managementObject["OSArchitecture"].ToString()); //Display operating system architecture. 
       } 
       if (managementObject["CSDVersion"] != null) 
       { 
        Console.WriteLine("Operating System Service Pack : " + managementObject["CSDVersion"].ToString());  //Display operating system version. 
       } 
      } 
     } 

     public void getProcessorInfo() 
     { 
      Console.WriteLine("\n\nDisplaying Processor Name...."); 
      RegistryKey processor_name = Registry.LocalMachine.OpenSubKey(@"Hardware\Description\System\CentralProcessor\0", RegistryKeyPermissionCheck.ReadSubTree); //This registry entry contains entry for processor info. 

      if (processor_name != null) 
      { 
       if (processor_name.GetValue("ProcessorNameString") != null) 
       { 
        Console.WriteLine(processor_name.GetValue("ProcessorNameString")); //Display processor ingo. 
       } 
      } 
     } 
    } 
} 
0

对于这样添加Microsoft.VB在Refrence。 用于添加此项右键单击解决方案探索的Refrence文件夹,然后单击添加Refrences,然后单击.NET并单击Microsoft.visualBasic,然后单击确定。 这样做进口这个喜欢后:

using Microsoft.VisualBasic.Devices; 

      public void getSystemDetails() 
      { 
       UserName.Text = Environment.UserName; // User name of PC 
       LabelOS.Text = getOSInfo(); // OS version of pc 
       MachineTxt.Text = Environment.MachineName;// Machine name 
       string OStype = ""; 
       if (Environment.Is64BitOperatingSystem) { OStype = "64-Bit, "; } else { OStype = "32-Bit, "; } 
       OStype += Environment.ProcessorCount.ToString() + " Processor"; 
       label8.Text = OStype; // Processor type 

       ulong toalRam = cinfo.TotalPhysicalMemory; 
       double toal = Convert.ToDouble(toalRam/(1024 * 1024)); 
       int t = Convert.ToInt32(Math.Ceiling(toal/1024).ToString()); 
       label6.Text = t.ToString() + " GB";// ram detail 
      } 

     public string getOSInfo() 
     { 
      //Get Operating system information. 
      OperatingSystem os = Environment.OSVersion; 
      //Get version information about the os. 
      Version vs = os.Version; 

      //Variable to hold our return value 
      string operatingSystem = ""; 

      if (os.Platform == PlatformID.Win32Windows) 
      { 
       //This is a pre-NT version of Windows 
       switch (vs.Minor) 
       { 
        case 0: 
         operatingSystem = "95"; 
         break; 
        case 10: 
         if (vs.Revision.ToString() == "2222A") 
          operatingSystem = "98SE"; 
         else 
          operatingSystem = "98"; 
         break; 
        case 90: 
         operatingSystem = "Me"; 
         break; 
        default: 
         break; 
       } 
      } 
      else if (os.Platform == PlatformID.Win32NT) 
      { 
       switch (vs.Major) 
       { 
        case 3: 
         operatingSystem = "NT 3.51"; 
         break; 
        case 4: 
         operatingSystem = "NT 4.0"; 
         break; 
        case 5: 
         if (vs.Minor == 0) 
          operatingSystem = "Windows 2000"; 
         else 
          operatingSystem = "Windows XP"; 
         break; 
        case 6: 
         if (vs.Minor == 0) 
          operatingSystem = "Windows Vista"; 
         else 
          operatingSystem = "Windows 7 or Above"; 
         break; 
        default: 
         break; 
       } 
0

你有电脑名称,你想要的值,这样你就可以从Environment.MachineName,如果你想在本地计算机得到这个,或者你可以做IPHostEntry hostEntry = Dns.GetHostEntry(ip);然后string host = hostEntry.HostName;使用DNS来如果您只有IP,请解析远程计算机的名称。

您可以从注册表中获得的某些信息,您检查远程注册表运行之后,假设你想在远程计算机:

ServiceController sc = new ServiceController("RemoteRegistry", computer); 
if (sc.Status.Equals(ServiceControllerStatus.Running)) 
{ 
    // do your stuff 
} 

,你可以开始,如果发现停止:

if (sc.Status.Equals(ServiceControllerStatus.Stopped) || 
sc.Status.Equals(ServiceControllerStatus.StopPending)) 
{ 
    sc.Start(); 
} 

添加此using语句到你的页面的顶部:

using Microsoft.Win32; 

计算机名称,你可以到HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制\计算机名\ ActiveComputerName:

string path = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName"; 
RegistryKey rk = Registry.OpenRemoteBaseKey(RegistryHive.LocalMachine, computer).OpenSubKey(path); 
string pcName = rk.GetValue("computerName").ToString(); 

对于任何本地注册表的命令,只是删除Registry.OpenRemoteBaseKey(, computer)

对于CPU名称:

string path = @"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0"; 
RegistryKey rk = Registry.OpenRemoteBaseKey(RegistryHive.LocalMachine, computer).OpenSubKey(path); 
string cpuName = rk.GetValue("processorNameString").ToString(); 

对于操作系统名称和重点:

string path = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion"; 
RegistryKey rk = Registry.OpenRemoteBaseKey(RegistryHive.LocalMachine, computer).OpenSubKey(path); 
string osName = rk.GetValue("productName").ToString(); 
string servicePack = rk.GetValue("CSDVersion").ToString(); 
byte[] digitalProductId = registry.GetValue("DigitalProductId") as byte[]; 
string osProductKey = DecodeProductKey(digitalProductId); 

Geeks With Blogs用于获取产品密钥:

public static string DecodeProductKey(byte[] digitalProductId) 
{ 
    // Offset of first byte of encoded product key in 
    // 'DigitalProductIdxxx" REG_BINARY value. Offset = 34H. 
    const int keyStartIndex = 52; 
    // Offset of last byte of encoded product key in 
    // 'DigitalProductIdxxx" REG_BINARY value. Offset = 43H. 
    const int keyEndIndex = keyStartIndex + 15; 
    // Possible alpha-numeric characters in product key. 
    char[] digits = new char[] 
    { 
    'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R', 
    'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9', 
    }; 
    // Length of decoded product key 
    const int decodeLength = 29; 
    // Length of decoded product key in byte-form. 
    // Each byte represents 2 chars. 
    const int decodeStringLength = 15; 
    // Array of containing the decoded product key. 
    char[] decodedChars = new char[decodeLength]; 
    // Extract byte 52 to 67 inclusive. 
    ArrayList hexPid = new ArrayList(); 
    for (int i = keyStartIndex; i <= keyEndIndex; i++) 
    { 
    hexPid.Add(digitalProductId[i]); 
    } 
    for (int i = decodeLength - 1; i >= 0; i--) 
    { 
    // Every sixth char is a separator. 
    if ((i + 1) % 6 == 0) 
    { 
     decodedChars[i] = '-'; 
    } 
    else 
    { 
     // Do the actual decoding. 
     int digitMapIndex = 0; 
     for (int j = decodeStringLength - 1; j >= 0; j--) 
     { 
     int byteValue = (digitMapIndex << 8) | (byte)hexPid[j]; 
     hexPid[j] = (byte)(byteValue/24); 
     digitMapIndex = byteValue % 24; 
     decodedChars[i] = digits[digitMapIndex]; 
     } 
    } 
    } 
    return new string(decodedChars); 
} 

那得到硬的了的方式。要点是,注册表是你的朋友。