2011-01-20 83 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); 
} 

那得到硬的了的方式。要點是,註冊表是你的朋友。