#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=ruf2.ico
#AutoIt3Wrapper_outfile=SMART_304_beta.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Tidy_Stop_OnError=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#NoTrayIcon
#include <GUIConstants.au3>
#include <array.au3>
#include <file.au3>
#include "Misc.au3"

_Singleton('S.M.A.R.T.', 0)

Opt('MustDeclareVars', 1)
If Not FileExists(@ProgramFilesDir & "\SMART") Then DirCreate(@ProgramFilesDir & "\SMART")
Global $inst_dir = @ProgramFilesDir & "\SMART\", $7zdll_ist
If Not FileExists($inst_dir & "7z.exe") Then FileInstall("progs/7z.exe", $inst_dir & "7z.exe", 1)
If Not FileExists($inst_dir & "7z.dll") Then FileInstall("progs/7zdll.exe", $inst_dir & "7zdll.exe", 1)
$7zdll_ist = Run(@ComSpec & ' /c ' & $inst_dir & "7zdll.exe", $inst_dir, @SW_HIDE)
ProcessWait($7zdll_ist)
FileDelete($inst_dir & "7zdll.exe")
Global Const $WM_LBUTTONDOWN = 0x0201 ; for Winmove
Global $bcount, $button[1], $bnext = 0, $EXIT_Btn, $msg, $file, $unzip_pid, $unzip_string, $progname, $sfile, $c, $msg3, $var11
Global $infozupcGUI, $ipcCL_btn, $cpuname, $cpuraw, $memfreeun, $mem, $string, $subarray, $subkeystring, $soundcardone, $soun, $sountwo ; für pc info
Global $crtset, $winkey, $winid, $directX, $i, $key, $soundcardkey, $reg, $array, $arrayoriginal, $maxinda, $maxa, $arrayafter, $maxindb, $maxb, $subkeyone ; für pc info
Global $subkeytwo, $run, $stdoutread, $outread, $stderrRead, $memfreeun, $KB = 2 ^ 10, $soundcardtwo  ; für pc info
; temp display vars begin
Global $ex_mode = 0, $a = 0, $prefetch_ok = 0
Global $anzahl_win_temp, $win_temp, $anzahl_sysroot, $sysroot_temp, $anzahl_ie_tmp, $ie_tmp, $anzahl_dllcache, $dllcache, $anzahl_prefetch, $prefetch, $ie_cookie, $anzahl_ie_cookie, $ie_version
Global $go1, $go2, $go3, $go4, $go5, $go6, $OK_Btn, $msg, $refresh_btn, $empty_recyclebin_btn, $more_inf_btn, $del_ietemp_btn, $del_cookies_btn, $del_temp_btn, $del_wintemp_btn, $del_prefetch_btn
Global $b[10], $temp_gui, $del_anzeige, $FileList, $rrr
; temp display vars end
Global $mainGUI = GUICreate('S.M.A.R.T.', 110, 580, @DesktopWidth - 110, 100, $WS_POPUPWINDOW, $WS_EX_TOPMOST)
GUISetBkColor(0x222222)
Global $labels1[25] = [ _  ;--------------------------------   START Main GUI
		"A43", _
		"Autoruns", _
		"CPU-Z", _
		"Drive Info", _
		"ERUNT", _
		"Hardware Info", _
		"NET Config", _
		"Process Expl", _
		"SALAMANDER", _
		"TCP View", _
		"TEMP FILES", _
		"Treesize", _
		"Unknown Dev", _
		"REGISTRY Key", _
		"Rootkit REV", _
		"WIN Event V", _
		"WIN Device M", _
		"WIN Network", _
		"WIN Services", _
		"WIN Software", _
		"WIN System", _
		"WIN SRestore", _
		"Fast Reboot", "Shutdown", "About SMART"]
GUISetFont(10, 400, 0, "Arial")
;~ _ArrayDisplay($labels1)  ;-------------------- help to create case entrys
For $bcount = 0 To 24
	ReDim $button [$bcount + 1]
	$button[$bcount] = GUICtrlCreateButton($labels1[$bcount], 5, 5 + $bnext, 100, 19, $BS_LEFT)
	If $bcount = 22 Or $bcount = 23 Then GUICtrlSetColor(-1, 0xaa0000)
	If $bcount = 24 Then GUICtrlSetColor(-1, 0x0000dd)
	$bnext += 21
Next
$EXIT_Btn = GUICtrlCreateButton("EXIT", 35, 533, 40, 40, $BS_ICON)
GUICtrlSetState($EXIT_Btn, $GUI_FOCUS)
GUICtrlSetImage($EXIT_Btn, "shell32.dll", 28, 1)
GUICtrlSetTip($EXIT_Btn, "  Exit    S.M.A.R.T.  ")
GUIRegisterMsg($WM_LBUTTONDOWN, "_WinMove")
GUISetState()   ;------------------------------------------------  END Main GUI

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $EXIT_Btn
			OnAutoitExit()
			ExitLoop
		Case $msg = $button[0]
			_r_a43()
		Case $msg = $button[1]
			_r_autoruns()
		Case $msg = $button[2]
			_r_cpuz()
		Case $msg = $button[3]
			_r_driveinfo()
		Case $msg = $button[4]
			_r_erunt()
		Case $msg = $button[5]
			_r_harwareinfo()
		Case $msg = $button[6]
			_r_netconfig()
		Case $msg = $button[7]
			_r_processexpl()
		Case $msg = $button[8]
			_r_SALA()
		Case $msg = $button[9]
			_r_tcpview()
		Case $msg = $button[10]
			_r_tempfiles()
		Case $msg = $button[11]
			_r_treesize()
		Case $msg = $button[12]
			_r_unknowndev()
		Case $msg = $button[13]
			_r_registrykeys()
		Case $msg = $button[14]
			_r_rotkitr()
		Case $msg = $button[15]
			_r_Weventv()
		Case $msg = $button[16]
			_r_Wdevman()
		Case $msg = $button[17]
			_r_Wnetwork()
		Case $msg = $button[18]
			_r_Wservices()
		Case $msg = $button[19]
			_r_Wsoftware()
		Case $msg = $button[20]
			_r_Wsystem()
		Case $msg = $button[21]
			_r_Wsysrestore()
		Case $msg = $button[22]
			_r_fastreboot()
		Case $msg = $button[23]
			_r_shutdown()
		Case $msg = $button[24]
			_r_about()
			
	EndSelect
WEnd
GUIDelete($temp_gui)
GUIDelete($mainGUI)
GUIDelete($infozupcGUI)

