获取 XP、Vista 和 7 的 windows 序列号

Posted

技术标签:

【中文标题】获取 XP、Vista 和 7 的 windows 序列号【英文标题】:Get windows serial for XP, Vista and Seven 【发布时间】:2011-03-08 19:29:47 【问题描述】:

我正在使用此功能检索 Windows XP 许可证密钥,但它不适用于 Vista 和 Seven。如何获得这两个 Windows 版本的许可证密钥?

Public Function sGetXPKey() As String
    Dim result As String = String.Empty

    Dim RegKey As RegistryKey = _
    Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows NT\CurrentVersion", False)
    Dim bytDPID() As Byte = RegKey.GetValue("DigitalProductID")
    Dim bytKey(14) As Byte
    Array.Copy(bytDPID, 52, bytKey, 0, 15)
    Dim strChar As String = "BCDFGHJKMPQRTVWXY2346789"
    Dim strKey As String = ""

    For j As Integer = 0 To 24
        Dim nCur As Short = 0
        For i As Integer = 14 To 0 Step -1
            nCur = CShort(nCur * 256 Xor bytKey(i))
            bytKey(i) = CByte(Int(nCur / 24))
            nCur = CShort(nCur Mod 24)
        Next
        strKey = strChar.Substring(nCur, 1) & strKey
    Next

    For i As Integer = 4 To 1 Step -1
        strKey = strKey.Insert(i * 5, "-")
    Next

    Return strKey
End Function

【问题讨论】:

为什么需要获取序列号? 我正在使用序列号的 md5 哈希为我的程序生成许可证密钥。 为什么不直接使用加密值的哈希值呢?还是在 Vista+ 上读取失败的密钥? @Rowland Shaw:在 Windows 7 x64 上 bytDPID 为空 :)。我查看了注册表,还有一个 DigitalProductID4 键。但不确定是否会使用它。 但是,如果你只是在做一些独特的事情来做一个 MD5 散列,那就按原样使用它。 【参考方案1】:

我建议您使用 WMI,而不是使用注册表。特别是Win32_OperatingSystem 类,如here 所述。从该页面上可以看出,有一个名为 SerialNumber 的属性。

This 页面包含一个完整的示例(带有说明),说明如何操作。

【讨论】:

我在尝试定义 ManagementObjectSearcher、ManagementObjectCollection 和 Management.ManagementObject 时遇到错误。 @HasanGursoy:我认为您可能需要添加对System.Management 的引用(如果您之前没有这样做,请在Project 菜单上选择Add Reference,然后向下滚动到你需要的那个)。 嗯,是的,你是对的。我虽然 Imports System.Management 就足够了。 @HasanGursoy:这对于框架的公共部分来说已经足够了,但是其中一些你需要手动添加(Management 和 DirectoryServices 是我现在唯一能想到的,我用过的)需要那个)。

以上是关于获取 XP、Vista 和 7 的 windows 序列号的主要内容,如果未能解决你的问题,请参考以下文章

Vista 和 Windows 7 中的 OLEDB JET 错误,而不是 XP

我如何在 Windows(xp、vista、7)欢迎屏幕或锁定屏幕(如 VNC 或 Dame Ware)中进行交互

哪里是存储与XP,Vista和Windows 7兼容的日志文件的安全位置?

在 win xp Vista 和 Windows 7 上保存程序数据的位置

如何制作与 Vista/7 和 XP 兼容的图标?

Windows Vista 与Windows Xp的区别