Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Вставка прогресс бара в функцию

Ответить
Настройки темы
Вставка прогресс бара в функцию

Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


Имеется функция и в нее нужно вставить прогресс бар, и что бы действительно отображал процесс копирования
GUI построен так
Код: Выделить весь код
$progress = GUICtrlCreateProgress(10,300,260,50)
Код: Выделить весь код
Func Restore_Proc()
    DirCopy(GUICtrlRead($A1), GUICtrlRead($A2), 1)
    Run("Regedit.exe /s " & GUICtrlRead($A1) & "\key.reg")
EndFunc
Всю программу я не стал выкладывать, т.к. она объемная...

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 22:55, 03-06-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата 11943499:
Одно НО, все эти функции один фиг не вызываются Hotkey в процессе копирования, который видимо занимает все активное процессорное время и не пускает в память никого. (Я про копирование NTFS). »
HotKeySet не обрабатывается до завершения callback-функции при копировании любого файла.

Цитата 11943499:
Пока решаю это просто ручным повторным открытием скрипта. »
Тогда могу предложить другой, похожий вариант - назначить HotKey в дополнительном скрипте, который будет работать в скрытом режиме, а используя интеракцию между скриптами дочерний скрипт сообщит родительскому что нужно завершать работу (это для корректной остановки копирования, однако не подходит для случая с прицепленным потоком NTFS), ну или сам завершит работу родителя, для этого нужно будет передавть при запуске скрипта PID родительского процесса (этот метод некорректен, но эффективен ).

Хм, забавно, на практике всё намного хуже чем я думал - дочерний скрипт тоже не обрабатывает HotKeySet пока процесс копирование не завершится очень странный баг...

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 01:04, 24-07-2009 | #41



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


А что мешает использовать _IsPressed? Оно нормально проверяется и срабатывает.

Код: Выделить весь код
#include <Misc.au3>

Global Const $PROGRESS_CONTINUE = 0
Global Const $PROGRESS_CANCEL   = 1
Global Const $PROGRESS_STOP     = 2
Global Const $PROGRESS_QUIET    = 3

Global $hDll = DllOpen("User32.dll")

_FileCopyEx("E:\Downloads\Video.avi", "D:\Dest\Video.avi", 8+1)

Func _FileCopyEx($sSource, $sDest, $iFlags=0)
    If Not FileExists($sSource) Then Return SetError(1)
    ProgressOn("_FileCopyEx() Demo", "Копирование файла...")

    Local $sFileName = StringRegExpReplace($sSource, "^.*\\", "")
    Local $sFilePath = StringRegExpReplace($sDest, "\\[^\\]*$", "")

    If Not BitAND($iFlags, 1) And FileExists($sDest) Then
        ProgressSet(0, "Ошибка копирования файла (" & $sFileName & "):" & @CRLF & "* Перезапись файла не разрешена")
        Sleep(2000)
        ProgressOff()
        Return SetError(2)
    EndIf

    If (BitAND($iFlags, 8) And Not DirCreate($sFilePath)) Or (Not StringInStr(FileGetAttrib($sFilePath), "D")) Then
        ProgressSet(0, "Ошибка копирования файла (" & $sFileName & ")" & @CRLF & "* Не найдена папка назначения")
        Sleep(2000)
        ProgressOff()
        Return SetError(3)
    EndIf

    Local $hCopyProgressRoutine = DllCallbackRegister("_CopyProgressRoutine", "int", _
        "uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;str")

    Local $aRet = DllCall("Kernel32.dll", "int", "CopyFileExA", _
        "str", $sSource, _
        "str", $sDest, _
        "ptr", DllCallbackGetPtr($hCopyProgressRoutine), _
        "str", $sFileName, _
        "int", 0, _
        "int", 0)

    DllCallBackFree($hCopyProgressRoutine)

    Sleep(1000)
    ProgressOff()
    Return 1
EndFunc

