Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Skriv och läs från ini-filer samt registret

Postad 2002-07-09 av Staffan Berg i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 6679, Betyg: 74%

Förord

Denna kurs visar hur du kan skriva och läsa av värden i Ini-filer och Windowsregistret. Tillvägagångssätten att arbeta med ini-filer och registret är i stort sett likvärdiga.
Innehåll
  » Introduktion
  » Register och Ini-filers API som används
  » Beskrivning av funktionerna
  » Funktionsnamn Beskrivning
  » Gemensamma parametrar
  » Exempel på registerhierarki
  » Exempel på en ini-fil
  » Hämta ett enstaka värde från registret
  » Hämta ett enstaka värde från en ini-fil
  » Hämta ett binärt värde från registret
  » Hämta ett binärt värde från en ini-fil
  » Hämta ett talvärde från en ini-fil
  » Skriva ett enstaka värde
  » Skriva ett strängvärde till registret
  » Skriva ett strängvärde till en ini-fil
  » Skriva ett binärt värde till registret
  » Exempel på att räkna upp värden
  » Hämta alla värden under en registernyckel
  » Hämta alla värden under en sektion
  » Räkna upp alla registernycklar
  » Radera registernycklar
  » Radera värden
  » Radera ett värde i registret
  » Radera ett värde i en ini-fil
  » Hämta värden där del av sektion är känd
  » Hämta värden från en sektion där bara en del av namnet på sekt
  » Om skribenten


Introduktion

När man vill lagra värden så kan man med fördel använda sig av Windowsregistret eller s k ini-filer. En ini-fil är egentligen en vanlig textfil men där man kan lagra värden hierarkiskt med hjälp av Windows API. Precis som i registret struktureras informationen med en toppnyckel och under denna en eller flera undernycklar. I den lägsta nivån kan man sedan lagra sitt önskade värde.

Till de kodexempel som jag kommer att demonstrera finns det en modul (.bas-fil) att ladda ned där alla funktioner som anropas ligger. Exempelfil (4kb)


Register och Ini-filers API som används

De API-anrop som registret använder sig av ligger i Advapi.dll och Ini-fil API;erna ligger i Kernel32.dll. Både dessa systemfiler finns i systemmappen på din dator.
I tabellen nedan listas de API;er som används.

Registret Ini-filer

RegCloseKey GetPrivateProfileInt
RegCreateKeyEx GetPrivateProfileSection
RegDeleteKey GetPrivateProfileString
RegDeleteValue WritePrivateProfileString
RegEnumValue
RegOpenKeyEx
RegQueryValueEx
RegSetValueEx



Beskrivning av funktionerna

I den bifogade modulen finns det funktioner för att skriva värden och läsa av värden både från registret och en ini-fil. Alla funktioner returnerar noll om de lyckas, i annat fall ett icke-nollvärde. De exempel i denna artikel returnerar dock ett värde.
Här beskrivs de funktioner som används.


Funktionsnamn Beskrivning

fReadValue Läser ett string, binary eller integer-värde från registret eller ett string-värde från en ini-fil.
fWriteValue Skriver ett string, binary eller integer-värde till registret eller ett string-värde till en ini-fil. Om inte sökvägen i registret eller ini-filen existerar så skapas den.
fEnumValue Räknar upp alla string, dword och binary-värden i en undernyckel i registret eller alla värden i aktuell sektion i ini-filen.

fEnumKey Räknar upp alla undernycklar under aktuell huvudnyckel.
fDeleteKey Raderar en undernyckel i registret. Nyckeln kan inte ha några ytterligare undernycklar.
fDeleteValue Raderar ett värde från registret eller en ini-fil.
fReadIniFuzzy Raderar ett string-värde från en ini-fil där bara en del av sektionsnamnet är känt.




Gemensamma parametrar

För att kunna demonstrera ett exempel så har jag valt att döpa de olika parametrarna enligt följande.

sTopKeyOrIniFile
Kan vara en av de strängvärden som representerar huvudnyckeln i registret.

I tabellen nedan listas förkortningarna av toppnivåerna av registernycklarna.

Förkortning Toppnivånyckel
HKCU HKey Current User
HKLM HKey Local Machine
HKU HKey User
HKDD HKey Dynamic Data
HKCC HKey Current Configuartion
HKCR HKey Classic Root

När det gäller ini-filer så representeras sTopKeyOrIniFile av den fullständiga sökvägen till ini-filen, t ex C:\Windows\MinFil.ini.

