如何获取操作系统详细信息,如操作系统Serial Number
(操作系统产品密钥)User Domain Name
、User Name
和PC Full Name
?获得它的最佳方式和最佳方式是什么?
3 回答
系统.环境
查看(静态)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;
}
您可以通过查询获得有关机器的其他信息,例如MSDNWin32_Processor
上列出的或其他信息。这是使用via 。WMI
WQL
通过注册表的 Windows 产品密钥
对于操作系统序列号,在许多版本的 Windows 中,它存储在注册表中HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId
,但它是某种编码形式,需要解码才能获得产品密钥。
您可以使用以下方法解码此值,可在此处找到(但为清楚起见稍作修改)。
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/它使用上面给出的方法并提供有关机器的一些附加信息。
您需要使用IPGlobalProperties.GetIPGlobalProperties 方法 来获取网络相关信息:
var conInfo = IPGlobalProperties.GetIPGlobalProperties();
Console.WriteLine(conInfo.HostName);
Console.WriteLine(conInfo.DomainName);
...
对于机器名称,请使用Environment.MachineName 属性:
Console.WriteLine(System.Environment.MachineName);
您是否尝试过Systeminformation 类,它提供了有关当前系统环境的大量信息,请查看 MSDN 网站上的示例。它具有以下特性: