forked from blackdtools/Cheatlyzer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cIniArray.vb
193 lines (175 loc) · 9.25 KB
/
cIniArray.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
Option Strict On
Option Explicit On
Public Class cIniArray
Private sBuffer As String ' Para usarla en las funciones GetSection(s)
'--- Declaraciones para leer ficheros INI ---
' Leer todas las secciones de un fichero INI, esto seguramente no funciona en Win95
' Esta función no estaba en las declaraciones del API que se incluye con el VB
Private Declare Function GetPrivateProfileSectionNames Lib "kernel32" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
' Leer una sección completa
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
' Leer una clave de un fichero INI
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Integer, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
' Escribir una clave de un fichero INI (también para borrar claves y secciones)
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As Integer, ByVal lpFileName As String) As Integer
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Integer, ByVal lpString As Integer, ByVal lpFileName As String) As Integer
Public Sub IniDeleteKey(ByVal sIniFile As String, ByVal sSection As String, Optional ByVal sKey As String = "")
'--------------------------------------------------------------------------
' Borrar una clave o entrada de un fichero INI (16/Feb/99)
' Si no se indica sKey, se borrará la sección indicada en sSection
' En otro caso, se supone que es la entrada (clave) lo que se quiere borrar
'
' Para borrar una sección se debería usar IniDeleteSection
'
If Len(sKey) = 0 Then
' Borrar una sección
Call WritePrivateProfileString(sSection, 0, 0, sIniFile)
Else
' Borrar una entrada
Call WritePrivateProfileString(sSection, sKey, 0, sIniFile)
End If
End Sub
Public Sub IniDeleteSection(ByVal sIniFile As String, ByVal sSection As String)
'--------------------------------------------------------------------------
' Borrar una sección de un fichero INI (04/Abr/01)
' Borrar una sección
Call WritePrivateProfileString(sSection, 0, 0, sIniFile)
End Sub
Public Function IniGetADDRESSPATH(ByVal sFileName As String, ByVal sSection As String, ByVal sKeyName As String, Optional ByVal sDefault As String = "0") As AddressPath
Dim rawString As String
rawString = IniGet(sFileName, sSection, sKeyName, sDefault)
IniGetADDRESSPATH = ReadAddressPath(rawString)
End Function
Public Function IniGet(ByVal sFileName As String, ByVal sSection As String, ByVal sKeyName As String, Optional ByVal sDefault As String = "") As String
'--------------------------------------------------------------------------
' Devuelve el valor de una clave de un fichero INI
' Los parámetros son:
' sFileName El fichero INI
' sSection La sección de la que se quiere leer
' sKeyName Clave
' sDefault Valor opcional que devolverá si no se encuentra la clave
'--------------------------------------------------------------------------
Dim ret As Integer
Dim sRetVal As String
'
sRetVal = New String(Chr(0), 255)
'
ret = GetPrivateProfileString(sSection, sKeyName, sDefault, sRetVal, Len(sRetVal), sFileName)
If ret = 0 Then
Return sDefault
Else
Return Left(sRetVal, ret)
End If
End Function
Public Function IniGetINTEGER(ByVal sFileName As String, ByVal sSection As String, ByVal sKeyName As String, Optional ByVal sDefault As String = "0") As Integer
'--------------------------------------------------------------------------
' Devuelve el valor de una clave de un fichero INI
' Los parámetros son:
' sFileName El fichero INI
' sSection La sección de la que se quiere leer
' sKeyName Clave
' sDefault Valor opcional que devolverá si no se encuentra la clave
'--------------------------------------------------------------------------
Dim ret As Integer
Dim sRetVal As String
Dim lRetVal As Integer
Dim tmpRes As String
'
sRetVal = New String(Chr(0), 255)
'
ret = GetPrivateProfileString(sSection, sKeyName, sDefault, sRetVal, Len(sRetVal), sFileName)
If ret = 0 Then
tmpRes = sDefault
Else
tmpRes = Left(sRetVal, ret)
End If
lRetVal = CInt(tmpRes)
Return lRetVal
End Function
Public Sub IniWrite(ByVal sFileName As String, ByVal sSection As String, ByVal sKeyName As String, ByVal sValue As String)
'--------------------------------------------------------------------------
' Guarda los datos de configuración
' Los parámetros son los mismos que en LeerIni
' Siendo sValue el valor a guardar
'
Call WritePrivateProfileString(sSection, sKeyName, sValue, sFileName)
End Sub
Public Function IniGetSection(ByVal sFileName As String, ByVal sSection As String) As String()
'--------------------------------------------------------------------------
' Lee una sección entera de un fichero INI (27/Feb/99)
' Adaptada para devolver un array de string (04/Abr/01)
'
' Esta función devolverá un array de índice cero
' con las claves y valores de la sección
'
' Parámetros de entrada:
' sFileName Nombre del fichero INI
' sSection Nombre de la sección a leer
' Devuelve:
' Un array con el nombre de la clave y el valor
' Para leer los datos:
' For i = 0 To UBound(elArray) -1 Step 2
' sClave = elArray(i)
' sValor = elArray(i+1)
' Next
'
Dim aSeccion() As String
Dim n As Integer
'
ReDim aSeccion(0)
'
' El tamaño máximo para Windows 95
sBuffer = New String(ChrW(0), 32767)
'
n = GetPrivateProfileSection(sSection, sBuffer, sBuffer.Length, sFileName)
'
If n > 0 Then
'
' Cortar la cadena al número de caracteres devueltos
' menos los dos últimos que indican el final de la cadena
sBuffer = sBuffer.Substring(0, n - 2).TrimEnd()
' Cada elemento estará separado por un Chr(0)
' y cada valor estará en la forma: clave = valor
aSeccion = sBuffer.Split(New Char() {ChrW(0), "="c})
End If
' Devolver el array
Return aSeccion
End Function
Public Function IniGetSections(ByVal sFileName As String) As String()
'--------------------------------------------------------------------------
' Devuelve todas las secciones de un fichero INI (27/Feb/99)
' Adaptada para devolver un array de string (04/Abr/01)
'
' Esta función devolverá un array con todas las secciones del fichero
'
' Parámetros de entrada:
' sFileName Nombre del fichero INI
' Devuelve:
' Un array con todos los nombres de las secciones
' La primera sección estará en el elemento 1,
' por tanto, si el array contiene cero elementos es que no hay secciones
'
Dim n As Integer
Dim aSections() As String
'
ReDim aSections(0)
'
' El tamaño máximo para Windows 95
sBuffer = New String(ChrW(0), 32767)
'
' Esta función del API no está definida en el fichero TXT
n = GetPrivateProfileSectionNames(sBuffer, sBuffer.Length, sFileName)
'
If n > 0 Then
' Cortar la cadena al número de caracteres devueltos
' menos los dos últimos que indican el final de la cadena
sBuffer = sBuffer.Substring(0, n - 2).TrimEnd()
aSections = sBuffer.Split(ChrW(0))
End If
' Devolver el array
Return aSections
End Function
'
End Class