logo one IT guy's personal web site
twitter icon flickr icon 500px icon

(Yet Another) Product Key Number Finder for Windows

Sometimes we need to get Windows Product Key Number from installed system because COA label is damaged or missing. The easiest way to do it is using Windows Product Key Finder and you can find plenty of them on the net. I've created another one which is really simple to use and portable without need to install on the target system.
The reason why I've created another key finder is that I needed simple one without need to get it installed (with creepy adware).
Source code available: Product Key Finder is written in C# and you can check it's source code on GitHub if you want.
Or you can just simple download it and give it a try: Product Key Finder for Windows looks like this:
Windows Product Key Finder 1.3
It's free to use, no installation needed, just run it on designated computer.
The app is targeting .NET Framework version 4 so if you want to use it on any older system (Windows 7 or XP) make sure you have this .NET version installed.
If anybody wants to use it on .NET 2 machines more often, let me know, I can compile .NET 2 version, too.

Product Key Numbers and Notebooks with Windows 8 and up

There may be problem with product key numbers if you try to get them from notebooks that were shipped with Windows 8 or up. Since Windows 8, system manufacturers can embed their activation codes into BIOS so there are no more COA labels placed anywhere on the notebooks. This is also the reason why you are not prompted to enter the key even during the fresh install of Windows and the system is then activated properly.

Windows 10 Upgrade Product Key Numbers

Also don't forget that Windows 10 upgrade from previous version of Windows 7/8/8.1 has generic product key that looks like this:
  • Windows 10 Home - YTMG3-N6DKC-DKB77-7M9GH-8HVX7
  • Windows 10 Pro - VK7JG-NPHTM-C97JM-9MPGT-3V66T
  • Windows 10 Home SL- BT79Q-G7N6G-PGBYW-4YWX6-6F4BT
  • Windows 10 Pro VL-MAK - QJNXR-7D97Q-K7WH4-RYWQ8-6MT6Y
These codes are quite useless because you don't need to enter them. Windows 10 upgraded from previous version are activated using hardware keys and can be clean installed and activated without entering any key during installation process.
Anyway let me know about your experience down below in the comments! Thanx!


16. 9. 2016 18:59:24, David Bayliss
Hi. Thank you for the WindowsProductKey code (I'm using from GitHub).

I'm just learning how to code in .Net (C#) and I'm still very much a novice ... so please ignore me if I am demonstrating ignorance, but I found that for the behaviour I desire using KeyDecoder.cs I needed to change:
var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,

(So I can use in a Console app. set to AnyCPU ... and I tested this on a 32bit Windows 10 machine (64bit CPU though) and it seemed to work fine).

Again, thank you ... and apologies if I am suggesting something silly out of ignorance.

Kind Regards

Dave (Stockport, UK).
6. 2. 2019 16:57:41, Vandrey Trindade

Great! This is the first time that I get the correct key from Windows 10 using DigitalProductID.
My question is, does that key have any use?
Can I use it to activate Windows 10 if Windows doesn't detect it automatically?
10. 2. 2019 14:56:34, mrpear
[Vandrey Trindade] Yes, you can use it for installation and for activation. But be careful, if the key has been used already you can have problems activating different installation. And make sure that the key is valid and not some kind of generic key, you must give it a try.
11. 8. 2019 20:12:12, Chip
Two comments.

1. If you allow "DigitalProductID" to be valid, this allows your code to work with other Microsoft products without throwing an exception over the lowercase 'd' versus uppercase 'D'.

2. The check for isWin8 in DecodeProductKeyWin8AndUp() keeps only bit 0 after dividing by 6. The next line is expecting isWin8 to be greater than 1, but it cannot be. This gives the appearance that setting isWin8 to either 0 or 1 is not correct. I do not have a Windows 8 system to test what should be done to fix this.

3. The ProductId value can be converted to a string with a single function, and manipulated slightly with DecodeProductKeyWin8AndUp() to produce strings with the letter 'N' in its correct place. This snippet can be used:

private const string digits = "BCDFGHJKMPQRTVWXY2346789";

/// <summary>
/// Decodes Windows Product Key from the DigitalProductId.
/// This method applies to DigitalProductId from Windows 7 or lower versions of Windows.
/// </summary>
/// <param name="digitalProductId">DigitalProductId to decode</param>
/// <returns>Decoded Windows Product Key as a string</returns>
private static string DecodeProductKey(byte[] digitalProductId)
var key = DecodeProductKeyIntoString(digitalProductId);
for (var i = 5; i < key.Length; i += 6)
key = key.Insert(i, "-");

return key;

/// <summary>
/// Decodes Windows Product Key from the DigitalProductId.
/// This method applies to DigitalProductId from Windows 8 or newer versions of Windows.
/// </summary>
/// <param name="digitalProductId">DigitalProductId to decode</param>
/// <returns>Decoded Windows Product Key as a string</returns>
public static string DecodeProductKeyWin8AndUp(byte[] digitalProductId)
var key = String.Empty;
byte isWin8 = (byte)((digitalProduc...
13. 8. 2019 19:42:42, Chip
Hi, thank you for your comments. But I don't get the idea about 1), can you give me some examples?

If you want to comment my code or suggest changes, GitHub repo is better to do so.

4. 1. 2020 2:00:39, David
There is some discrepancies for finding the right digitalProductId. Under the Win NT/Current Version there is a Default ProductId which then opens up to two DPI keys, DigitalProductId and DigitalProductId4. Now the surprise is finding anothjer listing of Default ProductId2 just after the first one which seems to have the same two Digital keys plus more info. I have my own script decoder and guess what, the first two keys give differnet PKs from the second default ProductId2. Obviously some odd slight of hand things going on.

I suspect that the second one is when the Current OS is upgraded. This happened to me going from Win 7 HP to Win 10 HP. I then put an OEM Win 10 Pro key and it did upgrade but it won't activate. This was created from the MS Media Creation tool free download upgrade. The issue was due to having a digital Product ID versus a Product Key. I had successfully done this on another PC going from Win 7 HP to win 10 HD and also upgrading to win 10 pro but it DID activate. Big M says impossible. I downgraded back to win 7 HP rather than fight with them. I am going to upgrade to win 7 pro and then do the MCT upgrade to Win 10 pro. Buying keys for $200 each is too expensive. I have 7 PCs in my home LAN.

If you follow my story and know something I don't, please enlighten me.
21. 12. 2021 1:05:09, Bruce
You stated:
If anybody wants to use it on .NET 2 machines more often, let me know, I can compile .NET 2 version, too.

Hi Pavel, My name is Bruce. I'm a retired IT guy (72 years old) and in my spare time (which I have lots of) I collect old discarded PCs and try to clean them up to give to young kids for their first computer. My preference is to do a clean install of the existing operating system to clean out all the old junk. Therefor it would be nice to be able to read the current existing product key to be used for the fresh O/S installation. Sometimes I'm working with a Win9x machine so capabilities for that would also be welcome. Thanks for the hard work you've put into this project.

What do you think?

(not requiered and non public, used for further contact)