Func _CopyProgressRoutine($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    Local $iPrecent = $TotalBytesTransferred/$TotalFileSize * 100
    ProgressSet($iPrecent, "Проценты: " & Round($iPrecent, 1) & " %", "Копирую: " & $lpData)

    ;Abort on "Ctrl + Shift + A"
    If _IsPressed("10", $hDll) And _IsPressed("11", $hDll) And _IsPressed("41", $hDll) Then
        ProgressSet($iPrecent, "Проценты: " & Round($iPrecent, 1) & " % (Прервано пользователем)")
        Sleep(1000)
        Return ProcessClose(@AutoItPID)

        ;Return $PROGRESS_CANCEL
    EndIf

    Return $PROGRESS_CONTINUE
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:23, 24-07-2009 | #42


Новый участник


Сообщения: 36
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
А что мешает использовать _IsPressed? Оно нормально проверяется и срабатывает. »
Согласен, мне этот способ тоже больше нравится, видимо он обрабатывает нажатия на более глубинном уровне.

Последний раз редактировалось 11943499, 24-07-2009 в 13:55.


Отправлено: 13:04, 24-07-2009 | #43


Новый участник


Сообщения: 36
Благодарности: 0

Профиль | Отправить PM | Цитировать


А темка-то живет !
Вот еще вопросец,
Как с помощью этой функции копировать файл с перетиранием системного и только для чтения ?
По умолчанию она не перетирает такие файлы.

Отправлено: 16:51, 24-07-2009 | #44


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата 11943499:
А темка-то живет »
Темка может и живёт, а вот вопросики в ней уже пошли не в темку

Цитата 11943499:
Как с помощью этой функции копировать файл с перетиранием системного и только для чтения ? »
А почему бы просто не убрать атрибуты у файла (FileSetAttrib())?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 17:17, 24-07-2009 | #45


Новый участник


Сообщения: 36
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
А почему бы просто не убрать атрибуты у файла (FileSetAttrib())? »
Не допер до этого, чувствуется ход мысли истинного прграммера, спасибо!

Отправлено: 18:40, 24-07-2009 | #46


Аватара для crimes

Новый участник


Сообщения: 39
Благодарности: 6

Профиль | Отправить PM | Цитировать


Взял прогресс бар из этой темы:

Copy With Progress Example.au3
Copy_With_Progress_Incl.au3

Обеденил в один и с конвертировал его в "exe",теперь нужно сделать так:

Запуск будет через cmd\bat.
Код: Выделить весь код
Copy-With.exe "C:\из" "D:\куда"
И ещё при копирование не доступен рабочий стол,если можно исправить это,так как копирование очень большое.

За ранее спасибо.

-------
Не говорите что мне делать, я не скажу куда вам идти!


Отправлено: 17:59, 06-04-2014 | #47


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата crimes:
Взял … Обеденил … теперь нужно сделать так: »
Где Ваш «обеденённый» код?

Отправлено: 18:11, 06-04-2014 | #48


Аватара для crimes

Новый участник


Сообщения: 39
Благодарности: 6

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: 7z Copy_With.7z
(2.4 Kb, 12 просмотров)

Извеняюсь.

И если можно ещё его как то облегчить,и для общего понятия там файлов около 40гб файлы разные от 1 байта до 3гб.

-------
Не говорите что мне делать, я не скажу куда вам идти!


Последний раз редактировалось crimes, 06-04-2014 в 18:45.


Отправлено: 18:40, 06-04-2014 | #49


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата crimes:
теперь нужно сделать так:
Запуск будет через cmd\bat.
Код: Выделить весь код
Copy-With.exe "C:\из" "D:\куда"
»
Делайте: Running Scripts — Command Line Parameters.

Цитата crimes:
И ещё при копирование не доступен рабочий стол, »
Не подтверждаю. Доступен.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:46, 06-04-2014 | #50



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Вставка прогресс бара в функцию

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] [PHP] Прогресс-бар (счетчик игроков) D_Master Вебмастеру 3 27-03-2009 18:41
[решено] Прогресс бар semiono AutoIt 17 24-03-2009 23:18
вставка jpg kozerogg Хочу все знать 2 04-10-2004 14:28
Подскажите функцию в C++ dimakus Программирование и базы данных 2 01-04-2004 14:57
Отключить функцию. Simich Непонятные проблемы с Железом 14 04-07-2003 16:14




 
Переход