hur sparar jag ett REG_DWORD
får inte rätt på vilken typ var värde jag skall skicka in
RegSetValueEx(hOpenKey, sKey, 0, REG_DWORD, Value, lBytes)
vad skall Value vara för något? Long?
19 svar · 347 visningar · startad av firstchoice
hur sparar jag ett REG_DWORD
får inte rätt på vilken typ var värde jag skall skicka in
RegSetValueEx(hOpenKey, sKey, 0, REG_DWORD, Value, lBytes)
vad skall Value vara för något? Long?
vad skall Value vara för något? Long?
Ja, precis. DWORD=Double Word. Word = 2Byte->DWORD=4 Bytes=Long.
Exempel:
Dim Value as long
Value=7 'Tex
RegSetValueEx(hOpenKey, sKey, 0, REG_DWORD, Value, 4)
funkar ändå inte :(
det står (invalid DWORD value) i registret
Konstigt. Jag har inga problem. Brukar använda denna funktion:
Function SaveDword(ByVal Hkey As Long, ByVal strPath As String, ByVal strValueName As String, ByVal lData As Long)
Dim lResult As Long
Dim keyhand As Long
Dim r As Long
r = RegCreateKey(Hkey, strPath, keyhand)
lResult = RegSetValueEx(keyhand, strValueName, 0&, REG_DWORD, lData, 4)
r = RegCloseKey(keyhand)
End Function
Hur ser din deklaration av RegSetValueEx ut? Du har väl inte ByVal vid femte parametern? Isåf måste du anropa med:
RegSetValueEx(hOpenKey, sKey, 0, REG_DWORD, VarPtr(Value), 4)
detta är väl rätt?
Ja.
så här ser deklarationen ut
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
(ByVal Hkey As Long, _
ByVal lpValueName As String, _
ByVal Reserved As Long, _
ByVal dwType As Long, _
ByVal lpData As String, _
ByVal cbData As Long) As Long
skall genast testa VarPtr(Value)
samma skit!
får kanske göra en egen funktion för DWORD
ville igentligen har en funktion som klarade allt
Använd:
ByVal lpData As [b]Any[/b]
och anropa med VarPtr(Value). Det bör funka.
Eller:
lpData As [b]Any[/b]
och anropa enbart med Value.
niko: testar din funktion nu, funkar bra
men vad skall jag skicka in om jag vill få fram det Hexadecimala talet "2000000" i registret
Lite osäker på vad du menar. Om du vill spara det hexadecimal talet 2000000 så:
Value=&H2000000
RegSetValueEx(hOpenKey, sKey, 0, REG_DWORD, Value, 4)
så här vill jag att det skall se ut i registret efter jag kört funktionen!
:)
OK. Men då ska du göra som jag skrev. Base har inget med registret att göra det är ett visningsläge i programmet regedit. Det är alltså inget du kan påverka från kod (vad jag vet).
men gör jag som du sak
Value=&H2000000
RegSetValueEx(hOpenKey, sKey, 0, REG_DWORD, Value, 4)
så blir det så här!
Öh? Det skulle jag vilja hävda är omöjligt. Öppnar du verkligen nyckeln innan du skriver så att det inte är ett gammalt värde du ser? Använder du funktionen SaveDword ovan?
Yes jag använder SaveDword som du bifogade!
Om din deklaration av RegSetValueEx ser ut ungefär så här:
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
(ByVal Hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
och din deklaration av SaveDword ser ut så här:
Function SaveDword(ByVal Hkey As Long, ByVal strPath As String, _
ByVal strValueName As String, ByVal lData As Long)
Dim lResult As Long
Dim keyhand As Long
Dim r As Long
r = RegCreateKey(Hkey, strPath, keyhand)
lResult = RegSetValueEx(keyhand, strValueName, 0&, REG_DWORD, lData, 4)
r = RegCloseKey(keyhand)
End Function
och du anropar ungefär så här:
Dim value As Long
value = &H2000000
SaveDword HKEY_LOCAL_MACHINE, "Software\Whatever", "MAXPOSTSIZE", value
så kan du inte få det resultatet. Det är nåt som inte stämmer. Kolla igenom din kod.
hehe :e
nu funkar det!
hade deklarerat RegSetValueEx så här
ByVal lpData As String
och inte
ByVal lpData As Any
men det går bra nu att skicka in strängar också va?
alltså till RegSetValueEx ?
nu börjar jag bli tosig!!!!!!!!!
kör jag
ByVal lpData As Any
funkar det bra med vanliga sträng värden
men skall jag ha ett DWORD får jag ändra till bara
lpData As Any
men då får stängvärdena fel värde...
vad fan skall man göra
Kanske .. Kanske inte .. Det beror helt på hur man gör.
Brukar själv deklarera utan ByVal:
lpData As Any
Och sen ange Byval för strängar i anropet:
r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata))
men inte för DWORDS:
lResult = RegSetValueEx(keyhand, strValueName, 0&, REG_DWORD, lData, 4)
Om du deklarerar med ByVal så borde du anropa så här:
r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, strdata, Len(strdata))
lResult = RegSetValueEx(keyhand, strValueName, 0&, REG_DWORD, VarPtr(lData), 4)
Tycker jag. Men jag kan ha fel ..?
/red: Jag svarade innan ditt inlägg. Men du fattar poängen?