AutoIt:JP ProfileCleaner
Aus znilwiki
gehört zu JP_ProfileCleaner Offline Filterung von Registry-Schlüsseln in JPUser.dat
Ein Tool für JumpingProfiles Umgebungen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=znil.ico
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_Description=Novemer 2011 Bernhard Linz
#AutoIt3Wrapper_Res_Fileversion=1.0.2.3
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <array.au3>
#Include <string.au3>
Dim $sFilename ; Dateiname inklusive Pfad zur JPUser.dat
Dim $aFadeOutLines[1] ; Hier stehen die Text aus der FadeOut.dat drin
Dim $hFadeOutDAT ; Zeiger auf die FadeOut.dat
Dim $sTempLine ; die eingelesenen Zeilen werden hier temporär gespeichert
Dim $bReadTheLines = False ; Boolean - wird zum Leerzeilen überspringen genutzt
Dim $hSourceFile ; Zeiger auf die JPUser.dat
Dim $hTargetFile ; Zeiger auf die neue Verseion der JPUser.dat
Dim $bWriteToTarget ; Boolean - wenn False werden die eingelesenden Zeilen nicht geschrieben
Dim $iTimerstart ; Startzeit der Filterung
Dim $iTimerend ; Endzeit der Filterung
Dim $iLineCounter = 0 ; Zeilenzählen - als Status geben wir alle 100 Zeilen einen Punkt aus
; 10 20 30 40 50 60 70 80
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $sHelp = '+------------------------------------------------------------------------------' & @CRLF & _
'| JP_ProfileCleaner.exe - Version ' & FileGetVersion(@ScriptName) & @CRLF & _
'+------------------------------------------------------------------------------' & @CRLF & _
'| 2011 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net' & @CRLF & _
'+------------------------------------------------------------------------------' & @CRLF & _
@CRLF & _
'Filtert Registry-Schlüssel aus einer JPUser.dat. Als Quelle dient eine' & @CRLF & _
'JumpingProfiles FadeOut.dat im gleichen Verzeichnis wie dieses Programm.' & @CRLF & _
'gefiltert werden alle Schlüssel die unterhalb von [DEFAULT] in der FadeOut.dat' & @CRLF & _
'stehen - Umgebungen werden in dieser Version nicht berücksichtigt' & @CRLF & _
'-------------------------------------------------------------------------------' & @CRLF & _
@CRLF & _
'Aufruf:' & @CRLF & _
@ScriptName & ' [Pfad][Dateinname]' & @CRLF & _
@CRLF & _
'Beispiel:' & @CRLF & _
@ScriptName & ' D:\Profiles\Benutzer\JumpingProfile\JPUser.dat' & @CRLF & _
@CRLF & _
'Beispiel für eine Batchverarbeitung: (Forfiles ist in jedem Windows enthalten)' & @CRLF & _
@CRLF & _
'Forfiles /P "D:\PF" /S /M JPUser.dat /C "cmd /c D:\JP_ProfileCleaner.exe @path"' & @CRLF & _
@CRLF & _
' "D:\PF" steht für den Pfad zu den Benutzerprofilen, Forfiles kann nicht mit' & @CRLF & _
' umgehen (ggf. als Netzlaufwerk mounten)' & @CRLF & _
@CRLF & _
' Das Beispiel verarbeitet alle JPUser.dat in allen Verzeichnissen' & @CRLF & _
' unterhalb von "D:\PF"' & @CRLF & _
@CRLF & _
'+------------------------------------------------------------------------------' & @CRLF & _
'| JP_ProfileCleaner ist FREEWARE! Kopieren, weitergeben ausdrücklich erlaubt!' & @CRLF & _
'| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:' & @CRLF & _
'| http://znil.net/index.php?title=ZnilTools:JP_ProfileCleaner' & @CRLF & _
'+------------------------------------------------------------------------------' & @CRLF
; Prüfen ob ein Parameter angegeben wurde - sonst beenden
If $CmdLine[0] = 0 Then
ConsoleWrite(_ANSI2OEM("FEHLER - Keine Datei angegeben, /? für Hilfe" & @CRLF))
Exit 0
EndIf
;Prüfen ob wir die Hilfe ausgeben sollen
If $CmdLine[1] = "/?" Then
ConsoleWrite(_ANSI2OEM($sHelp))
Exit 0
EndIf
; Holen wir uns den Dateinamen - oder was auch immer da steht
$sFilename = $CmdLine[1]
ConsoleWrite("STATUS - Verarbeite Datei " & $sFilename)
ConsoleWrite(@CRLF & "=> JP_ProfileCleaner = 2011 znil.net <=" & @CRLF)
; Holen wir uns die Schlüssel die ausgefiltert werden sollen
ConsoleWrite("STATUS - Lese FadeOut.dat ein .....")
$hFadeOutDAT = FileOpen(@ScriptDir & "\FadeOut.dat",0)
If $hFadeOutDAT = -1 Then
ConsoleWrite(_ANSI2OEM("FEHLER - Konnte FadeOut.dat nicht öffnen") & @CRLF)
Exit 1
EndIf
$aFadeOutLines[0] = 0
While 1
$sTempLine = FileReadLine($hFadeOutDAT)
If @error <> -1 Then
If $sTempLine <> "" And $bReadTheLines = True Then
$aFadeOutLines[0] = $aFadeOutLines[0] + 1
_ArrayAdd($aFadeOutLines,$sTempLine)
EndIf
If StringInStr($sTempLine,"[DEFAULT]") > 0 Then
; Wenn DEFAULT kam lesen wir die Schlüssel ein.
$bReadTheLines = True
EndIf
Else
ExitLoop
EndIf
WEnd
FileClose($hFadeOutDAT)
ConsoleWrite(_ANSI2OEM("fertig (" & $aFadeOutLines[0] & " Einträge)" & @CRLF))
; Filtern!
ConsoleWrite("STATUS - Filtere Datei ")
$iTimerstart = TimerInit()
$hSourceFile = FileOpen($sFilename,0)
If $hSourceFile = -1 Then
ConsoleWrite(_ANSI2OEM(@CRLF & "FEHLER - Konnte " & $sFilename & "nicht öffnen" & @CRLF))
Exit 1
EndIf
$hTargetFile = FileOpen($sFilename & ".temp.txt",2)
$bWriteToTarget = True
While 1
$sTempLine = FileReadLine($hSourceFile)
If @error <> -1 Then ;123456789012345678
If StringLeft($sTempLine,18) = "HKEY_CURRENT_USER\" Then
$bWriteToTarget = True
EndIf
If $bWriteToTarget = True Then
For $i = 1 To $aFadeOutLines[0]
If StringInStr($sTempLine,$aFadeOutLines[$i]) > 0 Then
$bWriteToTarget = False
EndIf
Next
EndIf
If $bWriteToTarget = True Then
FileWriteLine($hTargetFile,$sTempLine)
EndIf
$iLineCounter = $iLineCounter + 1
If $iLineCounter > 99 Then
ConsoleWrite(".")
$iLineCounter = 0
EndIf
Else
ExitLoop
EndIf
WEnd
FileClose($hSourceFile)
FileClose($hTargetFile)
$iTimerend = TimerDiff($iTimerstart) / 1000
ConsoleWrite(" fertig, Laufzeit " & StringRegExpReplace($iTimerend,"(\d*)\.(\d{2})(\d*)","$1,$2") & " sec" & @CRLF)
ConsoleWrite("Tausche JPUser.dat aus ....")
FileMove($sFilename, $sFilename & ".OLDFILE",1)
FileMove($sFilename & ".temp.txt",$sFilename,1)
ConsoleWrite("fertig" & @CRLF & @CRLF)
Exit 0
; ###################################################################################
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&threadID=9461&highlight=ANSI2OEM
Func _ANSI2OEM($text)
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')
Return $text[2]
EndFunc ;==>_ANSI2OEM
Loading comments...