sSubKeyOrSection
Kan vara något av följande strängvärden:

En undernyckel i registret

Ett sektionsnamn i ini-filen
sValueName
Kan vara något av följande strängvärden:

Ett värdenamn i registret

Ett värdenamn i ini-filen
sValueType
Kan vara något av följande strängvärden:

S för ett strängvärde i register eller inifils-operationer

B för ett 16-bitars binärt värde
D för ett 32-bitars talvärde (dword)
vDefault

Ett standardvärde som returneras om inget annat värde finns angivet.
vValue

Ett strängvärde, talvärde eller binärt värde.


Exempel på registerhierarki

Så här ser registerhierarkin ut som vi kör som en demonstration i denna artikel.
HKey_Current_User
\Software
\Företag1
\Produktnamn
\AppNamn
\Setting1 = "String1"
\Setting2 = "String2"
\Setting3 = True
\Setting3 = 12345
\AppVersion
\(default) = "String1"
\Företag2
\Företag3


Exempel på en ini-fil

Upplägget i ini-filen som vi skall arbeta med ser ut så här. Sökvägen till ini-filen är C:\Windows\MinFil.ini

[Section1]
Setting1=String1
Setting2=String2
Setting3=5

[Section Name]
Setting4=String4
Setting5=String5
Setting6=6



Hämta ett enstaka värde från registret

För att kunna hämta ett enstaka värde från registret så anropas funktionen fReadValue i .bas-filen. Syntaxen för denna ser ut så här.


Function fReadValue(ByVal sTopKeyOrFile As String, _
ByVal sSubKeyOrSection As String, ByVal sValueName As String, _
ByVal sValueType As String, ByVal vDefault As Variant, _
vValue As Variant) As Long


Exemplet nedan hämtas ett strängvärde från Setting1 och lagrar det i variabeln sSetting. Finns det inget värde så returneras standardvärdet som i detta exempel är "No Name".


Call fReadValue("HKCU", "Software\Företag1\ProductName\AppName", _
"Setting1", "S", "No Name", sSetting)



Hämta ett enstaka värde från en ini-fil

För att utföra samma operation från en ini-fil kan syntaxen se ut så här.


Call fReadValue("C:\Windows\Minfil.ini", "Section1", "Setting1", "S", _
"No Name", sSetting)



Hämta ett binärt värde från registret

Exemplet hämtar ett binärt värde (True|False) i Setting3 från vår registerhierarki.


Call fReadValue("HKCU", "Software\Företag1\ProductName\AppName", _
"Setting3", "B", False, bSetting)



Hämta ett binärt värde från en ini-fil

Exemplet hämtar ett dword-värde från Setting4 i vår ini-fil.
Standardvärdet är 100.


lResult = fReadValue("C:\Windows\Myfile.ini", "Section1", "Setting3", "D", _
"0", iSetting)




Hämta ett talvärde från en ini-fil

Exemplet hämtar ett tal-värde från vår ini-fil och kontrollerar returvärdet.


lResult = fReadValue("C:\Windows\Myfile.ini", "Section1", "Setting3", "B", _
"0", iSetting)
if lResult <> 0 then...





Skriva ett enstaka värde

För att skriva in värden till registret eller en ini-fil måste funktionen fWriteValue anropas. Precis som för fReadValue så ligger även denna i den bifogade bas-filen. Syntaxen för fWriteValue ser ut så här.


Function fWriteValue(ByVal sTopKeyOrFile As String, _
ByVal sSubKeyOrSection As String, ByVal sValueName As String, _
ByVal sValueType As String, ByVal vValue As Variant) As Long



Skriva ett strängvärde till registret

Nedanstående exempel skriver strängen String1 till Setting1 i vårt register.


Call fWriteValue("HKCU", "Software\Företag1\ProductName\AppName",_
"Setting1", "S", "String1")



Skriva ett strängvärde till en ini-fil

Nedanstående exempel skriver strängen String2 till Setting2 till vår ini-fil.


lResult = fWriteValue("C:\Windows\MinFil.ini", "Section1", "Setting2", _
"S", "String2")



Skriva ett binärt värde till registret

Nedanstående exempel skriver ett binärt värde (True|False) till Setting3 till vår ini-fil.


bValue = True
Call fWriteValue("HKCU", "Software\CompanyName\ProductName\AppName",_
"Setting3", "B", bValue)


Notera att funktionen fWriteValue skapar en registernyckel om en sådan inte finns.
Notera också att fWriteValue för ini-filer bara klarar av att skriva strängvärden.



