Funktionreferenz


RegWrite

Beschreibung anzeigen in

Erzeugt einen Schlüssel oder Wert in der Registrierung.

RegWrite ( "keyname" [, "valuename", "type", value] )

Parameter

keyname Der Registrierungsschlüssel, der geschrieben wird. Wenn keine weiteren Parameter angegeben werden, wird nur der Schlüssel angelegt.
valuename [optional] Der Name des Werts, der geschrieben wird.
type [optional] Typ des Schlüssels, der geschrieben wird: "REG_SZ", "REG_MULTI_SZ", "REG_EXPAND_SZ", "REG_DWORD", "REG_QWORD" oder "REG_BINARY".
value [optional] Der Wert, der geschrieben wird.

Rückgabewert

Erfolg: 1.
Fehler: 0 und setzt das @error Flag auf ungleich null, wenn ein Fehler beim Schreiben des Schlüssels oder Wertes auftritt.
@error: 1 = der angegebene Schlüssel kann nicht geöffnet werden
 2 = der angegebene Hauptschlüssel kann nicht geöffnet werden
 3 = es kann keine Verbindung per Netzwerk zur Registrierung hergestellt werden
-1 = der angegebene Wert kann nicht geöffnet werden
-2 = der Wertetyp wird nicht unterstützt

Bemerkungen

Ein Registry-Schlüssel muss mit "HKEY_LOCAL_MACHINE" ("HKLM"), "HKEY_USERS" ("HKU"), "HKEY_CURRENT_USER" ("HKCU"), "HKEY_CLASSES_ROOT" ("HKCR") oder "HKEY_CURRENT_CONFIG" ("HKCC") beginnen.

"HK" oder "HKEY" bedeutet "Handle (to a) KEY".

Wenn bei einer 64-bit Windows-Version ein 64-bit spezifischer Wert oder Schlüssel geschrieben werden soll, muss dem Hauptschlüssel "HK..." das Suffix "64" angehängt werden (z. B. "HKLM64").

Registry-Zweige:
64 Bit: HKLM\SOFTWARE\…
32 Bit: HKLM\SOFTWARE\WOW6432Node\…

AutoIt-Skript: Ausführungs-Modus AutoIt-Skript: Angabe im Quellcode Registrierungs-Editor: Verwendeter Zweig
32 Bit HKLM\SOFTWARE\… HKLM\SOFTWARE\WOW6432Node\…
32 Bit HKLM64\SOFTWARE\… HKLM\SOFTWARE\…
32 Bit HKLM\SOFTWARE\WOW6432Node\… HKLM\SOFTWARE\WOW6432Node\…
64 Bit HKLM\SOFTWARE\… HKLM\SOFTWARE\…
64 Bit HKLM64\SOFTWARE\… HKLM\SOFTWARE\…
64 Bit HKLM\SOFTWARE\WOW6432Node\… HKLM\SOFTWARE\WOW6432Node\…

"HKLM64" ist also nur für 32-Bit-AutoIt-Skripte (x86) wichtig und auch nur dann, wenn von dort aus nicht in "WOW6432Node" geschrieben werden soll.

Details siehe https://docs.microsoft.com/de-de/troubleshoot/windows-client/deployment/view-system-registry-with-64-bit-windows

AutoIt unterstützt Registry-Werte der Typen REG_BINARY, REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ, REG_QWORD und REG_DWORD.

Um mit dem (Standard)-Wert zu operieren, muss man "" (einen leeren String) als Wertname verwenden.

Wenn ein Schlüssel vom Typ REG_MULTI_SZ geschrieben wird, müssen die Werte mit @LF getrennt werden. Der Schlüsselwert darf nicht mit einem @LF enden, es sei denn, man möchte einen leeren Teilstring (siehe das Beispiel).

Es ist möglich, Registries im Netzwerk zu bearbeiten. Dazu ist "\\Computername\Schlüsselname" zu verwenden. Um diese Funktion verwenden zu können, muss man die entsprechenden Zugriffsrechte besitzen.

Abhängig vom Start-Registrierungsschlüssel wird #RequireAdmin wie für den Schlüssel "HKEY_LOCAL_MACHINE" benötigt.

Verwandte Funktionen

RegDelete, RegEnumKey, RegEnumVal, RegRead

