获取产品密钥,域名,用户名等窗口详细信息。

时间:2012-12-13 06:35:22

标签: c# .net windows

如何获取操作系统详细信息,如操作系统Serial Number(操作系统产品密钥),User Domain NameUser NamePC Full Name? 获得它的最佳方式和最佳方式是什么?

3 个答案:

答案 0 :(得分:9)

系统环境

查看(静态)System.Environment类。

它具有MachineNameUserDomainNameUserName的属性。

System.Management

如果您正在寻找BIOS序列号(或其他硬件上的大量信息),您可以尝试System.Management命名空间,特别是SelectQueryManagementObjectSearcher

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_ProcessorMSDN上列出的其他人来获取有关该计算机的其他信息。这是通过WMI使用WQL

通过注册表

的Windows产品密钥

对于操作系统序列号,在许多版本的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网站上的示例。它具有以下属性:

ComputerNameUserDomianNameUserName ...等