Exempel på att räkna upp värden

Hittills har vi kört exempel för att hämta eller skriva enstaka värden till register och ini-filer. Ibland kan behovet finnas att räknas upp alla värden som finns i t ex en registernyckel eller en sektion i en ini-fil. Funktionen som anropas för detta ändamål heter fEnumValue och finns också som en del i den bifogade bas-filen.


Public Function fEnumValue(ByVal sTopKeyOrIniFile As String, _
ByVal sSubKeyOrSection As String, sValues As String) As Long



Hämta alla värden under en registernyckel

Detta exempel hämtar alla värden som finns i registernyckeln AppName i vårt exempelregister.


Call fEnumValue("HKCU","Software\CompanyName\ProductName\AppName", _
sValues)


Variabeln sValues kommer att innehålla alla värden avgränsade med tecknet "|", enligt följande.

"Setting1=String1|Setting2=String2|Setting3=True||"


Hämta alla värden under en sektion

Detta exempel hämtar alla värden som finns under [Sektion1] i vår ini-fil..


Call fEnumValue("C:\Windows\Minfil.ini", "Section1", sValues)


Variabeln sValues innehåller samma värden som i exemplet för registret.


Räkna upp alla registernycklar

Detta exempel räknar upp alla undernycklar som finns under HKCU\Software.


Call fEnumKey("HKLM", "Software", sValues)


Variabeln sValues kommer att innehålla "Företag1|Företag2|Företag3||"


Radera registernycklar

Det finns också funktioner för att radera registernycklar. Funktionen som anropas heter fDeleteKey och syntaxen för denna funktion ser ut så här.


Public Function fDeleteKey(ByVal sTopKey As String, _
ByVal sSubKey As String, ByVal sKeyName As String) As Long


De parametrar som används i denna funktion är...
sSubKey - som innehåller sökvägen till den registernyckel som skall raderas.
sKeyName - som är namnet på den registernyckel som skall raderas.
Följande exempel raderar registernyckeln Appname.


Call fDeleteKey("HKCU","Software\CompanyName\ProductName\AppName", _
"AppName")


Observera att toppnyckeln (HKCU,..) under inga omständigheter kan raderas. Registernycklar som raderas kan inte heller ha några undernycklar utan dessa måste i så fall tas bort först.


Radera värden

Det är säkert viktigare att kunna ta bort värden än att ta bort en undernyckel i registret och naturligtvis finns det API-funktioner även för detta. Funktionen heter fDeleteValue och dess syntax ser ut så här.


Public Function fDeleteValue(ByVal sTopKeyOrFile As String, _
ByVal sSubKeyOrSection As String, ByVal sValueName As String) _
As Long



Radera ett värde i registret

Följande rad raderar värdet under Setting3 i vårt register.


Call fDeleteValue("HKCU","Software\CompanyName\ProductName\AppName",_
"Setting3")



Radera ett värde i en ini-fil

Följande rad raderar värdet under Setting3 i MinFil.ini.


Call fDeleteValue("C:\Windows\Myfile.ini", "Section1", "Setting3")



Hämta värden där del av sektion är känd

Som vi var inne på i början av denna artikel finns det även en funktion för att ta bort värden ur en ini-fil där endast en del av sektionsnamnet är känt. Funktionen heter fReadIniFuzzy och syntaxen för denna ser ut som följer.


Public Function fReadIniFuzzy(ByVal sIniFile As String, sSection As String, _
ByVal sIniEntry As String, ByVal sDefault As String, _
sValue As String) As Long


De parametrar som används i denna funktion är...

sIniFile - som innehåller sökvägen till ini-filen.
sSection - är namnet på sektionen i ini-filen som skall letas upp. Notera att det bara kan vara hela namn t ex Section eller Name i [Section Name]. Inte bara Sect eller ame.
sIniEntry - Namnet på inställningen som representerar värdet.
sDefault - Ett standardvärde som kan returneras.
SValue - Det strängvärde som hämtasom sDefault misslyckas.


Hämta värden från en sektion där bara en del av namnet på sektionen är angiven

Exemplet nedan hämtar värdet från Setting4 från [Section Name].


lResult = fReadIniFuzzy("C:\Windows\Myfile.ini", "Name", Setting4, sValue)


Resultatet av detta blir...

lResult = 0
lSection = "Section Name"
SValue = "String4"



Om skribenten

/Staffan Berg
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 154
27 952
271 704
1 313
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies