Что нового

[Автоматизация] Управление консольной программой удаления данных - sdelete

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
AutoIt: 3.3.8.0


Категория: Автоматизация

Описание: Управление программой Sdelete через графический интерфейс.

Код/Пример:
Код:
#NoTrayIcon
#include <FileOperations.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <Misc.au3>
#include <File.au3>
#include <Constants.au3>
_Singleton("ERASER.exe")
Global $file, $folder, $nExit, $clean, $files, $folders
OnAutoItExitRegister('_exit')
HotKeySet('^{F1}', '_ScriptRestart')
$proc = ProcessExists('sdelete.exe')
If $proc Then
	ProcessClose($proc)
EndIf
FileInstall('sdelete.exe', @ScriptDir & '\sdelete.exe', 1)
If FileExists(@ScriptDir & '\sdelete.exe') = 0 Then
	MsgBox(0, '', 'Не найден исполняемый файл')
	Exit
EndIf
RegWrite('HKEY_CURRENT_USER\Software\Sysinternals\SDelete', 'EulaAccepted', 'REG_DWORD', '00000001')
$Form1 = GUICreate("ERASER", 390, 120, 549, 290, $WS_SYSMENU)
GUISetIcon("shell32.dll", -132)
$Checkbox1 = GUICtrlCreateCheckbox("", 8, 32, 17, 17)
$Checkbox2 = GUICtrlCreateCheckbox("", 72, 32, 17, 17)
$Combo1 = GUICtrlCreateCombo("", 25, 56, 57, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $CBS_DROPDOWNLIST, $CBS_UPPERCASE))
GUICtrlSetState($Combo1, $GUI_DISABLE)
$Label1 = GUICtrlCreateLabel("HDD", 24, 32, 28, 17)
$Label2 = GUICtrlCreateLabel("USB", 88, 32, 26, 17)
$Button1 = GUICtrlCreateButton("Очистить", 100, 56, 75, 25)
GUICtrlSetState($Button1, $GUI_DISABLE)
$Label3 = GUICtrlCreateLabel("Очистка диска", 10, 8, 100, 15)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Button3 = GUICtrlCreateButton("Удалить файл", 208, 56, 83, 25)
$Button4 = GUICtrlCreateButton("Удалить папку", 208, 24, 83, 25)
$Button5 = GUICtrlCreateButton("Справка", 304, 24, 73, 25)
$Button6 = GUICtrlCreateButton("Перезапуск", 304, 56, 73, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button3
			_filedelete()
		Case $Button4
			_folderdelete()
		Case $Button1
			_cleandisc()
		Case $Checkbox1
			GUICtrlSetState($Checkbox2, $GUI_UNCHECKED)
			GUICtrlSetState($Button1, $GUI_enable)
			GUICtrlSetState($Button1, $GUI_FOCUS)
			GUICtrlSetState($Combo1, $GUI_enable)
			If GUICtrlRead($Checkbox1) = $GUI_UNCHECKED Then
				GUICtrlSetState($Combo1, $GUI_DISABLE)
				GUICtrlSetState($Button1, $GUI_DISABLE)
			EndIf
			$fixed = DriveGetDrive('fixed')
			$Lines_f = _ArrayToString($fixed, '|', 1)
			GUICtrlSetData($Combo1, '')
			GUICtrlSetData($Combo1, $Lines_f)
		Case $Checkbox2
			GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
			GUICtrlSetState($Button1, $GUI_enable)
			GUICtrlSetState($Button1, $GUI_FOCUS)
			GUICtrlSetState($Combo1, $GUI_enable)
			If GUICtrlRead($Checkbox2) = $GUI_UNCHECKED Then
				GUICtrlSetState($Combo1, $GUI_DISABLE)
				GUICtrlSetState($Button1, $GUI_DISABLE)
			EndIf
			$REMOVABLE = DriveGetDrive('REMOVABLE')
			$Lines_r = _ArrayToString($REMOVABLE, '|', 1)
			GUICtrlSetData($Combo1, '')
			GUICtrlSetData($Combo1, $Lines_r)
		Case $Button6
			_ScriptRestart()
		Case $Button5
			MsgBox(48, "Для размышления", "Для удаления данных используется программа SDELETE." & @CRLF & "Назначение программы - удаление файлов без возможности восстановления." & @CRLF & "Если папка имеет длинный путь хранения и файлы с длинными именами, то она может быть не удалена" & @CRLF & "Чтобы остановить удаление или очистку нужно нажать Ctrl+F1 или правой кнопкой мыши на иконке программы в трее.Выбрать пункт " & "'" & "Остановить" & "'" & @CRLF & "Очистка диска - это не стирание данных." & @CRLF & "Перед началом работы трижды подумай!" & @CRLF & "Подробнее о программе SDELETE  можно узнать здесь:" & @CRLF & "http://technet.microsoft.com/ru-ru/sysinternals/bb897443.aspx")
	EndSwitch
WEnd

Func _filedelete()
	If FileExists(@ScriptDir & '\sdelete.exe') = 0 Then
		MsgBox(0, '', 'Не найден исполняемый файл')
		Exit
	EndIf
	$path_file = FileOpenDialog('', '', '(*.*)')
	If $path_file = '' Then
		Return
	EndIf
	GUISetState(@SW_HIDE)
	Opt("TrayMenuMode", 1 + 2)
	TraySetIcon('shell32.dll', -132)
	$nExit = TrayCreateItem('Остановить')
	TraySetClick(16)
	AdlibRegister('_tray', 50)
	AdlibRegister('_infofile')
	$file = FileGetShortName($path_file)
	RunWait(@ScriptDir & "\sdelete.exe -a " & $file, "", @SW_HIDE)
	If FileExists($file) Then
		MsgBox(0, '', 'Файл не удален')
	EndIf
	_ScriptRestart()
EndFunc   ;==>_filedelete

Func _folderdelete()
	If FileExists(@ScriptDir & '\sdelete.exe') = 0 Then
		MsgBox(0, '', 'Не найден исполняемый файл')
		Exit
	EndIf
	$path_folder = FileSelectFolder('', '')
	If $path_folder = '' Then
		Return
	EndIf
	GUISetState(@SW_HIDE)
	Opt("TrayMenuMode", 1 + 2)
	TraySetIcon('shell32.dll', -132)
	$nExit = TrayCreateItem('Остановить')
	TraySetClick(16)
	AdlibRegister('_tray', 50)
	AdlibRegister('_infofiles')
	$folder = FileGetShortName($path_folder)
	$aReturn_files = _FO_FileSearch($path_folder, "*", True, 125, 1, 2)
	_ArrayReverse($aReturn_files)
	For $fl = 0 To UBound($aReturn_files) - 1
		$files = FileGetShortName($aReturn_files[$fl])
		RunWait(@ScriptDir & "\sdelete.exe -a " & $files, "", @SW_HIDE)
	Next
	AdlibUnRegister('_infofiles')
	AdlibRegister('_infofolders')
	$aReturn_folders = _FO_FolderSearch($path_folder, "*", True, 125, 1, 2)
	_ArrayReverse($aReturn_folders)
	For $fd = 0 To UBound($aReturn_folders) - 1
		$folders = FileGetShortName($aReturn_folders[$fd])
		RunWait(@ScriptDir & "\sdelete.exe -a " & $folders, "", @SW_HIDE)
	Next
	$folder = FileGetShortName($path_folder)
	RunWait(@ScriptDir & "\sdelete.exe -a " & $folder, "", @SW_HIDE)
	If FileExists($folder) Then
		MsgBox(0, '', 'Некоторые файлы не удалены')
	EndIf
	_ScriptRestart()
EndFunc   ;==>_folderdelete

Func _cleandisc()
	If FileExists(@ScriptDir & '\sdelete.exe') = 0 Then
		MsgBox(0, '', 'Не найден исполняемый файл')
		Exit
	EndIf
	$clean = GUICtrlRead($Combo1)
	If $clean = '' Then
		MsgBox(0, '', 'Не выбрано устройство')
		Return
	Else
		GUISetState(@SW_HIDE)
		Opt("TrayMenuMode", 1 + 2)
		TraySetIcon('shell32.dll', -132)
		$nExit = TrayCreateItem('Остановить')
		TraySetClick(16)
		AdlibRegister('_tray', 50)
		AdlibRegister('_infodisc')
		RunWait(@ScriptDir & "\sdelete.exe -c -z " & $clean & '\', "", @SW_HIDE)
	EndIf
	_ScriptRestart()
EndFunc   ;==>_cleandisc

Func _infodisc()
	TrayTip('Info', 'Очистка диска ' & $clean & '\', 1)
EndFunc   ;==>_infodisc

Func _exit()
	$exit = ProcessExists('sdelete.exe')
	If $exit Then
		ProcessClose($exit)
	EndIf
	FileDelete(@ScriptDir & '\sdelete.exe')
EndFunc   ;==>_exit

Func _infofile()
	TrayTip('Info', 'Удаление ' & @CRLF & $file, 1)
EndFunc   ;==>_infofile

Func _infofiles()
	TrayTip('Info', 'Удаление ' & @CRLF & $files, 1)
EndFunc   ;==>_infofiles

Func _infofolders()
	TrayTip('Info', 'Удаление ' & @CRLF & $folders, 1)
EndFunc   ;==>_infofolders

Func _ScriptRestart()
	$sVbs = _TempFile(@TempDir, '~', '.vbs')
	$hFile = FileOpen($sVbs, 2)
	FileWriteLine($hFile, 'Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")')
	FileWriteLine($hFile, 'Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")')
	FileWriteLine($hFile, 'Set colItems = objRefresher.AddEnum(objService, "Win32_Process").objectSet')
	FileWriteLine($hFile, 'Do Until False')
	FileWriteLine($hFile, '    WScript.Sleep 500')
	FileWriteLine($hFile, '    objRefresher.Refresh')
	FileWriteLine($hFile, '    Flag = True')
	FileWriteLine($hFile, '    For Each objItem in colItems')
	FileWriteLine($hFile, '        If objItem.ProcessID = ' & @AutoItPID & ' Then')
	FileWriteLine($hFile, '            Flag = False')
	FileWriteLine($hFile, '        End If')
	FileWriteLine($hFile, '    Next')
	FileWriteLine($hFile, '    If Flag = True Then')
	FileWriteLine($hFile, '        Exit Do')
	FileWriteLine($hFile, '    End If')
	FileWriteLine($hFile, 'Loop')
	FileWriteLine($hFile, 'Set objShell = CreateObject("WScript.Shell")')
	FileWriteLine($hFile, 'objShell.Run("' & FileGetShortName(@ScriptFullPath) & '")')
	FileWriteLine($hFile, 'Set objFSO = CreateObject("Scripting.FileSystemObject")')
	FileWriteLine($hFile, 'Set File = objFSO.GetFile("' & FileGetShortName($sVbs) & '")')
	FileWriteLine($hFile, 'File.Delete')
	FileClose($hFile)
	ShellExecute($sVbs)
	Exit
EndFunc   ;==>_ScriptRestart

Func _tray()
	Switch TrayGetMsg()
		Case $nExit
			$tray = ProcessExists('sdelete.exe')
			If $tray Then
				ProcessClose($tray)
			EndIf
			_ScriptRestart()
	EndSwitch
EndFunc   ;==>_tray

Файл: исходник + программа

Снимок:




Источник: autoit-script.ru
Автор(ы): Склеил я :smile:
 
Верх