Registry-Eintrag auslesen unter Windows 7 prof. geht nur in der IDE

17/06/2010 - 10:28 von Ahmed Martens | Report spam
Hallo Leute,

ich stehe hier vor einem Ràtsel und hoffe auf Erleuchtung.

Also ich möchte einen Reg-Zweig auslesen. In der IDE funktioniert das auch
absolut einwandfrei. Wenn ich aber das Programm als Admin-Starte, dann
erhalte ich immer einen leeren String. Das Programm ist als Admin für alle
User freigegeben.

Woran kann das liegen?

Gruß Ahmed
Antworten bitte nur in der Newsgroup.
 

Lesen sie die antworten

#1 Ahmed Martens
17/06/2010 - 10:59 | Warnen spam
Noch ein Nachtrag:

Der Zweig befindet sich in

HKEY_CURRENT_USER\Software\xxxx\xxxxx

Den Zweig für All-Users kann ich auslesen.
Wie gesagt, das Problem taucht in der IDE nicht auf. Dort funktioniert
alles einwandfrei. Nur nicht im laufenden Prozess.

Hier meine Funktion:

-

Option Explicit

' zunàchst die benötigten API-Deklarationen
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _
Alias "RegOpenKeyExA" (ByVal hKey As Long, _
ByVal lpSubKey As String, ByVal ulOptions As Long, _
ByVal samDesired As Long, phkResult As Long) As Long

Private Declare Function RegEnumValue Lib "advapi32.dll" _
Alias "RegEnumValueA" (ByVal hKey As Long, _
ByVal dwIndex As Long, ByVal lpValueName As String, _
lpcbValueName As Long, ByVal lpReserved As Long, _
lpType As Long, lpData As Byte, lpcbData As Long) _
As Long

Private Declare Function RegQueryValueEx Lib "advapi32.dll" _
Alias "RegQueryValueExA" (ByVal hKey As Long, _
ByVal lpValueName As String, ByVal lpReserved As Long, _
lpType As Long, lpData As Any, lpcbData As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long

Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_Local_Machine = &H80000002
Const HKEY_CURRENT_USER = &H80000001


Const KEY_QUERY_VALUE = &H1

Const REG_SZ = 1
Const ERROR_SUCCESS = 0

' Ermitteln aller Schlüsselnamen und der
' dazugehörigen Werte eines Registry-Zweigs
Public Function Reg_GetAllKeys(ByVal hKey As Long, _
ByVal sFolder As String, FindKey As String) As String

Dim sKeyName As String
Dim sBuffer As String
Dim bLen As Long
Dim lType As Long
Dim lHandle As Long
Dim lResult As Long
Dim nCount As Long
Dim tmp(0 To 254) As Byte
ReDim sValues(0) As String

' Registry-Zweig öffnen
lResult = RegOpenKeyEx(hKey, sFolder, 0&, _
KEY_QUERY_VALUE, lHandle)
If lResult = ERROR_SUCCESS Then
nCount = 0
Do
sKeyName = Space(255)
lResult = RegEnumValue(lHandle, nCount, sKeyName, _
Len(sKeyName), 0&, 0&, tmp(0), 256)
If lResult <> ERROR_SUCCESS Then Exit Do

' Schlüsselname
ReDim Preserve sValues(nCount)
sKeyName = Left$(sKeyName, InStr(sKeyName, _
vbNullChar) - 1)

If LCase(sKeyName) = LCase(FindKey) Then
' Wert des Schlüssels
sBuffer = Space$(255)
bLen = Len(sBuffer)
lType = REG_SZ
lResult = RegQueryValueEx(lHandle, sKeyName, 0&, _
lType, ByVal sBuffer, bLen)
If lResult = ERROR_SUCCESS Then
sBuffer = Left$(sBuffer, bLen)
While Right$(sBuffer, 1) = Chr$(0)
sBuffer = Left$(sBuffer, Len(sBuffer) - 1)
Wend
Reg_GetAllKeys = sBuffer
GoTo Ausgang:
End If
End If
' Schlüsselname;Wert
'sValues(nCount) = sKeyName + ";" + sBuffer

' Zàhler um eins erhöhen
nCount = nCount + 1
Loop
Ausgang:
' Registry-Zweig schliessen
RegCloseKey lHandle
End If

'Reg_GetAllKeys = sValues
End Function


Gruß Ahmed
Antworten bitte nur in der Newsgroup.

Ähnliche fragen