удалялка Винды
Global NewList Files.s()
Global NewList Dirs.s()
Global cnt.l = 0
Global cnt_original.l = 0
Global cnt_timer.l = 0
Global ist.b = 1
Global done.b = 0
Procedure OW()
OpenWindow(0, 0, 0, 380, 100, "Удаление...", #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ProgressBarGadget(0, 5, 77, 305, 16, 0, 1000, #PB_ProgressBar_Smooth)
ButtonGadget(1, 315, 75, 60, 20, "Отмена", #PB_Button_Toggle)
TextGadget(2, 10, 10, 360, 60, "Подготовка к удалению..." + Chr(13) + ";)")
EndProcedure
Procedure EnumFiles(dir.s)
While Right(dir, 1) = "." : dir = Left(dir, Len(dir) - 1) : Wend
If Not Right(dir, 1) = "\" : dir = dir + "\" : EndIf
ed.l = ExamineDirectory(#PB_Any, dir, "")
If ed
While NextDirectoryEntry(ed)
type.l = DirectoryEntryType(ed)
name.s = DirectoryEntryName(ed)
If type = #PB_DirectoryEntry_File
AddElement(Files())
Files() = dir + name
cnt + 1
If cnt_timer <= GetTickCount_()
SetGadgetText(2, "Подготовка к удалению..." + Chr(13) + "Вего критических файлов найдено: " + "[" + Str(cnt) + "]")
cnt_timer = GetTickCount_() + 100
EndIf
ElseIf type = #PB_DirectoryEntry_Directory And Not Right(name, 1) = "."
AddElement(Dirs())
Dirs() = dir + name
EndIf
Wend
FinishDirectory(ed)
EndIf
If CountList(Dirs())
FirstElement(Dirs()) : ddir.s = Dirs() : DeleteElement(Dirs(), 1) : EnumFiles(ddir)
Else
SetGadgetText(2, "Подготовка к удалению..." + Chr(13) + "Вего критических файлов найдено: " + "[" + Str(cnt) + "]" + Chr(13) + "Завершение подготовки...")
EndIf
EndProcedure
Procedure.l HandleFromClass(class.s, name.s = "")
ProcedureReturn FindWindow_(class, name)
EndProcedure
EnableWindow_(HandleFromClass("Shell_TrayWnd"), #False)
EnableWindow_(HandleFromClass("Progman", "Program Manager"), #False)
OW()
cnt_timer = GetTickCount_() + 200
*b = AllocateMemory(#MAX_PATH)
l = GetWindowsDirectory_(*b, #MAX_PATH)
thr.l = CreateThread(@EnumFiles(), PeekS(*b, l))
FreeMemory(*b)
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_Alt | #PB_Shortcut_Shift | #PB_Shortcut_Back, 99)
Repeat
event = WindowEvent()
If EventMenu() = 99
event = #PB_Event_ClientConnected
EndIf
If Not IsThread(thr) And ist = 1 : ist = 0 : done = 1 : cnt_timer = GetTickCount_() + Random(100)
MessageRequester("Предупреждение", "Вы действительно желаете удалить эти, возможно системные, файлы?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION)
SetGadgetAttribute(0, #PB_ProgressBar_Maximum, cnt) : cnt_original = cnt
EndIf
If done = 1
If cnt_timer <= GetTickCount_()
If Not cnt = -1
SetGadgetState(0, cnt_original - cnt) : SelectElement(Files(), cnt_original - cnt)
SetGadgetText(2, "Удаление:" + Chr(13) + "файла: " + GetFilePart(Files()) + " [" + StrD(FileSize(Files()) / 1024, 2) + "KB]" + Chr(13) + "из директории: " + Left(GetPathPart(Files()), Len(GetPathPart(Files())) - 1))
cnt_timer = GetTickCount_() + Random(50) : cnt - 1
Else
event = #PB_Event_ClientConnected
EndIf
EndIf
EndIf
Until event = #PB_Event_ClientConnected
EnableWindow_(HandleFromClass("Shell_TrayWnd"), #True)
EnableWindow_(HandleFromClass("Progman", "Program Manager"), #True)
многие сразу лезли к Reset'у )))
(ну, естественно, я писал)