Skip to content

Instantly share code, notes, and snippets.

@CherryDT
Created January 17, 2017 17:17
Show Gist options
  • Save CherryDT/b9067b5860f0f74a13c5faafb7b66832 to your computer and use it in GitHub Desktop.
Save CherryDT/b9067b5860f0f74a13c5faafb7b66832 to your computer and use it in GitHub Desktop.
Simplified Windows registry reader/writer library for FreeBasic
' By David "Cherry" Trapp (2009)
' Fork of RegLib by porfirio: http://www.freebasic.net/forum/viewtopic.php?t=7072
Namespace RegObj
#Define REG_KEY_NOT_EXIST "REG_KEY_NOT_EXIST"
#Define REG_KEY_INVALID "REG_KEY_INVALID"
Type RegLib
Declare Constructor(root As HKEY,Key As String, create As Boolean=false, acc As Integer = KEY_ALL_ACCESS)
Declare Destructor()
Declare Function createMe() As Boolean
Declare Function deleteMe() As Boolean
Declare Function getValue(v As String) As String
Declare Function setValue(v As String, s As String) As Boolean
Declare Function getDwValue(v As String, errcheck As Boolean = FALSE) As Integer
Declare Function setDwValue(v As String, s As Integer) As Boolean
Declare Function deleteValue(v As String) As Boolean
Declare Property default() As String
Declare Property default(s As String)
exists As Boolean
Private:
hroot As HKEY
rkey As HKEY
Key As String
End Type
Constructor RegLib(root As HKEY,Key As String, create As Boolean=FALSE, acc As Integer = KEY_ALL_ACCESS)
this.hroot=root
this.key=Key
If RegOpenKeyEx(root, Strptr(Key), 0, acc, @this.rkey) <> ERROR_SUCCESS Then
If create Then
createMe()
Else
exists=false
Endif
Else
exists=true
Endif
End Constructor
Destructor RegLib()
RegCloseKey(rkey)
End Destructor
Function RegLib.createMe() As Boolean
If RegCreateKeyEx(hroot,Strptr(Key),0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,@rkey,0)=ERROR_SUCCESS Then
exists=true
Else
exists=false
Endif
Return exists
End Function
Function RegLib.deleteMe() As Boolean
If RegDeleteKey(hroot,Strptr(Key)) = ERROR_SUCCESS Then
exists=false
Return true
Else
exists=true
Return false
End If
End Function
Function RegLib.getValue(v As String) As String
If exists=false Then Return REG_KEY_NOT_EXIST
Dim out_ As Zstring * 101
Dim l As DWORD = 100
Dim t As DWORD
Var res = RegQueryValueEx(rkey, Strptr(v), NULL, @t, @out_, @l)
If (t <> REG_SZ And t <> REG_EXPAND_SZ) Then Return REG_KEY_INVALID
If res = ERROR_MORE_DATA Then
Var ret = Space(l)
If RegQueryValueEx(rkey, Strptr(v), NULL, @t, StrPtr(ret), @l) <> ERROR_SUCCESS Then
Return REG_KEY_INVALID
Else
ret = *StrPtr(ret)
Return ret
EndIf
ElseIf res = ERROR_SUCCESS Then
out_[100 - 1] = 0
Return out_
Else
Return REG_KEY_INVALID
EndIf
End Function
Function RegLib.setValue(v As String, s As String) As Boolean
If exists=false Then Return FALSE
Var s2 = s
If s2 = "" Then s2 = Chr(0)
Return RegSetValueEx(rkey,Strptr(v),0,REG_SZ,Strptr(s2),Len(s)+1)= ERROR_SUCCESS
End Function
Function RegLib.getDwValue(v As String, errcheck As Boolean = FALSE) As Integer
If exists=false Then Return IIf(errcheck, -1, 0)
Dim out_ As Integer
Dim l As DWORD = 4
Dim t As DWORD
If RegQueryValueEx(rkey, Strptr(v), NULL, @t, @out_, @l) <> ERROR_SUCCESS Or (t <> REG_DWORD) Then
Return IIf(errcheck, -1, 0)
EndIf
Return out_
End Function
Function RegLib.setDwValue(v As String, s As Integer) As Boolean
If exists=false Then Return false
Return RegSetValueEx(rkey,Strptr(v),0,REG_DWORD,@s,4)= ERROR_SUCCESS
End Function
Function RegLib.deleteValue(v As String) As Boolean
If exists=FALSE Then Return FALSE
Return RegDeleteValue(rkey,StrPtr(v))= ERROR_SUCCESS
End Function
Property RegLib.default() As String
Return getValue("")
End Property
Property RegLib.default(s As String)
setValue("",s)
End Property
Type RegKey As RegLib
End Namespace
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment