Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

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

guido1
2 antwoorden
  • 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:

  • 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.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.