Klik hier om Silverlight te installeren*
Nederland|Sitemap
Microsoft
Techniek 
|Contact
Techniek en trends - Altijd op de hoogte

Gegevens uit het Windows Register gebruiken in Word

Gegevens die uit het Windows Register zijn op te halen zijn onder andere de gebruikersnaam van wie heeft ingelogd, de licentiecode van uw Windows-versie, de huidige schermresolutie enzovoort. Door middel van macro's, die ontwikkeld zijn in Visual Basic for Applications (VBA), zijn de gegevens uit het register naar Word te halen.
 
Register en VBA
Registersleutels lezen
Andere Registersleutels lezen
Gebruikersnaam ophalen
Hoeveel programma's staan er open (hexadecimaal)
Eigen gegevens in het register opslaan
Gegevens opslaan in een document

Dit artikel is geen cursus VBA-programmeren (zie voor een cursus de link onderaan de pagina). Wel geeft dit artikel kant en klare oplossingen, macro's dus, die u zelf kunt toepassen. De macro's worden hier behandeld en kunt u overtypen. U kunt ze ook werkend en al downloaden.
 

Register en VBA

Met Visual Basic for Applications (VBA) is het mogelijk om gegevens uit het Windows Register op te halen én desgewenst ook te wijzigen. Vanwege dat laatste is het verstandig om eerst een back-up van het huidige register te maken. Dit doet u via de Register Editor:
 
  1. Kies Start >> (Uitvoeren) en typ regedit.
  2. Druk op Enter.
  3. In het menu van de Register Editor kiest u Bestand >> Exporteren.
  4. Geef een locatie en bestandsnaam. C:\RegisterBackup20jjmmdd is een goede keuze omdat u deze locatie goed kunt terugvinden als er onverhoopt iets mis mocht zijn gegaan. De letters jjmmdd staan voor jaar, maand en datum.
  5. Let op dat links onder in het dialoogvenster bij Exportbereik de optie Alles staat geselecteerd.
  6. Klik op OK en het volledige register wordt geback-upt.
 

Registersleutels lezen

De eerste sleutel die u uitleest is de naam van de programmadirectory, het pad waarin de Office-programmatuur staat. U zou dit pad kunnen opzoeken in het register via de Register Editor. U zult het dan vinden in de ProfileString, sectie Options en subsleutel ProgramDir:
 
HKEY_CURRENT_USER\Software\Microsoft\Office\*version*\Word
 
In VBA gebruikt u dezelfde zoekgegevens (Options en de subsleutel):
 
Sub readProfileString ()
    MsgBox System.ProfileString("Options", "PROGRAMDIR")
End Sub
 
Deze macro zit in het voorbeelddocument MacrosOmRegistergegevensTeGebruikenInWord.doc. Als u dit document hebt gedownload en in Word hebt geopend, kunt u de macro starten via sneltoets Alt+F8. Om de code in de VBA-editor te zien drukt u op sneltoets Alt+F11.
 

Andere Registersleutels lezen

Ook om de waarde van andere registersleutels uit te lezen, moet u altijd eerst vaststellen hoe de sleutel is opgebouwd. Hier komt u achter door eerst met de Register Editor de betreffende sleutel op te zoeken:
 
  1. Kies Start >> (Uitvoeren) en typ regedit.
  2. Druk op Enter.
 
In de Register Editor ziet u de inhoud van het register in een boomstructuur weergegeven, net als in Windows Verkenner. Als voorbeeld bekijkt u de sectie:
 
HKEY_CURRENT_USER\AppEvents\EventLabels\BlockedPopup
 
Alle waarden zijn in de sleutels opgeslagen met een naam, een typeaanduiding en de waarde zelf. Om een waarde uit te lezen in VBA moet niet alleen de sectie binnen het register kenbaar worden gemaakt, maar ook de naam van de sleutel die u wilt lezen. De standaardsleutel (Default) vraagt u op door de sleutelnaam leeg te laten. In het geval van het beschreven voorbeeld leest u de registersleutelwaarde uit met onderstaande routine:
 
Sub voorbeeldRegisterUitlezen()
    MsgBox System.PrivateProfileString("", _
    "HKEY_CURRENT_USER\AppEvents\EventLabels\BlockedPopup", "")
End Sub
 
Deze routine zit reeds in het voorbeelddocument. U kunt hem in elk ander document toevoegen door de Visual Basic Editor in Word te openen:
 
  1. Druk in Word op sneltoets Alt+F11.
  2. Voeg daar een module in via Invoegen >> Module.
  3. Type bovenstaande code over in de nieuwe module.
 
U kunt de code starten vanuit de Visual Basic Editor (druk op F5) of vanuit Word. In het laatste geval keert u eerst terug naar Word via Alt+F11; daar drukt u op Alt+F8 om de nieuwe macro te starten.
 
De functie PrivateProfileString heeft drie argumenten: File, Section en Key. Het eerste argument hoeft u niet verplicht in te vullen - een lege waarde leidt automatisch naar het Windows Register. Het tweede argument bevat het pad naar de sleutel (zonder afsluitende back-slash) en het laatste bevat de sleutelnaam. Let op dat alle drie de argumenten tussen dubbele aanhalingstekens worden gezet want het zijn tekstwaarden (type String) en dat de uit te lezen waarden van het type Tekenreekswaarde zijn (REG_SZ of REG_MULTI_SZ).
 
Wilt u een specifieke sleutelwaarde ophalen, dan vult u als derde argument ook de sleutelnaam in:
 
Sub voorbeeldRegisterUitlezenSub()
    MsgBox System.PrivateProfileString("", _
    "HKEY_CURRENT_USER\AppEvents\EventLabels\BlockedPopup", "DispFileName")
End Sub
 