Beispiel

Beispiel 1

#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; Prüft, ob der Registryschlüssel bereits existiert, damit das System es Benutzers nicht beschädigt wird.
    RegRead("HKEY_CURRENT_USER\Software\AutoIt_Example", "Key1")

    ; @error wird auf ungleich 0 gesetzt, wenn ein Registryschlüssel gelesen wird der nicht existiert.
    If Not @error Then
        MsgBox($MB_SYSTEMMODAL, "", "Ein Fehler ist aufgetreten, dass der temporäre Registryschlüssel ""AutoIt_Example"" bereits existiert.")
        Return False
    EndIf

    ; Schreibt einen einzelnen REG_SZ Wert in den Schlüssel "Key1".
    RegWrite("HKEY_CURRENT_USER\Software\AutoIt_Example", "Key1", "REG_SZ", "Dies ist ein Beispiel von RegWrite")

    ; Schreibt den REG_MULTI_SZ Wert von "Zeile 1" und "Zeile 2". Es iwrd immer ein Zeilenvoschubzeichen angehängt wenn ein REG_MULTI_SZ Wert geschrieben wird.
    RegWrite("HKEY_CURRENT_USER\Software\AutoIt_Example", "Key2", "REG_MULTI_SZ", "Zeile 1" & @LF & "Zeile 2" & @LF)

    ; Schreibt den REG_MULTI_SZ Wert von "Zeile 1". Es iwrd immer ein Zeilenvoschubzeichen angehängt wenn ein REG_MULTI_SZ Wert geschrieben wird.
    RegWrite("HKEY_CURRENT_USER\Software\AutoIt_Example", "Key3", "REG_MULTI_SZ", "Zeile 1" & @LF)

    ; Zeigt eine Nachricht um manuell zu dem Registryschlüssel zu navigieren.
    MsgBox($MB_SYSTEMMODAL, "", "Es ist RegEdit.exe zu öffnen und zu dem Registryschlüssel ""HKEY_CURRENT_USER\Software\AutoIt_Example"" zu navigieren.")

    ; Löscht den temporären Registryschlüssel.
    RegDelete("HKEY_CURRENT_USER\Software\AutoIt_Example")
EndFunc   ;==>Example

Beispiel 2

#include <MsgboxConstants.au3>

;~ #RequireAdmin

; erfordert Admin-Rechte
Local $sKey = "HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Active Setup Temp Folders"
Local $iRegWrite = RegWrite($sKey, "test", "REG_DWORD", "1")
If $iRegWrite = 0 Then
    MsgBox($MB_ICONWARNING + $MB_TOPMOST, "erfordert Admin-Rechte", "Kann nicht erstellt werden" & @CRLF & @CRLF & $sKey & @CRLF & @CRLF & 'Return = ' & $iRegWrite & @CRLF & '@error = ' & @error & @TAB & '@extended = ' & @extended & ' (0x' & Hex(@extended) & ')') ;### Debug MSGBOX
Else
    MsgBox($MB_TOPMOST, "RegWrite", $sKey & @CRLF & @CRLF & "erfolgreich erstellt")

    ; Registry bereinigen
    RegDelete($sKey, "test")
EndIf

; Erfordert keine Admin-Rechte
$sKey = "HKEY_CURRENT_USER\Software\Test"
$iRegWrite = RegWrite("HKEY_CURRENT_USER\Software\Test", "test", "REG_DWORD", "1")
If $iRegWrite = 0 Then
    ; Sollte nicht vorkommen
    MsgBox($MB_ICONERROR + $MB_TOPMOST, "AutoIt Fehler", "Kann nicht erstellt werden" & @CRLF & @CRLF & $sKey & @CRLF & @CRLF & 'Return = ' & $iRegWrite & @CRLF & '@error = ' & @error & @TAB & '@extended = ' & @extended & ' (0x' & Hex(@extended) & ')')
Else
    If IsAdmin() Then
        MsgBox($MB_TOPMOST, "RegWrite", $sKey & " erfolgreich erstellt")
    Else
        ConsoleWrite("- " & $sKey & " erfolgreich erstellt" & @CRLF)
    EndIf

    ; Registry bereinigen
    RegDelete($sKey, "test")
    RegDelete($sKey)
EndIf