Code: Alles auswählen
; Funktionen zum leichten Umgang mit INI-Dateien unter Windows
; 25.08.2005 by TS-Soft
; Löscht einen Key
Procedure IniDelKey(szIniFileName.s, szSectionName.s, szKeyName.s)
Protected Buffer.l
If WritePrivateProfileString_(@szSectionName, @szKeyName, #Null, @szIniFileName)
ProcedureReturn #True
Else
FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,GetLastError_(),0,@Buffer,0,0)
Debug "IniDelKey: " + PeekS(Buffer)
LocalFree_(Buffer)
ProcedureReturn #False
EndIf
EndProcedure
; Löscht eine Section
Procedure IniDelSection(szIniFileName.s, szSectionName.s)
Protected Buffer.l
If WritePrivateProfileString_(@szSectionName, #Null, "", @szIniFileName)
ProcedureReturn #True
Else
FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,GetLastError_(),0,@Buffer,0,0)
Debug "IniDelSection: " + PeekS(Buffer)
LocalFree_(Buffer)
ProcedureReturn #False
EndIf
EndProcedure
; Liest einen Longwert
Procedure.l IniReadLong(szIniFileName.s, szSectionName.s, szKeyName.s, nDefault.l)
ProcedureReturn GetPrivateProfileInt_(@szSectionName, @szKeyName, nDefault, @szIniFileName)
EndProcedure
; Liest eine komplette Sektion und gibt diese als String zurück
Procedure.s IniReadSection(szIniFileName.s, szSectionName.s, szSeperator.s)
Protected BufferSize.l, Result.s, Temp.s, *MEM, Length.l
If OSVersion() = #PB_OS_Windows_95
BufferSize = 32767
Else
BufferSize = 64000
EndIf
*MEM = AllocateMemory(BufferSize)
Length = GetPrivateProfileSection_(@szSectionName, *MEM, BufferSize, @szIniFileName)
If Length = -1
Debug "IniReadSection: more memory needed"
FreeMemory(*MEM)
ProcedureReturn ""
EndIf
Repeat
Temp = PeekS(*MEM, Length)
If Temp
Result + Temp + szSeperator
*MEM + Len(Temp) + 1
EndIf
Until Temp = ""
FreeMemory(*MEM)
ProcedureReturn Result
EndProcedure
; List eine String
Procedure.s IniReadString(szIniFileName.s, szSectionName.s, szKeyName.s, szDefault.s)
Protected ReturnBuffer.s
ReturnBuffer = Space(1024)
GetPrivateProfileString_(@szSectionName, @szKeyName, szDefault, @ReturnBuffer, 1024, @szIniFileName)
ProcedureReturn Trim(ReturnBuffer)
EndProcedure
; Schreibt ein Long
Procedure.l IniWriteLong(szIniFileName.s, szSectionName.s, szKeyName.s, nValue.l)
Protected Buffer.l
If WritePrivateProfileString_(@szSectionName, @szKeyName, *Str(nValue), @szIniFileName)
ProcedureReturn #True
Else
FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,GetLastError_(),0,@Buffer,0,0)
Debug "IniWriteLong: " + PeekS(Buffer)
LocalFree_(Buffer)
ProcedureReturn #False
EndIf
EndProcedure
; Schreibt einen String
Procedure.l IniWriteString(szIniFileName.s, szSectionName.s, szKeyName.s, szValue.s)
Protected Buffer.l
If WritePrivateProfileString_(@szSectionName, @szKeyName, @szValue, @szIniFileName)
ProcedureReturn #True
Else
FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,GetLastError_(),0,@Buffer,0,0)
Debug "IniWriteString: " + PeekS(Buffer)
LocalFree_(Buffer)
ProcedureReturn #False
EndIf
EndProcedure
;Beispiel zur Nutzung von IniReadSection:
String$ = IniReadSection("win.ini", "Mail", "|")
For I = 1 To CountString(String$, "|")
Debug StringField(String$, I, "|")
Next