Ga naar inhoud

[VB6] Werken met DWORD waarden in de registry van WinXP


anoniem

Aanbevolen berichten

Hoi, Ik moet via VB6 een DWORD-waarde in het register gaan lezen, de waarde testen en indien nodig aanpassen. Als ik met REGEDIT de waarde ga controleren dan zie ik voor de waarde 0x00000003(3) als ik rechtsklik en kies voor wijzigen dan zie ik 0000 03 00 00 00 Nu met mijn VB6 programma ga ik die waarde ook lezen met deze funktie: Public Function GetWaarde(RegKeyRoot As Long, RegKeyName As String, KeyDateType As Long, KeyValueName As String) Dim OpenKey As Long, hKey As Long, strTempVal As String, KeyValSize As Long, lngI As Long OpenKey = RegOpenKeyEx(RegKeyRoot, RegKeyName, 0, KEY_ALL_ACCESS, hKey) strTempVal = String$(1024, 0) KeyValSize = 1024 OpenKey = RegQueryValueEx(hKey, KeyValueName, 0, KeyDateType, strTempVal, KeyValSize) If (Asc(Mid(strTempVal, KeyValSize, 1)) = 0) Then strTempVal = Left(strTempVal, KeyValSize - 1) Else strTempVal = Left(strTempVal, KeyValSize) End If Select Case KeyDateType Case 1, 3: GetWaarde = strTempVal Case 4: For lngI = Len(strTempVal) To 1 Step -1 GetWaarde = Format(Hex(Asc(Mid(strTempVal, lngI, 1))), "00") Next GetWaarde = Format$("&h" + GetWaarde) End Select OpenKey = RegCloseKey(hKey) End Function Deze funktie roep ik op met: Waarde = GetWaarde(HKEY_USERS, Sleutel, REG_DWORD, SubSleutel) Nu wil ik de inhoud van Waarde testen en ik moet alleen is verder doen in dien deze verschillend is van 0x00000003(3) Ik heb al allerlei vormen van test gedaan maar dat loopt altijd mis. vb: [COLOR=BLUE] If CStr(Waarde) = CStr("3") Then .... SubSleutel) [/COLOR Wie kan mij vertellen hoe ik dat wel moet testen? Bedankt op voorhand, Guido
Link naar reactie
Ik heb een simpele functie gemaakt in een class bestand dat ik compileer als dll bestand. De (ingekorte) functie ziet er als volgt uit: [code:1:507932abff] Private RetValue As Long Private KeyHandle As Long Private StringLength As Long Private RType As Long Private LongValue As Long ' MainKey = HKEY_BLA_BLA en is standaard HKEY_CURRENT_USER Public Function ReadLong(KeyPath As String, KeyName As String, Optional MainKey As Long = &H80000001) As Long ' maak van -1 een mogelijke foutwaarde ReadLong = -1 ' Kijk of de sleutel bestaat en open deze RetValue = RegOpenKeyEx(MainKey, KeyPath, 0, KeyAllAccess, KeyHandle) If RetValue = ERROR_SUCCESS Then ' Haal de waarde van deze sleutel op StringLength = 4 ' een long is maar 4 bytes groot RetValue = RegQueryValueEx(KeyHandle, KeyName, ByVal 0, RType, LongValue, StringLength) If RetValue = ERROR_SUCCESS Then ReadLong = LongValue End If End If RetValue = RegCloseKey(KeyHandle) End Function[/code:1:507932abff] Op deze manier retourneer je een Long waarde en kun je makkelijk testen of deze voldoet. Wat hier mist zijn foutafhandelingen zoals bijvoorbeeld de controle op RType die de soort waarde (string, dword) van de sleutel aangeeft. Ook gebruikt deze functie hier geen ASC of CLng of TRIM of dergelijke, maar dit kun je allemaal zelf inbouwen als je daar zin in hebt. Voorlopig werkt dit met 'normale' bekende waarden.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...