Das war jetzt eine Herausforderung, weil ich vom Export-/Importformat von RegEdit keine Ahnung habe.
Zu einigen Registry-Typen konnte ich auch nicht das passende Format herausfinden (mit Kommentar im Script).
Ansonsten habe ich Dir mal das Script etwas angepasst (kommentiert):
Zu einigen Registry-Typen konnte ich auch nicht das passende Format herausfinden (mit Kommentar im Script).
Ansonsten habe ich Dir mal das Script etwas angepasst (kommentiert):
Show ContentScript:
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
#NoTrayIcon
#RequireAdmin
#include <AutoItConstants.au3>
#include <EditConstants.au3>
#include <FileConstants.au3>
#include <GUIConstantsEx.au3>
#include <Math.au3>
#include <Misc.au3>
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Opt('MustDeclareVars', 1) ; Variablen müssen deklariert werden.
Opt('GUIOnEventMode', 1) ; Eventmode aktivieren.
AutoItSetOption("GUICloseOnESC", 1) ; Wenn ESC gedrückt wird, Gui beenden.
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Global $sInput1, $sstart, $nMsg, $sString
Global $sTitle = 'RegSearch'
Global $sVersion = '1.0.0.0'
Global $sAuthor = 'Bazii'
Global $sDate = '26.07.2017'
Global $sFound = ''
Global $hDLL = DllOpen("user32.dll")
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
If _Singleton($sTitle, 1) = 0 Then ; Wenn eine Instanz dieses Programms läuft, dann Meldung ausgeben ...
MsgBox(64, "Achtung", " -RegSearch- wurde bereits gestartet und kann nicht ein zweites Mal gestartet werden!", 10) ; Meldung ausgeben (Teil 1)
Exit ; Programm beenden
EndIf; Ende der If-Abfrage: Läuft bereits eine weitere Instanz?
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
GUICreate($sTitle & ' ' & $sVersion, 300, 90, -1, -1)
GUISetIcon("..\..\ICON\logo_FTP.ico", -1)
GUICtrlSetFont(-1, 9, 500, "Arial")
GUISetBkColor(0xD7E4F2)
GUISetOnEvent($GUI_EVENT_CLOSE, "__GUI_EVENT_CLOSE_")
$sInput1 = GUICtrlCreateInput("", 8, 8, 280, 21)
GUICtrlSendMsg(-1, $EM_SETCUEBANNER, 0, "HKLM Suchwort-Eingabe") ; <- besser die Konstante benutzen
$sstart = GUICtrlCreateButton("Start!", 8, 56, 280, 25)
GUICtrlSetState($sstart, BitOR($GUI_FOCUS, $GUI_DEFBUTTON)) ; <- besser die Konstanten benutzen
GUICtrlSetOnEvent($sstart, _RegSearch_Start)
GUISetState(@SW_SHOW)
While Sleep(100)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
DllClose($hDLL)
Exit
EndSwitch
WEnd
Func _RegSearch_Start()
Local $sString = GUICtrlRead($sInput1)
Local $sfile = @ScriptDir & '\txt\' & $sString & '.txt'
Local $sfile2 = @ScriptDir & '\reg\' & $sString & '.reg'
If $sString = '' Then
MsgBox(16, "Fehler", "Bitte Suchwort eingeben")
GUICtrlSetState($sstart, $GUI_FOCUS) ; $EM_SETCUEBANNER sorgt automatisch dafür,
; dass wieder "HKLM Suchwort-Eingabe" ins Inputfeld eingetragen wird, sobald der
; Focus nicht auf dem Inputfeld liegt. Es reicht also, den Focus auf den Button zu legen.
Return 0
EndIf
ToolTip('bitte warten...', @DesktopWidth / 1.8, @DesktopHeight / 2, 'Suche nach ' & $sString & ' ...', 1, 5)
_RegSearch($sFound, 'HKEY_LOCAL_MACHINE', $sString)
; Wenn Du eine Datei oeffnen willst, die in einem Unterverzeichnis liegt,
; dann solltest Du zusätzlich $FO_CREATEPATH angeben, damit das Verzeichnis
; erstellt wird, wenn es nicht existiert.
Local $hFile = FileOpen($sfile, BitOR($FO_CREATEPATH, $FO_OVERWRITE)) ; <- FileOpen liefert ein Handle zurueck
If $hFile <> -1 Then ; <- nur ausfuehren, wenn FileOpen erfolgreich war
FileWrite($hFile, $sFound) ; <- FileWrite mit dem Handle (nicht mit dem Dateinamen!) ausfuehren
FileClose($hFile) ; <- das Handle wieder schliessen
EndIf
$hFile = FileOpen($sfile2, BitOR($FO_CREATEPATH, $FO_OVERWRITE)) ; <- FileOpen liefert ein Handle zurueck
If $hFile <> -1 Then ; <- nur ausfuehren, wenn FileOpen erfolgreich war
FileWriteLine($hFile, 'Windows Registry Editor Version 5.00' & @CRLF & @CRLF)
FileWrite($hFile, $sFound) ; <- FileWrite mit dem Handle (nicht mit dem Dateinamen!) ausfuehren
FileClose($hFile) ; <- das Handle wieder schliessen
EndIf
ToolTip('')
;~ MsgBox(64, 'Hinweis', 'Registry erfolgreich ausgelesen', 10, $sfile)
ShellExecute($sfile, @SW_MAXIMIZE)
EndFunc ;==>_RegSearch_Start
Func _RegSearch(ByRef $sFound, $sRegPath, $sSearch) ; Funktion von Oscar
Local $iValType, $sKeyName, $sValName, $vRegVal, $iEnumKey = 0, $iEnumVal = 0, $aTmp, $sTmp, $iRow
While True
If _IsPressed("1B", $hDLL) Then ; die Abbruchbedingung muss in die Schleife, die abgebrochen werden soll
MsgBox(64, "Achtung", "Abbruch durch Benutzer", 10)
Return SetError(1, 0, 0)
EndIf
$iEnumKey += 1
$sKeyName = RegEnumKey($sRegPath, $iEnumKey)
If @error Then ExitLoop ; wenn kein weiterer RegKey gefunden wurde, dann Schleife verlassen
If StringInStr($sRegPath & '\' & $sKeyName, $sSearch, 2) Then ; wenn Key gefunden, dann RegVals einfuegen -ANFANG-
$sFound &= '[' & $sRegPath & '\' & $sKeyName & ']' & @CRLF ; den RegKey merken
$iEnumVal = 0
While True ; alle RegVals durchgehen
$iEnumVal += 1
$sValName = RegEnumVal($sRegPath & '\' & $sKeyName, $iEnumVal)
If @error Then ExitLoop ; wenn kein weiterer RegVal gefunden wurde, dann Schleife verlassen
$iValType = @extended ; den Registry-Typ merken
$vRegVal = RegRead($sRegPath & '\' & $sKeyName, $sValName) ; den Inhalt des RegVals auslesen
Switch $iValType ; versuche das Export-Registry-Format zu erstellen (ohne Gewaehr!)
Case $REG_NONE
$vRegVal = 'hex(0):' & $vRegVal
Case $REG_SZ
$vRegVal = StringReplace($vRegVal, '\', '\\') ; Backslashes maskieren
$vRegVal = StringReplace($vRegVal, '"', '\"') ; Anfuehrungszeichen maskieren
$vRegVal = '"' & $vRegVal & '"' ; String in Anfuehrungszeichen setzen
Case $REG_EXPAND_SZ
$vRegVal = StringToBinary($vRegVal, 2)
$aTmp = StringRegExp(Hex($vRegVal, 16), '[[:xdigit:]]{2}', 3)
$vRegVal = 'hex(2):'
$iRow = 0
For $i = 0 To UBound($aTmp) - 1
$vRegVal &= $aTmp[$i] & ','
If Int((StringLen($sValName) + StringLen($vRegVal) + 6) / 80) > $iRow And $i < UBound($aTmp) - 2 Then
$vRegVal &= '\' & @CRLF & ' '
$iRow += 1
EndIf
Next
$vRegVal &= '00,00'
Case $REG_BINARY
$aTmp = StringRegExp(Hex($vRegVal, 8), '[[:xdigit:]]{2}', 3)
$vRegVal = 'hex:'
$iRow = 0
For $i = 0 To UBound($aTmp) - 1
$vRegVal &= $aTmp[$i] & ','
If Int((StringLen($sValName) + StringLen($vRegVal) + 6) / 80) > $iRow And $i < UBound($aTmp) - 2 Then
$vRegVal &= '\' & @CRLF & ' '
$iRow += 1
EndIf
Next
$vRegVal = StringTrimRight($vRegVal, 1)
Case $REG_DWORD
$vRegVal = 'dword:' & Hex($vRegVal, 8)
Case $REG_DWORD_BIG_ENDIAN ; keine Ahnung!
$vRegVal = '$REG_DWORD_BIG_ENDIAN ' & $vRegVal
Case $REG_LINK ; keine Ahnung!
$vRegVal = '$REG_LINK ' & $vRegVal
Case $REG_MULTI_SZ
$vRegVal = StringToBinary($vRegVal, 2)
$aTmp = StringRegExp(Hex($vRegVal, 16), '[[:xdigit:]]{2}', 3)
$vRegVal = 'hex(7):'
$iRow = 0
For $i = 0 To UBound($aTmp) - 1
$vRegVal &= $aTmp[$i] & ','
If Int((StringLen($sValName) + StringLen($vRegVal) + 6) / 80) > $iRow And $i < UBound($aTmp) - 2 Then
$vRegVal &= '\' & @CRLF & ' '
$iRow += 1
EndIf
Next
$vRegVal &= '00,00'
Case $REG_RESOURCE_LIST ; keine Ahnung!
$vRegVal = '$REG_RESOURCE_LIST ' & $vRegVal
Case $REG_FULL_RESOURCE_DESCRIPTOR ; keine Ahnung!
$vRegVal = '$REG_FULL_RESOURCE_DESCRIPTOR ' & $vRegVal
Case $REG_RESOURCE_REQUIREMENTS_LIST ; keine Ahnung!
$vRegVal = '$REG_RESOURCE_REQUIREMENTS_LIST ' & $vRegVal
Case $REG_QWORD
$aTmp = StringRegExp(Hex($vRegVal, 16), '[[:xdigit:]]{2}', 3)
$sTmp = ''
For $i = UBound($aTmp) - 1 To 0 Step -1
$sTmp &= $aTmp[$i] & ','
Next
$vRegVal = 'hex(b):' & StringTrimRight($sTmp, 1)
EndSwitch
$sValName = ($sValName = '' ? '@=' : '"' & $sValName & '"=') ; Wenn RegVal = Leerstring, dann "@", ansonsten der ValName
$sFound &= $sValName & $vRegVal & @CRLF
WEnd
$sFound &= @CRLF
EndIf ; RegVals einfuegen -ENDE-
_RegSearch($sFound, $sRegPath & '\' & $sKeyName, $sSearch) ; rekursiver Aufruf des gefundenen RegKeys
If @error Then Return SetError(1, 0, 0)
WEnd
Return
EndFunc ;==>_RegSearch
Func __GUI_EVENT_CLOSE_()
Exit
EndFunc ;==>__GUI_EVENT_CLOSE_
Hinweise:
Ich benutze für den Arduino die Arduino-IDE.
Für AutoIt benutze ich die aktuelle AutoIt-Version sowie SciTE4AutoIt3.
Eine Hilfe kann ich nur auf Basis dieser Software leisten.
Ich benutze für den Arduino die Arduino-IDE.
Für AutoIt benutze ich die aktuelle AutoIt-Version sowie SciTE4AutoIt3.
Eine Hilfe kann ich nur auf Basis dieser Software leisten.