- Сообщения
- 3,557
- Репутация
- 628
AutoIt: 3.3.8.0
Категория: Автоматизация
Описание: Управление программой Sdelete через графический интерфейс.
Код/Пример:
Файл: исходник + программа
Снимок:
Источник: autoit-script.ru
Автор(ы): Склеил я
Категория: Автоматизация
Описание: Управление программой 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
Автор(ы): Склеил я