No-nonsense registry functions

BlitzPlus Forums/BlitzPlus Programming/No-nonsense registry functions

JoshK(Posted 2005) [#1]
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