webForumDet fria alternativet

REG_DWORD

19 svar · 347 visningar · startad av firstchoice

firstchoiceMedlem sedan okt. 2001615 inlägg
#1

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?

nikoMedlem sedan juni 20022 599 inlägg
#2

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)
firstchoiceMedlem sedan okt. 2001615 inlägg
#3

funkar ändå inte :(
det står (invalid DWORD value) i registret

firstchoiceMedlem sedan okt. 2001615 inlägg
#4

detta är väl rätt?

Const REG_DWORD As Long = 4
nikoMedlem sedan juni 20022 599 inlägg
#5

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.

firstchoiceMedlem sedan okt. 2001615 inlägg
#6

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)

firstchoiceMedlem sedan okt. 2001615 inlägg
#7

samma skit!
får kanske göra en egen funktion för DWORD

ville igentligen har en funktion som klarade allt

nikoMedlem sedan juni 20022 599 inlägg
#8

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.

firstchoiceMedlem sedan okt. 2001615 inlägg
#9

niko: testar din funktion nu, funkar bra
men vad skall jag skicka in om jag vill få fram det Hexadecimala talet "2000000" i registret

nikoMedlem sedan juni 20022 599 inlägg
#10

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)
firstchoiceMedlem sedan okt. 2001615 inlägg
#11

så här vill jag att det skall se ut i registret efter jag kört funktionen!

firstchoiceMedlem sedan okt. 2001615 inlägg
#12

:)

registry.jpg
nikoMedlem sedan juni 20022 599 inlägg
#13

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

firstchoiceMedlem sedan okt. 2001615 inlägg
#14

men gör jag som du sak

Value=&H2000000
RegSetValueEx(hOpenKey, sKey, 0, REG_DWORD, Value, 4)

så blir det så här!

registry.jpg
nikoMedlem sedan juni 20022 599 inlägg
#15

Ö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?

firstchoiceMedlem sedan okt. 2001615 inlägg
#16

Yes jag använder SaveDword som du bifogade!

nikoMedlem sedan juni 20022 599 inlägg
#17

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.

firstchoiceMedlem sedan okt. 2001615 inlägg
#18

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 ?

firstchoiceMedlem sedan okt. 2001615 inlägg
#19

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

nikoMedlem sedan juni 20022 599 inlägg
#20

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?

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)