Vraag & Antwoord

Programmeren

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

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: [COLOR=BLUE] If CStr(Waarde) = CStr("3") Then .... SubSleutel) [/COLOR Wie kan mij vertellen hoe ik dat wel moet testen? Bedankt op voorhand, Guido
  • 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

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

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