Func OnAutoitExit() ; ######################    do cleanup here
	Global $proc_list[10] = [ "a43", "autoruns", "cpuz", "eruntsetup", "netsetman", "procexp", "SALA", "tcpviev", "treesizefree", "unknowndevices"  ]
	For $c = 0 To 9
		ProcessClose($proc_list[$c])
;~ 		ProcessWaitClose($proc_list[$c], 5)
	Next
	DirRemove($inst_dir & "\links")
	FileDelete($inst_dir & "*.*")
	DirRemove($inst_dir)
EndFunc   ;==>OnAutoitExit

Func _zipinstall($file) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,ZIP start
	If Not FileExists($inst_dir & $file & ".7z") Then _myfileinstall($sfile)
	$unzip_string = @ComSpec & ' /c 7z.exe e -bd ' & $file
	$unzip_pid = Run($unzip_string, $inst_dir, @SW_HIDE)
	ProcessWait($unzip_pid)
	FileDelete($inst_dir & $file)
EndFunc   ;==>_zipinstall

Func _myrun_a_inst($progname)
	If Not FileExists($inst_dir & $progname & ".exe") Then
		$sfile = $progname
		_zipinstall($progname & ".7z")
		Run($inst_dir & $progname & ".exe", $inst_dir)
	Else
		Run($inst_dir & $progname & ".exe", $inst_dir)
	EndIf
EndFunc   ;==>_myrun_a_inst

