如何获取操作系统详细信息,如操作系统Serial Number
(操作系统产品密钥),User Domain Name
,User Name
和PC Full Name
?
获得它的最佳方式和最佳方式是什么?
答案 0 :(得分:9)
查看(静态)System.Environment
类。
它具有MachineName
,UserDomainName
和UserName
的属性。
如果您正在寻找BIOS序列号(或其他硬件上的大量信息),您可以尝试System.Management
命名空间,特别是SelectQuery
和ManagementObjectSearcher
。
var query = new SelectQuery("select * from Win32_Bios");
var search = new ManagementObjectSearcher(query);
foreach (ManagementBaseObject item in search.Get())
{
string serial = item["SerialNumber"] as string;
if (serial != null)
return serial;
}
您可以通过查询Win32_Processor
或MSDN上列出的其他人来获取有关该计算机的其他信息。这是通过WMI
使用WQL
。
对于操作系统序列号,在许多版本的Windows中,它存储在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId
的注册表中,但是它采用某种编码形式,需要进行解码才能获得产品密钥。
您可以使用以下方法对此值进行解码,找到here(但为了清晰起见,稍作修改)。
public string DecodeProductKey(byte[] digitalProductId)
{
// Possible alpha-numeric characters in product key.
const string digits = "BCDFGHJKMPQRTVWXY2346789";
// Length of decoded product key in byte-form. Each byte represents 2 chars.
const int decodeStringLength = 15;
// Decoded product key is of length 29
char[] decodedChars = new char[29];
// Extract encoded product key from bytes [52,67]
List<byte> hexPid = new List<byte>();
for (int i = 52; i <= 67; i++)
{
hexPid.Add(digitalProductId[i]);
}
// Decode characters
for (int i = decodedChars.Length - 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);
}
或者,我找到了一个开源的c#项目,据说可以为任何版本的Windows提取产品密钥:http://wpkf.codeplex.com/它使用上面给出的方法并提供有关该机器的一些其他信息。
答案 1 :(得分:0)
您需要使用IPGlobalProperties.GetIPGlobalProperties Method 获取网络相关信息:
var conInfo = IPGlobalProperties.GetIPGlobalProperties();
Console.WriteLine(conInfo.HostName);
Console.WriteLine(conInfo.DomainName);
...
对于机器名称使用Environment.MachineName Property:
Console.WriteLine(System.Environment.MachineName);
答案 2 :(得分:0)
您是否尝试了Systeminformation class它提供了大量有关当前系统环境的信息,请查看MSDN网站上的示例。它具有以下属性: