29.07.2017, 14:05
(Dieser Beitrag wurde zuletzt bearbeitet: 29.07.2017, 14:06 von Bazii.
Bearbeitungsgrund: Schreibfehler
)
Hallo Gorathan,
Regsearch Script aktualisiert auf V.1.0.0.2
Changelog:
- Durchsuchen von HKLM und HKCU möglich.
- Speicherung nach getrennten Verzeichnissen (HKLM und HKCU) eingefügt.
- Intelligente Checkboxen (HKLM und HKCU) eingefügt.
- Statusbar mit Meldungen eingefügt.
- Tooltip bei Programmausführung entfernt.
- Errorhandling in der GUI verbessert. So kann nun bei der Programmausführung nicht mehr auf die GUI zugegriffen werden
Jetzt würde noch die Möglichkeit eines erweiterten Suchbegriffes fehlen (Platzhalter und/oder RegExp). Damit kenne ich mich aber gar nicht aus. Würdest Du mir dabei bitte wieder unter die Arme greifen?
Regsearch Script aktualisiert auf V.1.0.0.2
Changelog:
- Durchsuchen von HKLM und HKCU möglich.
- Speicherung nach getrennten Verzeichnissen (HKLM und HKCU) eingefügt.
- Intelligente Checkboxen (HKLM und HKCU) eingefügt.
- Statusbar mit Meldungen eingefügt.
- Tooltip bei Programmausführung entfernt.
- Errorhandling in der GUI verbessert. So kann nun bei der Programmausführung nicht mehr auf die GUI zugegriffen werden
Show ContentRegSearch:
#NoTrayIcon
#RequireAdmin
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
#include <AutoItConstants.au3>
#include <EditConstants.au3>
#include <FileConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <Misc.au3>
#include <StatusBarConstants.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, $hgui, $idHKLM, $idHKCU
Global $sTitle = 'RegSearch'
Global $sVersion = '1.0.0.2'
Global $sAuthor = 'Bazii'
Global $sDate = '29.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?
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
$hgui= GUICreate($sTitle & ' ' & $sVersion, 300, 150, -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, 10, 280, 21)
GUICtrlSendMsg(-1, $EM_SETCUEBANNER, 0, "Registry Suchwort-Eingabe") ; <- besser die Konstante benutzen
GUICtrlCreateLabel("Durchsuchen von:", 10, 50, 100, 15)
GUICtrlSetFont(-1, 9, 500, "Arial")
$idHKLM = GUICtrlCreateCheckbox("HKLM", 120, 50, 60, 15)
GUICtrlSetTip(-1, "Computer\HKEY_LOCAL_MACHINE ", "HKLM = ", 1, 1)
GUICtrlSetFont(-1, 9, 500, "Arial")
GUICtrlSetState(-1, $gui_CHECKED)
$idHKCU = GUICtrlCreateCheckbox("HKCU", 180, 50, 60, 15)
GUICtrlSetState($idHKCU, $gui_DISABLE)
GUICtrlSetTip(-1, "Computer\HKEY_CURRENT_USER ", "HKCU = ", 1, 1)
GUICtrlSetFont(-1, 9, 500, "Arial")
$sstart = GUICtrlCreateButton("Suche starten!", 8, 85, 280, 25)
GUICtrlSetState($sstart, BitOR($gui_FOCUS, $gui_DEFBUTTON)) ; <- besser die Konstanten benutzen
GUICtrlSetOnEvent($sstart, _RegSearch_Start)
GUICtrlSetOnEvent($idHKLM, _id_Checkbox_HKLM)
GUICtrlSetOnEvent($idHKCU, _id_Checkbox_HKCU)
GUISetState(@SW_SHOW)
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Global $hStatus = _GUICtrlStatusBar_Create($hGUI, -1, "", $SBARS_TOOLTIPS)
_GUICtrlStatusBar_SetMinHeight($hStatus, 20)
Global $iPart[3]= [1, 300, -1]
_GUICtrlStatusBar_SetParts($hStatus, $iPart)
_GUICtrlStatusBar_SetText($hStatus, " HKLM ausgewählt", 1)
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
While Sleep(100)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $gui_EVENT_CLOSE
DllClose($hDLL)
Exit
EndSwitch
WEnd
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func _id_Checkbox_HKLM()
If GuiCtrlRead($idHKLM) = $gui_CHECKED Then
GUICtrlSetState($idHKCU, $gui_DISABLE)
GUICtrlSetState($idHKCU, $gui_UNCHECKED)
ElseIf GuiCtrlRead($idHKLM) = $gui_UNCHECKED Then
GUICtrlSetState($idHKLM, $gui_DISABLE)
GUICtrlSetState($idHKCU, $gui_ENABLE)
GUICtrlSetState($idHKCU, $gui_CHECKED)
_GUICtrlStatusBar_SetText($hStatus, " HKCU ausgewählt", 1)
EndIf
EndFunc ;==>_id_Checkbox_HKLM
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func _id_Checkbox_HKCU()
If GuiCtrlRead($idHKCU) = $gui_UNCHECKED Then
GUICtrlSetState($idHKLM, $gui_ENABLE)
GUICtrlSetState($idHKLM, $gui_CHECKED)
_GUICtrlStatusBar_SetText($hStatus, " HKLM ausgewählt", 1)
GUICtrlSetState($idHKCU, $gui_DISABLE)
ElseIf GuiCtrlRead($idHKLM) = $gui_UNCHECKED Then
GUICtrlSetState($idHKCU, $gui_ENABLE)
GUICtrlSetState($idHKCU, $gui_CHECKED)
EndIf
EndFunc ;==>_id_Checkbox_HKCU
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func _RegSearch_Start()
Local $sString = GUICtrlRead($sInput1)
Local $sfile_txt_hklm = @ScriptDir & '\hklm\' & '\txt\' & $sString & '.txt'
Local $sfile_reg_hklm = @ScriptDir & '\hklm\' & '\reg\' & $sString & '.reg'
Local $sfile_txt_hkcu = @ScriptDir & '\hkcu\' & '\txt\' & $sString & '.txt'
Local $sfile_reg_hkcu = @ScriptDir & '\hkcu\' & '\reg\' & $sString & '.reg'
If $sString = '' Then
MsgBox(64, "Hinweis", "Bitte Suchwort eingeben")
Return 0
EndIf
GUISetState(@SW_DISABLE, $hgui)
;~ ToolTip('bitte warten...', @DesktopWidth / 1.8, @DesktopHeight / 2, 'Suche nach ' & $sString & ' ...', 1, 5)
_GUICtrlStatusBar_SetText($hStatus, ' Suche nach -' & $sString & '- bitte warten!', 1)
If GuiCtrlRead($idHKLM) = $gui_CHECKED Then
_RegSearch($sFound, 'HKEY_LOCAL_MACHINE', $sString)
Local $hFile_txt_hklm = FileOpen($sfile_txt_hklm, BitOR($FO_CREATEPATH, $FO_OVERWRITE))
If $hFile_txt_hklm <> -1 Then
FileWrite($hFile_txt_hklm, $sFound)
FileClose($hFile_txt_hklm)
EndIf
Local $hFile_reg_hklm = FileOpen($sfile_reg_hklm, BitOR($FO_CREATEPATH, $FO_OVERWRITE))
If $hFile_reg_hklm <> -1 Then
FileWriteLine($hFile_reg_hklm, 'Windows Registry Editor Version 5.00' & @CRLF & @CRLF)
FileWrite($hFile_reg_hklm, $sFound)
FileClose($hFile_reg_hklm)
EndIf
ElseIf GuiCtrlRead($idHKCU) = $gui_CHECKED Then
_RegSearch($sFound, 'HKEY_CURRENT_USER', $sString)
Local $hFile_txt_hkcu = FileOpen($sfile_txt_hkcu, BitOR($FO_CREATEPATH, $FO_OVERWRITE))
If $hFile_txt_hkcu <> -1 Then
FileWrite($hFile_txt_hkcu, $sFound)
FileClose($hFile_txt_hkcu)
EndIf
Local $hFile_reg_hkcu = FileOpen($sfile_reg_hkcu, BitOR($FO_CREATEPATH, $FO_OVERWRITE))
If $hFile_reg_hkcu <> -1 Then
FileWriteLine($hFile_reg_hkcu, 'Windows Registry Editor Version 5.00' & @CRLF & @CRLF)
FileWrite($hFile_reg_hkcu, $sFound)
FileClose($hFile_reg_hkcu)
EndIf
EndIf
;~ ToolTip('')
Local $iMsgBoxAnswer = MsgBox(68,"Hinweis", "Auftrag erledigt. Die Auswertung wird nachfolgend angezeigt." & @CRLF & "Soll -RegSearch- für weitere Auswertungen geöffnet bleiben?")
Select
Case $iMsgBoxAnswer = 6 ;Ja
If GuiCtrlRead($idHKLM) = $gui_CHECKED Then
_GUICtrlStatusBar_SetText($hStatus, " HKLM ausgewählt", 1)
ShellExecute($sfile_txt_hklm, @SW_MAXIMIZE)
EndIf
If GuiCtrlRead($idHKCU) = $gui_CHECKED Then
_GUICtrlStatusBar_SetText($hStatus, " HKCU ausgewählt", 1)
ShellExecute($sfile_txt_hkcu, @SW_MAXIMIZE)
EndIf
GUISetState(@SW_ENABLE, $hgui)
GUISetState(@SW_RESTORE, $hgui)
;~ _GUICtrlStatusBar_SetText($hStatus, " Fortschrittsanzeige", 1)
Return 0
Case $iMsgBoxAnswer = 7 ;Nein
If GuiCtrlRead($idHKLM) = $gui_CHECKED Then ShellExecute($sfile_txt_hklm, @SW_MAXIMIZE)
If GuiCtrlRead($idHKCU) = $gui_CHECKED Then ShellExecute($sfile_txt_hkcu, @SW_MAXIMIZE)
;~ _WinAPI_DestroyIcon($hIcon)
_GUICtrlStatusBar_Destroy ($hStatus)
__GUI_EVENT_CLOSE_()
EndSelect
EndFunc ;==>_RegSearch_Start
Func _RegSearch(ByRef $sFound, $sRegPath, $sSearch) ; Funktion von Gorathan (https://forum.technik-hobby.de/showthrea...d=24#pid24)
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)
Exit
;~ 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_()
;~ _WinAPI_DestroyIcon($hIcon)
_GUICtrlStatusBar_Destroy ($hStatus)
Exit
EndFunc ;==>__GUI_EVENT_CLOSE_
Jetzt würde noch die Möglichkeit eines erweiterten Suchbegriffes fehlen (Platzhalter und/oder RegExp). Damit kenne ich mich aber gar nicht aus. Würdest Du mir dabei bitte wieder unter die Arme greifen?