Получить ключ продукта Windows 10 программным способом

Ключ продукта Windows 10 обычно хранится в реестре Windows. Ключ продукта можно найти в нескольких местах, в зависимости от обстоятельств. Вот несколько способов программного получения ключа продукта Windows 10 с использованием примеров кода:

Метод 1: использование VBScript

Set WshShell = CreateObject("WScript.Shell")
MsgBox "Windows 10 Product Key: " & WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")

Метод 2. Использование PowerShell

(Get-WmiObject -query 'select * from SoftwareLicensingService').OA3xOriginalProductKey

Метод 3. Использование C# (требуются права администратора)

using Microsoft.Win32;
class Program
{
    static void Main()
    {
        RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
        RegistryKey subKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
        var productKey = subKey.GetValue("DigitalProductId");
        System.Console.WriteLine("Windows 10 Product Key: " + DecodeProductKey((byte[])productKey));
    }
    public static string DecodeProductKey(byte[] digitalProductId)
    {
        const int keyOffset = 52;
        const int keySize = 15;
        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'
        };
        string productKey = string.Empty;
        int isWin8 = (byte)(digitalProductId[66] / 6 & 1);
        digitalProductId[66] = (byte)((digitalProductId[66] & 0xF7) | (isWin8 & 2) * 4);
        int cur = 0;
        for (int i = keyOffset + keySize - 1; i >= keyOffset; i--)
        {
            cur = 0;
            for (int j = 14; j >= 0; j--)
            {
                cur = cur * 256;
                cur = digitalProductId[j + keyOffset] + cur;
                digitalProductId[j + keyOffset] = (byte)(cur / 24);
                cur = cur % 24;
            }
            productKey = digits[cur] + productKey;
        }
        return productKey;
    }
}

Обратите внимание, что описанные выше методы могут работать не во всех сценариях, особенно если ключ продукта зашифрован или недоступен в реестре из-за OEM-установок или других факторов. Для получения ключа продукта всегда рекомендуется использовать встроенные механизмы активации, предоставляемые Microsoft.