Ho provato la funzione e per ciò che mi concerne funziona. Ti posto il codice da me provato invitandoti a controllare in modo particolare i valori assegnati alle variabili HKEY_LOCAL_MACHINE e KEY_READ che ho impostato come da esempio:
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Integer, ByVal lpSubKey As String, ByVal ulOptions As Integer, ByVal samDesired As Integer, ByRef phkResult As Integer) As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim nomeChiave As String
Dim handle As Integer
Dim HKEY_LOCAL_MACHINE As Integer = &H80000002
Dim KEY_READ As Integer = &H20019
nomeChiave = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
If RegOpenKeyEx(HKEY_LOCAL_MACHINE, nomeChiave, 0, KEY_READ, handle) = 0 Then
MessageBox.Show("Chiave ESISTENTE") 'ERROR_SUCCESS
Else
MessageBox.Show("Chiave INESISTENTE") 'ERRORE COME INDICATO IN Winerror.h
End If
End Sub
Ovviamente devi possedere i diritti d'amministratore per aprire tale chiave ed essa deve essere correttamente presente nel registro. Ma questo credo già lo sai