Juniors WorkstationLidos BerlinComputer PassDies und Das
Nutzungsbedingungen    Datenschutz    Impressum       Kontakt        Registrieren       <== zurück zur Startseite    
 
  Lernen durch Lehren
 
  LDL - Wissenswertes
  LDL - Hardwaretests
  LDL - Softwaretests
  LDL - Tipps & Tricks
  LDL - Workshops
 


  Profan² Einsteiger FAQ 7.5
 
  Profan² Einsteiger FAQ 7.5
  Profan² an die Schulen
  Profan² Script - FAQ
  Profan² Erweiterungen
  Profan² Helferlein
  Profan² Quellcode
 


  HTML Einsteiger FAQ 4.07
 
  HTML Einsteiger FAQ 4.07
  HTML indirekte Fragen
  kleine JavaScript FAQ
 


250 MB mit PHP / MySQL
 
Sie suchen noch Webspace, der kosten- und werbefrei ist, PHP (5.x) und MySQL (3.x) unter- stützt ...

Sie haben Fragen und benötigen Antworten
 
Das verstehen wir - und genau aus diesem Grund haben wir versucht, auf Ihre (am häu- figsten) gestellten Fragen zu antworten.
 
Lern- und Lehrbereich: Juniors Workstation
 
   einen Beitrag auswählenzum Anfang eine Seite zurück  eine Seite vor zum Ende     
   Bereich Kennung Zuordnung Klick Titel 
11  Workstation FAQ Profan Profan-FAQ104080  Profan² - eine Programmiersprache Profan-FAQ - Profan² - eine Programmiersprache
12  Workstation FAQ Profan Profan-FAQ39732  Profan² - dieser Name steht für ein Programmiersystem Profan-FAQ - Profan² - dieser Name steht für ein Programmiersystem
13  Workstation FAQ Profan Profan-FAQ45022  Profan² - eine Scriptsprache Profan-FAQ - Profan² - eine Scriptsprache
14  Workstation FAQ Profan Profan-FAQ44883  Profan² - eine Datenbank-Sprache Profan-FAQ - Profan² - eine Datenbank-Sprache
15  Workstation FAQ Profan Profan-FAQ43012  Profan² - Versionen im Download Profan-FAQ - Profan² - Versionen im Download
16  Workstation FAQ Profan Profan-FAQ46597  Was sind Ereignisse? Profan-FAQ - Was sind Ereignisse?
17  Workstation FAQ Profan Profan-FAQ46949  Was ist eine Multimedia-Schnittstelle? Profan-FAQ - Was ist eine Multimedia-Schnittstelle?
18  Workstation FAQ Profan Profan-FAQ49637  Was ist und enthält eine Windows-Nachricht? Profan-FAQ - Was ist und enthält eine Windows-Nachricht?
19  Workstation FAQ Profan Profan-FAQ47012  Definitionen, Funktionen und Operatoren unter Profan² Profan-FAQ - Definitionen, Funktionen und Operatoren unter Profan²
33  Workstation FAQ Profan Profan-FAQ48124  Einiges über Variablen und Platzhalter ... Profan-FAQ - Einiges über Variablen und Platzhalter ...

135 registrierte Beiträge gefunden; davon werden aktuell 10 angezeigt. 

 
   Registrierungsdatenbank bearbeiten

Neben der in der Online-Hilfe zu Profan² beschriebenen Möglichkeiten auf die Registry von Windows zuzugreifen, ist es auch möglich, dies mit Hilfe von Windows-API zu machen. Das bietet u.a. eine weit höhere Sicherheit und auch eine bessere Kontrolle über alle ausgeführten Aktionen.

Um mit Hilfe von Windows-API auf die Registrierungsdatenbank zugreifen zu können, benutzt man zunächst 2 API-Funktionen:

  def @RegOpenKeyExA(5) !"ADVAPI32","RegOpenKeyExA"
  def @RegCloseKey(1) !"ADVAPI32","RegCloseKey"

Wie generell bei API-Funktionen, benötigen Sie auch hierzu das entsprechende Handle eines Registry-Schlüssels. Für die erste Ebene der Registrierungsdatenbank sind diese Handles fest vorgegeben (Konstante):

   HKEY_CLASSES_ROOT         $80000000
   HKEY_CURRENT_USER         $80000001
   HKEY_LOCAL_MACHINE        $80000002
   HKEY_USERS                $80000003
   HKEY_PERFORMANCE_DATA     $80000004
   HKEY_CURRENT_CONFIG       $80000005

Um nun das Handle eines darunterliegenden Registry-Schlüssels zu ermitteln, wird der Pfad (ohne erste Ebene!) als String in einer Bereichsvariablen gespeichert:

    declare Key#
   dim Key#,255 
   string Key#,0="pfadSoftware"

