I had customers that are purchasing a single software license but using it on multiple computers so I wanted to prevent them from doing so. The solution I have found was to generate a license key that is unique for each computer.
How? Using a DLL called Hardware ID Extractor, I can read the unique hardware ID of each computer. The DLL is easy to use. To get the CPU ID for example you simply call: GetCPUID.
The first thing you will ask yourself is: does the ID persist after the user formats the PC and reinstalls Windows. The answer is YES (hooray!). It works because this neat DLL reads the ID that is written (permanently) in hardware, not from Windows registry key.
And yes, it is compatible with all programming languages.
Link: Hardware ID Extractor library
CPU ID (unique hardware ID)
CPU current running speed
CPU theoretic speed (CPU rated speed)
Total Physical ( Total physical memory in bytes )
Avail Physical ( Physical memory left in bytes )
Total PageFile ( Total page file in bytes )
Available PageFile( Page file left in bytes )
Total Virtual( Total virtual memory in bytes )
Available Virtual ( Virtual memory left in bytes )