Чтение и запись INI файлов

Данный пример демонстрирует работу с функциями GetPrivateProfileString и WritePrivateProfileString. Функции очень удобны для работы с текстовыми файлами формата INI. Благодаря этим функциям, не нужно думать об инициализации и освобождении всяких хенлов...

Платформа: Windows
Автор: Jojo

#DEFINE DefaultGroup Mid ( Command ( 0 ) , Instrrev ( Command ( 0 ) , "\" ) + 1 ) ' Standardgruppe, wenn kein Gruppenname ubergeben wird. In diesem Beispiel entspricht sie dem Namen der EXE-Datei.

' INI-Einstellungen (Deklarationen konnen auch gerne durch ein einfaches #include "windows.bi" ersetzt werden)
Declare Function GetPrivateProfileStringB Lib "kernel32" Alias "GetPrivateProfileStringA" ( Byval lpApplicationName As String , Byval lpKeyName As String , Byval lpDefault As String , Byval lpReturnedString As String , Byval nSize As Long , Byval lpFileName As String ) As Long
Declare Function WritePrivateProfileStringB Lib "kernel32" Alias "WritePrivateProfileStringA" ( Byval lpApplicationName As String , Byval lpKeyName As String , Byval lpString As String , Byval lpFileName As String ) As Long

'Benotigte Funktionen
Function GetValue ( Key As String , Default As String = "" , Group As String = DefaultGroup , Filename As String = Command ( 0 ) + ".ini" ) As String
    Dim TmpRetStr As String * 1280
    Dim RetVal As Long
    RetVal = GetPrivateProfileStringB ( Group , Key , Default & Chr ( 0 ) , TmpRetStr , Len ( TmpRetStr ) , Filename )
    Return Left ( TmpRetStr , RetVal )
End Function

Sub SetValue ( Key As String , Value As String , Group As String = DefaultGroup , Filename As String = Command ( 0 ) + ".ini" )
    WritePrivateProfileStringB Group , Key , Value , Filename
End Sub

' Testwerte aus der Standard-Gruppe. Dazu muss in der INI-Datei eine Gruppe mit dem Namen der Exe-Datei (zB [MeinProgramm.exe]) existieren, bzw. diese wird durch SetValue direkt angelegt.
' Mit einer zuvor leeren INI-Datei sollte die Ausgabe also "Blau", "Rot" sein.
Print GetValue ( "Farbe" , "Blau" )
SetValue ( "Farbe" , "Rot" )
Print GetValue ( "Farbe" )
SetValue ( "Farbe" , "" )

' Testwerte aus einer anderen Gruppe
SetValue ( "Farbe" , "Andere Farbe" , "UnterGruppe" )
Print GetValue ( "Farbe" , , "UnterGruppe" )
Sleep