Что нового

ProgressBar для экспорта разделов реестра

Rimm

Новичок
Сообщения
30
Репутация
0
Есть простенький скрипт, который экспортирует два раздела реестра HKLM и HKCU:
Код:
#include <GUIConstants.au3> 
Opt("GUIOnEventMode", 1)
$mainwindow = GUICreate ("Mod", 200, 50) 
GUISetOnEvent ($GUI_EVENT_CLOSE, "CLOSEClicked")
$allexport = GUICtrlCreateButton ("Резервировать HKLM и HKCU", 10, 10, 180, 30) 
GUICtrlSetOnEvent($allexport, "allexport")
GUISetState (@SW_SHOW) 
While 1
	Sleep (1000)
WEnd

Func CloseClicked ()
	Exit
EndFunc

Func allexport ()
	Run (@ComSpec & " /c " & "REG EXPORT HKLM BackUp_HKLM.reg", "", @SW_HIDE)
	Run (@ComSpec & " /c " & "REG EXPORT HKCU BackUp_HKCU.reg", "", @SW_HIDE)
EndFunc

Можно ли создать ProgressBar, который будет отображать процесс экспорта в процентах?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Нет. Если Вы будете это делать через CMD, то не сможете узнать процент выполнения. CMD ничего не возвращает.
 
Автор
R

Rimm

Новичок
Сообщения
30
Репутация
0
А как средствами AutoIt экспортировать разделы реестра, чтобы ProgressBar мог отобразить процесс?
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Rimm
Недавно на офсайте задали такой же вопрос относительно поиска файлов. Прогресс бар может быть двух типов: а) с вычислением текущего состояния и б) в виде бегунка.

Подробнее
а)Отношение определённого текущего значения к общему результату. То есть по формуле "значение/конечное_значение*100. Если хоть одна из двух составляющих неизвестна, невозможно получить процентную величину.

б) Показывает, что прогресс не стоит на месте и в то же время неизвестно когда закончится. Здесь можно указать приблизительное время "Подождите минуту...".

Хотя здесь есть другие вариации, например за определённое время перемещаем полосу прогресса к центру. Если первый файл за это время не выполнился, то перемещение тормозится или останавливается или наоборот если успел выполнится, то быстро перевести к центру. То же самое ко второму файлу. Будет имитация реального вычисления прогресса. В данном случае задача программиста "обмануть" пользователя, сделав плавное перемещение, и учитывая время прохождения первого этапа.

Пример с бегунком есть в GUICtrlSendMsg

Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
 
Opt("GUIOnEventMode", 1)

$mainwindow = GUICreate ("Mod", 200, 50) 
GUISetOnEvent ($GUI_EVENT_CLOSE, "CLOSEClicked")
$allexport = GUICtrlCreateButton ("Резервировать HKLM и HKCU", 10, 10, 180, 30) 
GUICtrlSetOnEvent($allexport, "_allexport")
GUISetState() 

While 1
    Sleep (1000)
WEnd

Func CloseClicked ()
    Exit
EndFunc

Func _allexport()
	GUICtrlSetState($allexport, $GUI_HIDE)
	$StatusBar = GUICtrlCreateLabel('Этап 1. Выполняется экспорт HKLM', 10, 35, 190, 17, $SS_LEFTNOWORDWRAP)
	$ProgressBar = GUICtrlCreateProgress(10, 5, 180, 18)
    $iPID = Run ("Reg Export HKLM BackUp_HKLM.reg", "", @SW_HIDE)
	$iPos = 0
	; $hTimer = TimerInit()
	While ProcessExists($iPID)
		Sleep(100)
		$iPos += 1
		If $iPos > 50 Then $iPos = 50
		GUICtrlSetData($ProgressBar, $iPos)
	WEnd
	; $hTimer = TimerDiff($hTimer)
	GUICtrlSetData($StatusBar,'Этап 2. Выполняется экспорт HKCU')
    $iPID = Run ("Reg Export HKCU BackUp_HKCU.reg", "", @SW_HIDE)
	$iPos = 50
	While ProcessExists($iPID)
		Sleep(100)
		$iPos += 1
		If $iPos > 93 Then $iPos = 93
		GUICtrlSetData($ProgressBar, $iPos)
	WEnd
	GUICtrlSetData($ProgressBar, 100)
	GUICtrlSetData($StatusBar,'Готово!')
	Sleep(700)
	GUICtrlDelete($ProgressBar)
	GUICtrlDelete($StatusBar)
	GUICtrlSetState($allexport, $GUI_SHOW)
EndFunc
 
Автор
R

Rimm

Новичок
Сообщения
30
Репутация
0
Спасибо, AZJIO! В который раз помогаешь!
 
Верх