This code will get and set string registry values, and it's very compact. If excess code makes you angry, use this.
.lib "advapi32.dll"
RegQueryValueEx%(hKey%,lpValueName$,lpReserved%,lpType*,lpData*,lpcbData*):"RegQueryValueExA"
RegSetValueEx%(hKey%,lpValueName$,Reserved%,dwType%,lpData*,cbData%):"RegSetValueExA"
RegCreateKey% (hKey%, lpSubKey$, phkResult*) : "RegCreateKeyA"
RegDeleteKey% (hKey%, lpSubKey$) : "RegDeleteKeyA"
regkey=OpenRegKey("testregkey")
If regkey
setregkey regkey,"test","Hello"
Notify GetRegKey(regkey,"test")
closeregkey result
EndIf
Function OpenRegKey%(Pathkey$)
If Right(pathkey,1)<>"\" pathkey=pathkey+"\"
pkresult=CreateBank(4)
If RegCreateKey($80000002,"SOFTWARE\"+pathkey$,pkresult)=0
open_hkey=PeekInt(pkresult,0)
EndIf
FreeBank pkresult
Return open_hkey
End Function
Function CloseRegKey%(hKEY)
Return RegCloseKey(hKEY)
End Function
Function GetRegKey$(hKEY,itemname$,defaultvalue$="")
bank_type=CreateBank(4)
bank_data=CreateBank(255)
bank_size=CreateBank(4)
PokeInt bank_size,0,BankSize(bank_data)
If RegQueryValueEx(hKEY,ItemNAME$,0,bank_type,bank_data,bank_size)=0
datatype=PeekInt(bank_type,0)
If datatype=1
size=PeekInt(bank_size,0)
For n=0 To size-2
value$=value+Chr(PeekByte(bank_data,n))
Next
Else
value=defaultvalue
EndIf
Else
value=defaultvalue
EndIf
FreeBank bank_type
FreeBank bank_data
FreeBank bank_size
Return value
End Function
Function SetRegKey%(hKEY,itemname$,value$)
size=Len(value)+1
bank_data=CreateBank(size)
For n=0 To size-2
PokeByte bank_data,n,Asc(Mid(value,n+1,1))
Next
result=RegSetValueEx(hKEY,itemname,0,1,bank_data,size)
FreeBank bank_data
If result=0 Return True
End Function
|