The following code sample used to return me windows id before, but now it doesn\'t work, and returns empty string, dunno why.
function GetWindowsID: string
That is because the virtualized key '\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\' doesn't contain the 'ProductID' item.
Modify your code to create the TRegistry instance with
Registry := TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);
where KEY_WOW64_64KEY = $0100. That will give you the expected result.
Alternatively, use DSiWin32 and call
DSiReadRegistry('\Software\Microsoft\Windows NT\CurrentVersion',
'ProductID', '', HKEY_LOCAL_MACHINE, KEY_QUERY_VALUE OR KEY_WOW64_64KEY);