Nun können Sie die Funktion RegOpenKeyExA nutzen. Dabei liefert der letzte Parameter das Handle (wird von der Funktion hier abgelegt) des unter Key# vorgegebenen Schlüssels.

    declare Handle#,Error&
   def @RegOpenKeyExA(5) !"ADVAPI32","RegOpenKeyExA"
   Let Error& = @RegOpenKeyEx($80000002,Key#,0,1,Handle#)
   Print Error&
   ifnot Error&
    declare Handle&
    Let Handle&=@long(Handle#,0)
    Print Handle&
   else
    Print "Schlüssel nicht vorhanden!"
   endif

Ist das ausgewiesene Ergebnis gleich 0 (Error&=0), so existiert der abgefragte Schlüssel. Andernfalls enthält Error& einen entsprechenden Fehlercode.

Vergessen Sie nicht, daß nach dem Öffnen eines Registryschlüssels dieser unbedingt wieder geschlossen werden muß. Dazu benutzen Sie die zweite Funktion:

    def @RegCloseKey(1) !"ADVAPI32","RegCloseKey"
   Let Error& = @RegCloseKey(Handle&)
   Print Error&

Ist das ausgewiesene Ergebnis gleich 0 (Error&=0), so war die Aktion erfolgreich. Andernfalls enthält Error& einen entsprechenden Fehlercode.

Da aber in den meisten Fällen ein gesondertes Auslesen eines Handles nicht notwendig ist, kann die gesamte Prozedur vereinfacht werden:

 Let Error& = @RegCloseKey(@Long(Handle#,0)) 

Hier ein Beispiel, wie man alle Unterschlüssel eines Schlüssels auflisten kann:
© Uwe Niemeier ("Pascal")

    def @RegOpenKeyEx(5) !"ADVAPI32","RegOpenKeyExA"  
   def @RegEnumKey(4) !"ADVAPI32","RegEnumKeyA" 
   def @RegCloseKey(1) !"ADVAPI32","RegCloseKey"
 
   declare Key#,Ergebnis#,Handle#,Zähler%,Error&
   dim Key#,100 
   dim Ergebnis#,100 
   dim Handle#,4 
   string Key#,0="SoftwareTomCatSoft" 
 
   @RegOpenKeyEx($80000002,Key#,0,1,Handle#) 
 
   whilenot @equ(Error&,259) 
    let Error&=@RegEnumKey(@Long(Handle#,0),
                       Zähler%,Ergebnis#,100) 
    casenot Error&:print @string$(Ergebnis#,0) 
    inc Zähler% 
   wend 
 
   @RegCloseKey(@Long(Handle#,0)) 
 
   dispose Handle# 
   dispose Key# 
   dispose Ergebnis# 
   waitkey

Nachtrag © Uwe Niemeier ("Pascal"):
Andere Funktionen dagegen können als Zielangabe zusätzlich zum Handle eines geöffneten Schlüssels den Pfad eines Unterschlüssels empfangen. In dem Fall hat man mehrere Möglichkeiten:

Entweder gibt man den vollständigen Pfad beim Öffnen des Schlüssels mit RegOpenKeyEx an, verwendet das erhaltene Handle und setzt den Pfadparameter der gewünschten Funktion auf Null:

   def @RegOpenKeyEx(5) !"ADVAPI32","RegOpenKeyExA"
   def @RegDeleteKey(2) !"ADVAPI32","RegDeleteKeyA"
   def @RegCloseKey(1) !"ADVAPI32","RegCloseKey"
   declare Handle#,Key#,Dummy#
   dim Handle#,4
   dim Key#,255
   dim Dummy#,1
   string Key#,0="SoftwareTomCatSoftUnterschlüssel 1"
   string Dummy#,0=""
       " Dummy, weil RegDeleteKey immer eine
       " Bereichsvariable erwartet
   print @RegOpenKeyEx($80000002,Key#,0,1,Handle#)
   print @RegDeleteKey(@Long(Handle#,0),Dummy#)
   print @RegCloseKey(@Long(Handle#,0))
   dispose Handle#
   dispose Key#
   dispose Dummy#

Oder man verzichtet auf das Öffnen des Schlüssels, gibt als Handle eine der Konstanten für die oberste Ebene an und setzt den vollständigen Restpfad entsprechend ein. Dieser Weg ist vorteilhafter, da man sich RegOpenKeyEx und RegCloseKey inclusive Zubehör sparen kann.

    def @RegDeleteKey(2) !"ADVAPI32","RegDeleteKeyA"
   declare Key#
   dim Key#,255
   string Key#,0="SoftwareTomCatSoftUnterschlüssel 1"
   print @RegDeleteKey($80000002,Key#)
   dispose key#

Auch eine Kombination ist denkbar:

Mit RegOpenKeyEx und entsprechender Pfadangabe wird ein Schlüssel geöffnet und dessen Handle als Parameter weiterverwendet. Als entgültige Pfadangabe für die gewünschte Funktion können dann diverse Unterschlüssel des geöffneten Schlüssels angegeben werden:

    def @RegOpenKeyEx(5) !"ADVAPI32","RegOpenKeyExA"
   def @RegDeleteKey(2) !"ADVAPI32","RegDeleteKeyA"
   def @RegCloseKey(1) !"ADVAPI32","RegCloseKey"
   declare Handle#,Key#,SubKey#
   dim Handle#,4
   dim Key#,255
   dim SubKey#,255
   string Key#,0="SoftwareTomCatSoft"
   string SubKey#,0="Unterschlüssel 1"
   print @RegOpenKeyEx($80000002,Key#,0,1,Handle#)
   print @RegDeleteKey(@Long(Handle#,0),SubKey#)
   print @RegCloseKey(@Long(Handle#,0))
   dispose Handle#
   dispose Key#
   dispose SubKey#

Hinweis © Uwe Niemeier ("Pascal") :
Ich habe mich mal eine Weile aus Neugier mit der Windows-Registrierung beschäftigt. Im Ergebnis entstand ein Workshop. Dieser Workshop enthält neben diversen Quelltexten noch zwei reg-Dateien ...

Viel Spaß beim Studieren!
 

©2012 Lidos Berlin - alle Rechte vorbehalten.