Typ het voorbeeld over in een module in de Visual Basic Editor en probeer hem uit. U zult een berichtvenstertje zien met de desbetreffende waarde. De macro zit ook kant en klaar in het voorbeelddocument.
 

Gebruikersnaam ophalen

Om uw UserName uit het register op te halen gebruikt u de volgende macro:
 
Sub voorbeeldRegisterUserNameUitlezen()
    MsgBox System.PrivateProfileString("", _
    "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows _
    NT\CurrentVersion\Winlogon", "DefaultUserName")
End Sub
 

Hoeveel programma's staan er open (hexadecimaal)

Uit te lezen waarden zijn altijd een string, dus tekst. Als u een cijfer wilt uitlezen, moet u die omzetten van Hexadecimale tekst naar Decimaal. Een aardige oplossing voor deze zogenaamde Dword-waarden - mits ze kleiner zijn dan 255 - is om ze in te lezen als Ascii-tekst met de functie Asc().
 
Wanneer u namelijk een Dwordwaarde uitleest met de eerder gebruikte routine, dan verschijnt in het berichtvenster een Ascii-teken dat overeenkomt met de Dwordsleutelwaarde. In het nuvolgende voorbeeld wordt de registersleutel
 
HKEY_CURRENT_USER\SessionInformation\ProgramCount
 
uitgelezen. De waarde van deze sleutel is het aantal momenteel in gebruik zijnde programma's. In deze sleutel is ProgramCount van het type REG_DWORD, dus wordt een hexadecimale waarde weergegeven. De macro ziet er zo uit:
 
Sub leesDword()
    MsgBox Asc(System.PrivateProfileString("", _
   "HKEY_CURRENT_USER\SessionInformation", "ProgramCount"))
End Sub
 

Eigen gegevens in het register opslaan

Wanneer u een waarde voor later gebruik in het register wilt opslaan, bijvoorbeeld een telkens ophogend factuurnummer of een tijdstip, kunt u daarvoor zelf een registersleutel aanmaken met VBA.
 
Sub WriteMyOwnReg()
' Plaatst enkele instellingen in het Register.
    SaveSetting appname:="MijnInstelling", Section:="Starten", _
    Key:="Aanvang", setting:=#12:00:00 PM#
End Sub
 
Als u deze macro hebt uitgevoerd wordt een nieuwe sleutel aangemaakt. De naam van deze sleutel is MijnInstelling met daarin de sectie Starten en de sleutel Aanvang met waarde 12:00:00 PM. U vindt deze in het register terug in:
 
HKEY_USERS\S-1-5-21-842925246-162531612-839522115-1003\Software\VB and VBA Program Settings
 
Hierin is de code S-1-5-21-842925246-162531612-839522115-1003 afhankelijk van uw profiel, dus deze zal in dit voorbeeld afwijken van uw situatie. De waarde van de sleutel is eenvoudig aan te passen door er een nieuwe waarde aan toe te kennen:
 
Sub ChangeMyOwnReg()
    ' Wijzigt enkele instellingen in het Register.SaveSetting _
    "MijnInstelling", "Starten", "Aanvang", #1:00:00 PM#
End Sub
 
Om de waarde uit te lezen gebruikt u een al eerder toegepaste routine:
 
Sub ReadMyOwnReg()
    MsgBox System.PrivateProfileString("", _
    "HKEY_USERS\S-1-5-21-842925246-162531612-839522115-1003\Software\ _
    VB and VBA Program Settings\MijnInstelling\Starten", "Aanvang")
End Sub
 
Om deze sleutel weer te verwijderen gebruikt u de VBA-functie DeleteSetting:
 
Sub DeleteMyOwnReg()
' Verwijdert sectie en alle bijbehorende instellingen uit het Register.
    DeleteSetting "MijnInstelling", "Starten"
End Sub
 

Gegevens opslaan in een document

Wanneer u liever geen gegevens opslaat in het register of de waarde ook extern (zonder VBA) wilt kunnen bewerken, kunt u de waarde in een tekstdocument opslaan. Wordt aan het bestand geen pad meegegeven, dan vindt u het bestand terug in C:\Windows:
 
Sub writeMyOwnFile ()
'In het volgende voorbeeld wordt de naam van het huidige document
'opgeslagen als de instelling LastFile onder de sectiekop MacroSettings in
'Settings.txt, samen met de datum en tijd van opslaan in de variabele
'LastTime.
 
System.PrivateProfileString("Settings.txt", "MacroSettings", _
"LastFile") = ActiveDocument.FullName
System.PrivateProfileString("Settings.txt", "MacroSettings", _
 
"LastTime") = Date & " / " & Time
End Sub
 
De waarden uitlezen kan met de volgende code:
 
Sub readMyOwnFile ()
    'In het volgende voorbeeld worden de instelling voor LastFile
    'en LastTime opgehaald uit Settings.txt.
 
    LastFile = System.PrivateProfileString("Settings.Txt", _
    "MacroSettings", "LastFile")
    LastTime = System.PrivateProfileString("Settings.txt", _
    "MacroSettings", "LastTime")
    MsgBox LastFile & vbCr & LastTime
 End Sub
 

Tot slot

Tot slot wilt u natuurlijk nog weten hoe u deze waarden in uw Word-document krijgt te zien. Want in een dialoogvenster kunt u er weinig mee. Kijkend naar de laatste macro voegt u daartoe vóór de regel End Sub de volgende regel toe:
 
Selection.TypeText LastFile & vbCr & LastTime
 

Verwante links

Gerelateerde artikelen

 
Abonneer u op de nieuwsbrief
.

©2009 Microsoft Corporation. Alle rechten voorbehouden. Contact opnemen |Gebruiksvoorwaarden |Handelsmerken |Privacyverklaring