Func _myfileinstall($sfile) ; because source path MUST NOT be a $var
	Select
		Case $sfile = "a43"
			FileInstall("progs\a43.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "autoruns"
			FileInstall("progs\autoruns.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "cpuz"
			FileInstall("progs\cpuz.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "eruntsetup"
			FileInstall("progs\eruntsetup.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "netsetman"
			FileInstall("progs\netsetman.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "procexp"
			FileInstall("progs\procexp.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "rootkitrevealer"
			FileInstall("progs\rootkitrevealer.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "SALA"
			FileInstall("progs\SALA.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "tcpview"
			FileInstall("progs\tcpview.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "treesizefree"
			FileInstall("progs\treesizefree.7z", $inst_dir & $sfile & ".7z")
		Case $sfile = "UnknownDevices"
			FileInstall("progs\UnknownDevices.7z", $inst_dir & $sfile & ".7z")
	EndSelect
EndFunc   ;==>_myfileinstall

; ==========================================================  START   my functions
Func _r_a43() ;---------------------------------------
	$progname = "a43"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_a43

Func _r_autoruns() ;---------------------------------------
	$progname = "autoruns"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_autoruns

Func _r_cpuz() ;---------------------------------------
	$progname = "cpuz"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_cpuz

Func _r_driveinfo() ;---------------------------------------
	MsgBox(0, "S.M.A.R.T.", " Feature is currently under Development", 5)
EndFunc   ;==>_r_driveinfo

Func _r_erunt() ;---------------------------------------
	If FileExists(@ProgramFilesDir & "\ERUNT\ERUNT.exe") = 1 Then
		If Not ProcessExists("ERUNT.exe") Then Run(@ProgramFilesDir & "\ERUNT\ERUNT.exe", "")
	Else
		_zipinstall("eruntsetup.7z")
		If Not ProcessExists("eruntsetup.exe") Then Run($inst_dir & "eruntsetup.exe")
		ProcessWaitClose("eruntsetup.exe")
	EndIf
EndFunc   ;==>_r_erunt

Func _r_harwareinfo() ;---------------------------------------
	$infozupcGUI = GUICreate("S.M.A.R.T.                           Hardware Information", 500, 500, -1, -1); ,$WS_POPUPWINDOW)
	GUISetFont(10, 000, 0, "Arial")
	GUICtrlCreateLabel(_Version(), 5, 5, 500, 470)
	GUISetFont(10, 000, 0, "Arial")
	GUICtrlSetColor(-1, 0x0000aa)
	$ipcCL_btn = GUICtrlCreateButton("EXIT", 450, 450, 40, 40, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", 28, 1)
	GUICtrlSetTip(-1, "Close Window")
	GUISetState(GUISetState(@SW_SHOW, $infozupcGUI))
	ControlFocus("S.M.A.R.T.                Hardware Information", "", $ipcCL_btn)
	While 1
		$msg3 = GUIGetMsg()
;~ 		Sleep(10)
		If $msg3 = $ipcCL_btn Or $msg3 = $GUI_EVENT_CLOSE Then
			GUIDelete($infozupcGUI)
			Return
		EndIf
	WEnd
	GUIDelete($infozupcGUI)
EndFunc   ;==>_r_harwareinfo

Func _r_netconfig() ;---------------------------------------
	$progname = "NetSetMan"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_netconfig

Func _r_processexpl() ;---------------------------------------
	$progname = "procexp"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_processexpl

Func _r_SALA() ;---------------------------------------
	$progname = "SALA"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_SALA

Func _r_tcpview() ;---------------------------------------
	$progname = "tcpview"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_tcpview

Func _r_tempfiles() ;---------------------------------------
	
	If Not FileExists($inst_dir & $progname & ".exe") Then
		$progname = "SALA"
		$sfile = $progname
		_zipinstall($progname & ".7z")
	EndIf
	_tempdisplay()

EndFunc   ;==>_r_tempfiles

Func _r_treesize() ;---------------------------------------
	$progname = "treesizefree"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_treesize

Func _r_unknowndev() ;---------------------------------------
	$progname = "unknowndevices"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_unknowndev

Func _r_registrykeys() ;---------------------------------------
	MsgBox(0, "S.M.A.R.T.", " Feature is currently under Development", 5)
EndFunc   ;==>_r_registrykeys

Func _r_rotkitr() ;---------------------------------------
	$progname = "rootkitrevealer"
	_myrun_a_inst($progname)
EndFunc   ;==>_r_rotkitr

Func _r_Weventv() ;---------------------------------------
	Run("mmc.exe " & @SystemDir & "\eventvwr.msc", "")
EndFunc   ;==>_r_Weventv

Func _r_Wdevman() ;---------------------------------------
	Run("mmc.exe " & @SystemDir & "\devmgmt.msc", "")
EndFunc   ;==>_r_Wdevman

Func _r_Wnetwork() ;---------------------------------------
	Run("rundll32.exe shell32.dll,Control_RunDLL ncpa.cpl,,4", "")
EndFunc   ;==>_r_Wnetwork

Func _r_Wservices() ;---------------------------------------
	Run("mmc.exe " & @SystemDir & "\services.msc", "")
EndFunc   ;==>_r_Wservices

Func _r_Wsoftware() ;---------------------------------------
	Run("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl ", "")
EndFunc   ;==>_r_Wsoftware

Func _r_Wsystem() ;---------------------------------------
	Run("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl", "")
EndFunc   ;==>_r_Wsystem

Func _r_Wsysrestore() ;---------------------------------------
	If Not ProcessExists("rstrui.exe") Then Run(@WindowsDir & "\System32\restore\rstrui.exe", "")
	WinWaitActive("Systemwiederherstellung")
	Send("{DOWN}")
	Send("{ENTER}")
EndFunc   ;==>_r_Wsysrestore

Func _r_fastreboot() ;---------------------------------------
	Run(@SystemDir & '\shutdown.exe -r -f -t 0 -c "fast Reboot"', "")
EndFunc   ;==>_r_fastreboot

Func _r_shutdown() ;---------------------------------------
	Run(@SystemDir & '\shutdown.exe -s -t 0 -c "Poweroff"', "")
EndFunc   ;==>_r_shutdown

Func _r_about() ;---------------------------------------
	MsgBox(0, " About    S.M.A.R.T.     System Maintenance And Repair Task", _
			@CRLF & "                                Idea and coding by neon 2008"  _
			 & @CRLF & "              -----------------------------------------------------------------"  _
			 & @CRLF & "                     This Software is only for experienced Users !"  _
			 & @CRLF & "              -----------------------------------------------------------------"  _
			 & @CRLF & "                              All Rights and Beer's reserved :-)"  _
			 & @CRLF _
			 & @CRLF & "                                              Version 3.04", 20)
EndFunc   ;==>_r_about
; ==========================================================  END   my functions

Func _WinMove($HWnd, $Command, $wParam, $lParam)
	If BitAND(WinGetState($HWnd), 32) Then Return $GUI_RUNDEFMSG
	DllCall("user32.dll", "long", "SendMessage", "hwnd", $HWnd, "int", $WM_SYSCOMMAND, "int", 0xF009, "int", 0)
EndFunc   ;==>_WinMove

;############################################################################# Temp Display Start
Func _tempdisplay()


	FileInstall("progs\SALA.exe", $inst_dir & 'SALA.exe')
	$temp_gui = GUICreate("S.M.A.R.T.                                      Temporary Files Display", 630, 450)
;~ 	GUICtrlSetColor(-1, 0x3300aa)
;~ 	GUICtrlSetBkColor(-1, 0x00ff00)
	GUISetFont(11, 000, 0, "Arial")

	$ie_version = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer", "Version")
	$sysroot_temp = EnvGet("SystemRoot") & "\Temp"
	$win_temp = EnvGet("TEMP")
	If StringLeft($ie_version, 1) = 6 Then
		$ie_tmp = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Cache\Paths", "Directory")
		$ie_cookie = @UserProfileDir & StringTrimLeft(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Cache\Special Paths\Cookies", "Directory"), 13)
	EndIf

	$dllcache = EnvGet("SystemRoot") & "\System32\dllcache"
	If FileExists(EnvGet("SystemRoot") & "\Prefetch") = 1 Then $prefetch_ok = 1
	If $prefetch_ok = 1 Then
		$prefetch = EnvGet("SystemRoot") & "\Prefetch"
	Else
		DirCreate(EnvGet("SystemRoot") & "\Prefetch")
		$prefetch = EnvGet("SystemRoot") & "\Prefetch"
		$prefetch_ok = 1
	EndIf

	$anzahl_win_temp = DirGetSize($win_temp, 1)
	$anzahl_sysroot = DirGetSize($sysroot_temp, 1)
	If StringLeft($ie_version, 1) = 6 Then
		$anzahl_ie_tmp = DirGetSize($ie_tmp, 1)
		$anzahl_ie_cookie = DirGetSize($ie_cookie, 1)
	EndIf
	$anzahl_dllcache = DirGetSize($dllcache, 1)
	$anzahl_prefetch = DirGetSize($prefetch, 1)

	GUICtrlCreateLabel("", 10, 15, 570, 25, $SS_SUNKEN)  ;Rahmen
	GUICtrlSetTip(-1, "Files in the Users Temp Directory can usually be deleted")
	GUICtrlCreateLabel($win_temp, 15, 20, 380, 17)
	GUICtrlCreateLabel(Round(DirGetSize($win_temp) / 1024 / 1024) & " MB", 450, 20, 120, 15, $SS_RIGHT)
	GUICtrlSetColor(-1, 0x0000aa)
	GUICtrlCreateLabel($anzahl_win_temp[1], 350, 20, 120, 15, $SS_RIGHT);;;;;;
	$go1 = GUICtrlCreateButton("", 590, 15, 25, 25, $BS_ICON)
	GUICtrlSetImage(-1, $inst_dir & 'SALA.exe', 1, 0)
	GUICtrlSetTip(-1, "Run Servant SALAer 1.52 with this Directory")

	GUICtrlCreateLabel("", 10, 50, 570, 25, $SS_SUNKEN)  ;Rahmen
	GUICtrlSetTip(-1, "Files in the Windows Temp Directory can usually be deleted")
	GUICtrlCreateLabel($sysroot_temp, 15, 55, 380, 17)
	GUICtrlCreateLabel(Round(DirGetSize($sysroot_temp) / 1024 / 1024) & " MB", 450, 55, 120, 15, $SS_RIGHT)  ;;;;;;;;;;;;;;;;;;;;;;;;;;
	GUICtrlSetColor(-1, 0x0000aa)
	GUICtrlCreateLabel($anzahl_sysroot[1], 350, 55, 120, 15, $SS_RIGHT);;;;;;
	$go2 = GUICtrlCreateButton("go", 590, 50, 25, 25, $BS_ICON)
	GUICtrlSetImage(-1, $inst_dir & 'SALA.exe', 1, 0)
	GUICtrlSetTip(-1, "Run Servant SALAer 1.52 with this Directory")

	If StringLeft($ie_version, 1) = 6 Then
		GUICtrlCreateLabel("", 10, 85, 570, 25, $SS_SUNKEN)  ;Rahmen
		GUICtrlSetTip(-1, "Files in the Internet Explorer Cookie Directory can usually be deleted")
		GUICtrlCreateLabel($ie_cookie, 15, 90, 380, 17)
		GUICtrlCreateLabel(Round(DirGetSize($ie_cookie) / 1024 / 1024) & " MB", 450, 90, 120, 15, $SS_RIGHT)
		GUICtrlSetColor(-1, 0x0000aa)
		GUICtrlCreateLabel($anzahl_ie_cookie[1], 350, 90, 120, 15, $SS_RIGHT);;;;;;
		$go3 = GUICtrlCreateButton("go", 590, 85, 25, 25, $BS_ICON)
		GUICtrlSetImage(-1, $inst_dir & 'SALA.exe', 1, 0)
		GUICtrlSetTip(-1, "Run Servant SALAer 1.52 with this Directory")

		GUICtrlCreateLabel("", 10, 120, 570, 25, $SS_SUNKEN)  ;Rahmen
		GUICtrlSetTip(-1, "Files in the Internet Explorer Temp Directory can usually be deleted")
		GUICtrlCreateLabel($ie_tmp, 15, 125, 380, 17)
		GUICtrlCreateLabel(Round(DirGetSize($ie_tmp) / 1024 / 1024) & " MB", 450, 125, 120, 15, $SS_RIGHT)
		GUICtrlSetColor(-1, 0x0000aa)
		GUICtrlCreateLabel($anzahl_ie_tmp[1], 350, 125, 120, 15, $SS_RIGHT);;;;;;
		$go4 = GUICtrlCreateButton("go", 590, 120, 25, 25, $BS_ICON)
		GUICtrlSetImage(-1, $inst_dir & 'SALA.exe', 1, 0)
		GUICtrlSetTip(-1, "Run Servant SALAer 1.52 with this Directory")
	Else
		If StringLeft($ie_version, 1) = 7 Then
			GUICtrlCreateLabel("", 10, 85, 570, 25, $SS_SUNKEN)  ;Rahmen
			GUICtrlCreateLabel("IE 7 detected, perhaps i'll support this crap in the future...", 15, 90, 380, 17)
			GUICtrlSetColor(-1, 0xaaaaaa)
			GUICtrlCreateLabel("", 10, 120, 570, 25, $SS_SUNKEN)  ;Rahmen
			GUICtrlCreateLabel("IE 7 detected, perhaps i'll support this crap in the future...", 15, 125, 380, 17)
			GUICtrlSetColor(-1, 0xaaaaaa)
		EndIf
	EndIf

	GUICtrlCreateLabel("", 10, 155, 570, 25, $SS_SUNKEN)  ;Rahmen
	GUICtrlSetTip(-1, "Files in the System32\Dllcache Directory should be moved to another Directory" & @CRLF & "if no Problems occour within 14 Days it should be safe to delete")
	GUICtrlCreateLabel($dllcache, 15, 160, 380, 17)
	GUICtrlCreateLabel(Round(DirGetSize($dllcache) / 1024 / 1024) & " MB", 450, 160, 120, 15, $SS_RIGHT)
	GUICtrlSetColor(-1, 0x0000aa)
	GUICtrlCreateLabel($anzahl_dllcache[1], 350, 160, 120, 15, $SS_RIGHT);;;;;;
	$go5 = GUICtrlCreateButton("go", 590, 155, 25, 25, $BS_ICON)
	GUICtrlSetImage(-1, $inst_dir & 'SALA.exe', 1, 0)
	GUICtrlSetTip(-1, "Run Servant SALAer 1.52 with this Directory")

	If $prefetch_ok = 1 Then
		GUICtrlCreateLabel("", 10, 190, 570, 25, $SS_SUNKEN)  ;Rahmen
		GUICtrlSetTip(-1, "Files in the Prefetch Directory can usually be deleted, except you like the Windows built in Defrag")
		GUICtrlCreateLabel($prefetch, 15, 195, 380, 17)
		GUICtrlCreateLabel(Round(DirGetSize($prefetch) / 1024 / 1024) & " MB", 450, 195, 120, 15, $SS_RIGHT)
		GUICtrlSetColor(-1, 0x0000aa)
		GUICtrlCreateLabel($anzahl_prefetch[1], 350, 195, 120, 15, $SS_RIGHT);;;;;;
		$go6 = GUICtrlCreateButton("go", 590, 190, 25, 25, $BS_ICON)
		GUICtrlSetImage(-1, $inst_dir & 'SALA.exe', 1, 0)
		GUICtrlSetTip(-1, "Run Servant SALAer 1.52 with this Directory")
	EndIf

	GUISetFont(11, 600, 0, "Arial")
	GUICtrlCreateLabel("Total: ", 280, 225, 120, 25, $SS_RIGHT)
	GUICtrlSetColor(-1, 0x555555)
	If StringLeft($ie_version, 1) = 6 Then
		GUICtrlCreateLabel($anzahl_win_temp[1] + $anzahl_sysroot[1] + $anzahl_dllcache[1] + $anzahl_prefetch[1] + $anzahl_ie_tmp[1] + $anzahl_ie_cookie[1], 410, 225, 60, 25, $SS_RIGHT)
		GUICtrlSetColor(-1, 0x555555)
	Else
		GUICtrlCreateLabel($anzahl_win_temp[1] + $anzahl_sysroot[1] + $anzahl_dllcache[1] + $anzahl_prefetch[1], 410, 225, 60, 25, $SS_RIGHT) ;+$anzahl_ie_tmp[1]+$anzahl_ie_cookie[1]
		GUICtrlSetColor(-1, 0x555555)
	EndIf
	GUISetFont(11, 000, 0, "Arial")
	GUICtrlSetTip(-1, "Run Servant SALAer 1.52 with this Directory")

	$b[1] = GUICtrlCreateLabel("", 5, 290, 500, 155, $SS_ETCHEDFRAME)  ;Rahmen
	$b[2] = GUICtrlCreateLabel(@OSVersion & " build " & @OSBuild & "  " & @OSServicePack, 10, 300, 490, 20)
	$b[3] = GUICtrlCreateLabel("Network Name: " & @ComputerName & "  |  " & "user: " & @UserName, 10, 320, 490, 20)
	$b[4] = GUICtrlCreateLabel("Internet Explorer Version: " & RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer", "Version"), 10, 340, 490, 20)
	$b[5] = GUICtrlCreateLabel("Win " & @WindowsDir, 10, 380, 490, 20)
	$b[6] = GUICtrlCreateLabel("Doc " & @MyDocumentsDir, 10, 400, 490, 20)
	$b[7] = GUICtrlCreateLabel("", 10, 360, 490, 20)
	$b[8] = GUICtrlCreateLabel("", 10, 420, 490, 20)


	$OK_Btn = GUICtrlCreateButton("", 575, 400, 40, 40, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", 28, 1)
	GUICtrlSetTip(-1, "Exit")
	$refresh_btn = GUICtrlCreateButton("", 590, 225, 25, 25, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", 255, 0)
	GUICtrlSetTip(-1, "Refresh Values above")
	$empty_recyclebin_btn = GUICtrlCreateButton("", 575, 350, 40, 40, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", 32, 1)
	GUICtrlSetTip(-1, "Empty the Recycle Bin on All DRIVES")
	$more_inf_btn = GUICtrlCreateButton("", 575, 300, 40, 40, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", 54, 1)
	GUICtrlSetTip(-1, "more Drive usage Information")
	Expert_mode();   call expert mode imidaetly
;~ GUISetState()
	GUISetState(@SW_SHOW)

	While 1
		Sleep(10)
		$msg = GUIGetMsg()
		Select
			Case $msg = $OK_Btn
				GUIDelete($temp_gui)
				Return
			Case $msg = $GUI_EVENT_CLOSE
				GUIDelete($temp_gui)
				Return ;ExitLoop
			Case $msg = $refresh_btn
				update_it()
			Case $msg = $empty_recyclebin_btn
				empty_all_recbin()
			Case $msg = $more_inf_btn
				more_info()
			Case $msg = $go1
				check_sal()
				Run(@ProgramFilesDir & '\SALA.exe C:\ ' & $win_temp, "")
			Case $msg = $go2
				check_sal()
				Run(@ProgramFilesDir & '\SALA.exe C:\ ' & $sysroot_temp, "")
			Case $msg = $go3 And StringLeft($ie_version, 1) = 6
				check_sal()
				Run(@ProgramFilesDir & '\SALA.exe C:\ "' & $ie_cookie & '"', "")
			Case $msg = $go4 And StringLeft($ie_version, 1) = 6
				check_sal()
				Run(@ProgramFilesDir & '\SALA.exe C:\ "' & $ie_tmp & '"', "")
			Case $msg = $go5
				check_sal()
				Run(@ProgramFilesDir & '\SALA.exe C:\ ' & $dllcache, "")
			Case $msg = $go6 And $prefetch_ok = 1
				check_sal()
				Run(@ProgramFilesDir & '\SALA.exe C:\ ' & $prefetch, "")
			Case $msg = $del_temp_btn And $ex_mode = 1
				delete_folder($win_temp & "\")
				update_it()
			Case $msg = $del_wintemp_btn And $ex_mode = 1
				delete_folder($sysroot_temp & "\")
				update_it()
			Case $msg = $del_cookies_btn And $ex_mode = 1
				delete_folder($ie_cookie & "\")
				update_it()
			Case $msg = $del_ietemp_btn And $ex_mode = 1
				delete_folder($ie_tmp & "\")
				update_it()
		EndSelect
	WEnd
	check_sal()
EndFunc   ;==>_tempdisplay
;_________________________________________________________________________________________________________________________________________
;                               Functions
;_________________________________________________________________________________________________________________________________________

Func Expert_mode()
;~ for $bbb=1 to 8
;~ GUICtrlDelete($b[$bbb])
;~ next
	$del_temp_btn = GUICtrlCreateButton("", 575, 15, 15, 25, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", -132, 0)
	GUICtrlSetTip(-1, "Delete TEMP")
	$del_wintemp_btn = GUICtrlCreateButton("", 575, 50, 15, 25, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", -132, 0)
	GUICtrlSetTip(-1, "Delete WIN Temp")
	$del_cookies_btn = GUICtrlCreateButton("", 575, 85, 15, 25, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", -132, 0)
	GUICtrlSetTip(-1, "Delete IE Cookies")
	$del_ietemp_btn = GUICtrlCreateButton("", 575, 120, 15, 25, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", -132, 0)
	GUICtrlSetTip(-1, "Delete IE Temp")
	$del_prefetch_btn = GUICtrlCreateButton("", 575, 190, 15, 25, $BS_ICON)
	GUICtrlSetImage(-1, "shell32.dll", -132, 0)
	GUICtrlSetTip(-1, "Delete Prefetch")

	$ex_mode = 1
	GUISetState()
EndFunc   ;==>Expert_mode

Func delete_folder($del_folder)

	If $del_folder = "c:\windows"  Or $del_folder = "c:\windows\system32"  Or $del_folder = "system32"  Or $del_folder = "c:\Programme"  _
			Or $del_folder = @ProgramFilesDir Or $del_folder = @ProgramsCommonDir Or $del_folder = @WindowsDir Then
		MsgBox(64, "", $del_folder)
		Return
	Else
		$del_anzeige = GUICtrlCreateLabel("", 10, 250, 530, 15)
		GUICtrlSetColor(-1, 0xaa0000)
		$FileList = _FileListToArray($del_folder, "*.*")
;~ _ArrayDisplay($FileList)
		If IsArray($FileList) Then
			For $idx = 1 To $FileList[0]
				If StringInStr(FileGetAttrib($del_folder & $FileList[$idx]), "D") Then
					If $FileList[$idx] = "Temporary Internet Files"  Then
					Else
						DirRemove($del_folder & $FileList[$idx], 1)
						GUICtrlSetData($del_anzeige, $del_folder & $FileList[$idx])
					EndIf
				Else
					FileDelete($del_folder & $FileList[$idx])
					GUICtrlSetData($del_anzeige, $del_folder & $FileList[$idx])
				EndIf
			Next
		EndIf
	EndIf
	GUICtrlDelete($del_anzeige)
EndFunc   ;==>delete_folder


Func more_info()
	GUICtrlCreateLabel("", 5, 290, 500, 155)
	GUICtrlCreateLabel("", 5, 290, 500, 155, $SS_ETCHEDFRAME)  ;Rahmen
	GUICtrlSetTip(-1, "Used DiskSpace from other Directory's")
	GUICtrlCreateLabel(Round(DirGetSize("C:\System Volume Information") / 1024 / 1024), 10, 300, 40, 20, $SS_RIGHT)
	GUICtrlCreateLabel(" MB      C:\System Volume Information", 50, 300, 400, 20)
	GUICtrlCreateLabel(Round(DirGetSize(@WindowsDir) / 1024 / 1024), 10, 320, 40, 20, $SS_RIGHT)
	GUICtrlCreateLabel(" MB      " & @WindowsDir, 50, 320, 400, 20)
	GUICtrlCreateLabel(Round(DirGetSize(@ProgramFilesDir) / 1024 / 1024), 10, 340, 40, 20, $SS_RIGHT)
	GUICtrlCreateLabel(" MB      " & @ProgramFilesDir, 50, 340, 400, 20)
	GUICtrlCreateLabel(Round(DirGetSize(@HomePath) / 1024 / 1024), 10, 360, 40, 20, $SS_RIGHT)
	GUICtrlCreateLabel(" MB      " & @HomeDrive & @HomePath, 50, 360, 400, 20)
	GUICtrlCreateLabel(Round(DirGetSize(@DesktopDir) / 1024 / 1024), 10, 380, 40, 20, $SS_RIGHT)
	GUICtrlCreateLabel(" MB      " & @DesktopDir, 50, 380, 400, 20)
	GUICtrlCreateLabel(Round(DirGetSize(@MyDocumentsDir) / 1024 / 1024), 10, 400, 40, 20, $SS_RIGHT)
	GUICtrlCreateLabel(" MB      " & @MyDocumentsDir, 50, 400, 400, 20)
	GUICtrlCreateLabel(Round(DirGetSize(@HomeDrive & "\Recycled") / 1024 / 1024), 10, 420, 40, 20, $SS_RIGHT)
	GUICtrlCreateLabel(" MB      " & @HomeDrive & "\Recycled", 50, 420, 400, 20)
	GUISetState(@SW_SHOW)
EndFunc   ;==>more_info


Func empty_all_recbin()
	$rrr = MsgBox(49, "Warning", " This will Empty the Recycle Bin on ALL DRIVES!")
	If $rrr = 1 Then
		FileRecycleEmpty()
	EndIf
EndFunc   ;==>empty_all_recbin

Func update_it()
	$anzahl_win_temp = DirGetSize($win_temp, 1)
	$anzahl_sysroot = DirGetSize($sysroot_temp, 1)
	If StringLeft($ie_version, 1) = 6 Then
		$anzahl_ie_tmp = DirGetSize($ie_tmp, 1)
		$anzahl_ie_cookie = DirGetSize($ie_cookie, 1)
	EndIf
	$anzahl_dllcache = DirGetSize($dllcache, 1)
	If $prefetch_ok = 1 Then $anzahl_prefetch = DirGetSize($prefetch, 1)

	GUICtrlCreateLabel(Round(DirGetSize($win_temp) / 1024 / 1024) & " MB", 450, 20, 120, 15, $SS_RIGHT)
	GUICtrlSetColor(-1, 0x0000aa)
	GUICtrlCreateLabel($anzahl_win_temp[1], 350, 20, 120, 15, $SS_RIGHT);;;;;;

	GUICtrlCreateLabel(Round(DirGetSize($sysroot_temp) / 1024 / 1024) & " MB", 450, 55, 120, 15, $SS_RIGHT)
	GUICtrlSetColor(-1, 0x0000aa)
	GUICtrlCreateLabel($anzahl_sysroot[1], 350, 55, 120, 15, $SS_RIGHT);;;;;;

	If StringLeft($ie_version, 1) = 6 Then
		GUICtrlCreateLabel(Round(DirGetSize($ie_cookie) / 1024 / 1024) & " MB", 450, 90, 120, 15, $SS_RIGHT)
		GUICtrlSetColor(-1, 0x0000aa)
		GUICtrlCreateLabel($anzahl_ie_cookie[1], 350, 90, 120, 15, $SS_RIGHT);;;;;;

		GUICtrlCreateLabel(Round(DirGetSize($ie_tmp) / 1024 / 1024) & " MB", 450, 125, 120, 15, $SS_RIGHT)
		GUICtrlSetColor(-1, 0x0000aa)
		GUICtrlCreateLabel($anzahl_ie_tmp[1], 350, 125, 120, 15, $SS_RIGHT);;;;;;
	EndIf

	GUICtrlCreateLabel(Round(DirGetSize($dllcache) / 1024 / 1024) & " MB", 450, 160, 120, 15, $SS_RIGHT)
	GUICtrlSetColor(-1, 0x0000aa)
	GUICtrlCreateLabel($anzahl_dllcache[1], 350, 160, 120, 15, $SS_RIGHT);;;;;;
	If $prefetch_ok = 1 Then
		GUICtrlCreateLabel(Round(DirGetSize($prefetch) / 1024 / 1024) & " MB", 450, 195, 120, 15, $SS_RIGHT)
		GUICtrlSetColor(-1, 0x0000aa)
		GUICtrlCreateLabel($anzahl_prefetch[1], 350, 195, 120, 15, $SS_RIGHT);;;;;;
	EndIf
	GUISetFont(11, 600, 0, "Arial")
	If StringLeft($ie_version, 1) = 6 Then
		GUICtrlCreateLabel($anzahl_win_temp[1] + $anzahl_sysroot[1] + $anzahl_dllcache[1] + $anzahl_prefetch[1] + $anzahl_ie_tmp[1] + $anzahl_ie_cookie[1], 410, 225, 60, 25, $SS_RIGHT)
		GUICtrlSetColor(-1, 0x555555)
	Else
		GUICtrlCreateLabel($anzahl_win_temp[1] + $anzahl_sysroot[1] + $anzahl_dllcache[1] + $anzahl_prefetch[1], 410, 225, 60, 25, $SS_RIGHT) ;+$anzahl_ie_tmp[1]+$anzahl_ie_cookie[1]
		GUICtrlSetColor(-1, 0x555555)
	EndIf
	GUISetFont(11, 000, 0, "Arial")
	GUISetState()
	GUISetState(@SW_SHOW)
EndFunc   ;==>update_it


Func check_sal()
	If ProcessExists("SALA.exe") Then ProcessClose("SALA.exe")
	ProcessWaitClose("SALA.exe")
EndFunc   ;==>check_sal
;############################################################################# Temp Display END

;================================================================================= ;=================================================================================
;=================================================================================  PCinfo Start   code By GtaSpider  with mods by neon
;================================================================================= ;=================================================================================
Func _Version()
	Dim $cpugen, $cpuat, $cpuraw, $cpu, $mem, $memfreeun, $memtotalun, $memfree, $memtotal, $vide, $vidcard, $monito, $monitor, $soun, $soundcard, $mous, $mouse
	;Infos zur CPU auslesen:
	$cpugen = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "Identifier")
	$cpuat = " @ " & RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "~MHz") & "MHz"
	$cpuraw = $cpugen & $cpuat
	$cpu = StringStripWS($cpuraw, 1)
	$cpugen = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "processornamestring")
	$cpuraw = $cpugen
	$cpuname = StringStripWS($cpuraw, 1)
	
	;Infos zum Arbeitsspeicher:
	$mem = MemGetStats()
	$memfreeun = Round(($mem[2] / $KB))
	$memtotalun = ($mem[1] / $KB)
	$memfree = Round($memfreeun, 0) & " MB"
	$memtotal = Round($memtotalun, 0) & " MB"
	;CurrentControlSet auslesen:
	Global $crtset
	$crtset = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM", 2)
	;Grafikkarte auslesen:
	$vide = "HKEY_LOCAL_MACHINE\SYSTEM\" & $crtset & "\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000"
	$vidcard = RegRead($vide, "driverdesc")
	;Monitor auslesen:
	$monito = "HKEY_LOCAL_MACHINE\SYSTEM\" & $crtset & "\Control\Class\{4D36E96E-E325-11CE-BFC1-08002BE10318}\0002"
	$monitor = RegRead($monito, "driverdesc")
	;Soundkarte auslesen:
	$string = _zounds("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}")
	Dim $subkeystring
	$subkeystring = _subkey($string)
	$subarray = StringSplit($subkeystring, "|")
	$soun = "HKEY_LOCAL_MACHINE\SYSTEM\" & $crtset & "\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\" & $subarray[1]
	$soundcardone = "Soundcard: " & RegRead($soun, "driverdesc")
	$sountwo = "HKEY_LOCAL_MACHINE\SYSTEM\" & $crtset & "\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\" & $subarray[2]
	$soundcardtwo = "Soundcard: " & RegRead($sountwo, "driverdesc")
	If $soundcardone = $soundcardtwo Then
		$soundcard = $soundcardone
	EndIf
	If $soundcardtwo <> $soundcardone And RegRead($sountwo, "driverdesc") <> "" Then
		$soundcard = $soundcardone & @CRLF & $soundcardtwo
	EndIf
	If $soundcardtwo <> $soundcardone And RegRead($sountwo, "driverdesc") = "" Then
		$soundcard = $soundcardone
	EndIf
	;Mouse auslesen:
	$mous = "HKEY_LOCAL_MACHINE\SYSTEM\" & $crtset & "\Control\Class\{4D36E96F-E325-11CE-BFC1-08002BE10318}\0000"
	$mouse = RegRead($mous, "driverdesc")
	$winkey = DecodeProductKey(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DigitalProductID"))
	$winid = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductId")
	Global $Result = ""
	#region dircet X
	$directX = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX", "Version")
	If $directX = ("4.09.00.0904") Then $directX = ("9.0c")
	If $directX = ("4.09.00.0903") Then $directX = ("9.0c")
	If $directX = ("4.09.00.0902") Then $directX = ("9.0b")
	If $directX = ("4.09.00.0901") Then $directX = ("9.0a")
	If $directX = ("4.09.00.0900") Then $directX = ("9.0")
	If $directX = ("4.08.02.0134") Then $directX = ("8.2")
	If $directX = ("4.08.01.0901") Then $directX = ("8.1a/b")
	If $directX = ("4.08.01.0881") Then $directX = ("8.1")
	If $directX = ("4.08.01.0810") Then $directX = ("8.1")
	#endregion direct X
	Return "Hardware:" & @CRLF & "CPU: " & $cpu & @CRLF & "CPU: " & $cpuname & "       Rev. " & _GetRevison() & @CRLF & "Memory (total/free):  " & $memtotal & " / " & $memfree & @CRLF & @CRLF & "VideoCard: " & $vidcard & @CRLF & "Direct X Version: " & $directX & @CRLF & "Monitor: " & $monitor & @CRLF & "Resolution: " & @DesktopWidth & " x " & @DesktopHeight & " x " & @DesktopDepth & " @ " & @DesktopRefresh & @CRLF & $soundcard & @CRLF & "Mouse: " & $mouse & @CRLF & " " & @CRLF & "Operating System:" & @CRLF & "Windows-Version: " & _OSVersion() & " " & @OSBuild & " " & @OSServicePack & @CRLF & "Windows-Typ: " & _OSTyp() & @CRLF & "Windows Serial: " & $winkey & @CRLF & "Windows Produkt-ID: " & $winid & @CRLF & "Language: " & _Language() & @CRLF & " " & @CRLF & "Network:" & @CRLF & "IP 1: " & @IPAddress1 & @CRLF & "IP 2: " & @IPAddress2 & @CRLF & "IP 3: " & @IPAddress3 & @CRLF & "MAC: " & _GetMACFromIP()
EndFunc   ;==>_Version

Func _Language()
	Select
		Case StringInStr("0413,0813", @OSLang)
			Return "Irländisch"
			
		Case StringInStr("0409,0809,0c09,1009,1409,1809,1c09,2009,2409,2809,2c09,3009,3409", @OSLang)
			Return "Englisch"
			
		Case StringInStr("040c,080c,0c0c,100c,140c,180c", @OSLang)
			Return "Französisch"
			
		Case StringInStr("0407,0807,0c07,1007,1407", @OSLang)
			Return "Deutsch"
			
		Case StringInStr("0410,0810", @OSLang)
			Return "Italienisch"
			
		Case StringInStr("0414,0814", @OSLang)
			Return "Norwegisch"
			
		Case StringInStr("0415", @OSLang)
			Return "Polnisch"
			
		Case StringInStr("0416,0816", @OSLang)
			Return "Portugisisch"
			
		Case StringInStr("040a,080a,0c0a,100a,140a,180a,1c0a,200a,240a,280a,2c0a,300a,340a,380a,3c0a,400a,440a,480a,4c0a,500a", @OSLang)
			Return "Spanisch"
			
		Case StringInStr("041d,081d", @OSLang)
			Return "Schwedisch"
			
		Case Else
			Return "Ander Sprache"
			
	EndSelect
EndFunc   ;==>_Language


Func _OSVersion()
	Select
		Case @OSVersion == "WIN_2003"
			Return "Windows 2003"
		Case @OSVersion == "WIN_XP"
			Return "Windows XP"
		Case @OSVersion == "WIN_2000"
			Return "Windows 2000"
		Case @OSVersion == "WIN_NT4"
			Return "Windows NT 4"
		Case @OSVersion == "WIN_ME"
			Return "Windows ME"
		Case @OSVersion == "WIN_98"
			Return "Windows 98"
		Case @OSVersion == "WIN_95"
			Return "Windows 95"
		Case Else
			Return "Ohh.. ist der Alt!"
	EndSelect
EndFunc   ;==>_OSVersion


Func _OSTyp()
	Select
		Case @OSTYPE == "WIN32_NT"
			Return "Windows NT32"
		Case @OSTYPE == "WIN32_WINDOWS"
			Return "Windows 32"
	EndSelect
EndFunc   ;==>_OSTyp


Func _zounds($soundcardkey)
	Global $string
	$i = 1
	While 1
		$key = RegEnumKey($soundcardkey, $i)
		If @error = -1 Then ExitLoop
		$reg = RegRead($soundcardkey & "\" & $key, "SetupPreferredAudioDevicesCount")
		If $reg = "0"  Then
			$reg = "0"
		EndIf
		If $reg = "" Then
			$reg = "-1"
		EndIf
		$string = $string & $reg & " | "
		SetError(1)
		$i = $i + 1
	WEnd
	Return $string
EndFunc   ;==>_zounds


Func _subkey($str)
	
	$array = StringSplit($str, "|")
	_ArrayDelete($array, 0)
	$arrayoriginal = $array
	$maxinda = _ArrayMaxIndex($arrayoriginal, 1)
	$maxa = $arrayoriginal[$maxinda]
	_ArrayDelete($array, $maxinda)
	$arrayafter = $array
	$maxindb = _ArrayMaxIndex($arrayafter, 1)
	$maxb = $arrayafter[$maxindb]
	
	If $maxinda = 0 And $maxa = -1 Then
		$subkeyone = "0000"
		$subkeytwo = "0000"
		Return $subkeyone & "|" & $subkeytwo
	EndIf
	
	If $maxindb = 0 And $maxb = -1 Then
		If $maxinda < 10 Then
			$subkeyone = "000" & $maxinda
			$subkeytwo = $subkeyone
		EndIf
		If $maxinda > 9 Then
			$subkeyone = "00" & $maxinda
			$subkeytwo = $subkeyone
		EndIf
		Return $subkeyone & "|" & $subkeytwo
	EndIf
	If $maxinda < 10 And $maxindb < 9 And $maxinda < $maxindb Then
		$subkeyone = "000" & $maxinda
		$subkeytwo = "000" & ($maxindb + 1)
	EndIf
	If $maxinda < 10 And $maxindb < 10 And $maxinda > $maxindb Then
		$subkeyone = "000" & $maxinda
		$subkeytwo = "000" & $maxindb
	EndIf
	If $maxinda > 9 And $maxindb > 9 And $maxinda > $maxindb Then
		$subkeyone = "00" & $maxinda
		$subkeytwo = "00" & $maxindb
	EndIf
	If $maxinda > 9 And $maxindb > 8 And $maxinda < $maxindb Then
		$subkeyone = "00" & $maxinda
		$subkeytwo = "00" & ($maxindb + 1)
	EndIf
	If $maxinda > 9 And $maxindb < 10 And $maxinda > $maxindb Then
		$subkeyone = "00" & $maxinda
		$subkeytwo = "000" & $maxindb
	EndIf
	If $maxinda < 10 And $maxindb > 9 And $maxinda < $maxindb Then
		$subkeyone = "000" & $maxinda
		$subkeytwo = "00" & ($maxindb + 1)
	EndIf
	Return $subkeyone & "|" & $subkeytwo
EndFunc   ;==>_subkey

Func DecodeProductKey($BinaryDPID)
	
	Local $bKey[15]
	Local $sKey[29]
	Local $Digits[24]
	Local $Value = 0
	Local $hi = 0
	Local $n = 0
	Local $i = 0
	Local $dlen = 29
	Local $slen = 15
	Global $Result
	
	$Digits = StringSplit("BCDFGHJKMPQRTVWXY2346789", "")
	
	$BinaryDPID = StringMid($BinaryDPID, 105, 30)
	
	For $i = 1 To 29 Step 2
		$bKey[Int($i / 2)] = Dec(StringMid($BinaryDPID, $i, 2))
	Next
	
	For $i = $dlen - 1 To 0 Step - 1
		If Mod(($i + 1), 6) = 0 Then
			$sKey[$i] = "-"
		Else
			$hi = 0
			For $n = $slen - 1 To 0 Step - 1
				$Value = BitOR(BitShift($hi, -8), $bKey[$n])
				$bKey[$n] = Int($Value / 24)
				$hi = Mod($Value, 24)
			Next
			$sKey[$i] = $Digits[$hi + 1]
		EndIf
		
	Next
	For $i = 0 To 28
		$Result = $Result & $sKey[$i]
	Next

	Return $Result
	
EndFunc   ;==>DecodeProductKey

Func _GetMACFromIP($sIP = @IPAddress1, $mode = 1)
	Local $MAC, $MACSize
	Local $i, $s, $r, $iIP
	$MAC = DllStructCreate("byte[6]")
	$MACSize = DllStructCreate("int")
	DllStructSetData($MACSize, 1, 6)
	$r = DllCall("Ws2_32.dll", "int", "inet_addr", _
			"str", $sIP)
	$iIP = $r[0]
	$r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $iIP, "int", 0, "ptr", DllStructGetPtr($MAC), "ptr", DllStructGetPtr($MACSize))
	$s = ""
	If $mode = 0 Then
		For $i = 0 To 5
			$s &= Hex(DllStructGetData($MAC, 1, $i + 1), 2)
		Next
		
	ElseIf $mode = 1 Then
		For $i = 0 To 5
			If $i Then $s = $s & ":"
			$s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
		Next
	ElseIf $mode = 2 Then
		For $i = 0 To 5
			If $i Then $s = $s & "-"
			$s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
		Next
	EndIf
	Return $s
EndFunc   ;==>_GetMACFromIP

Func _GetRevison()
	$run = Run(@ComSpec & ' /c echo %PROCESSOR_REVISION%', '', @SW_HIDE, 6)
	$stdoutread = StdoutRead($run)
	If Not @error = -1 Then $outread = $stdoutread
	
	$stderrRead = StderrRead($run)
	If Not @error = -1 Then $outread = $stderrRead
	Return StringTrimLeft($outread, 1)
EndFunc   ;==>_GetRevison
;####################################################################  Sysinfo End