webForumDet fria alternativet

REG_DWORD

.NET

19 svar · 347 visningar · startad av firstchoice

Medlem sedan okt. 2001615 inlägg
Frågan#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?

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

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

Medlem sedan okt. 2001615 inlägg
#4

detta är väl rätt?

Const REG_DWORD As Long = 4
Medlem 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.

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

Medlem 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

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

Medlem 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

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

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

Medlem sedan okt. 2001615 inlägg
#12

:)

registry.jpg
Medlem 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).

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

Medlem sedan okt. 2001615 inlägg
#16

Yes jag använder SaveDword som du bifogade!

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

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

Medlem 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

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

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)