Created
January 17, 2017 17:17
-
-
Save CherryDT/b9067b5860f0f74a13c5faafb7b66832 to your computer and use it in GitHub Desktop.
Simplified Windows registry reader/writer library for FreeBasic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' 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