Вставка прогресс бара в функцию
Имеется функция и в нее нужно вставить прогресс бар, и что бы действительно отображал процесс копирования
GUI построен так Код:
$progress = GUICtrlCreateProgress(10,300,260,50) Код:
Func Restore_Proc() |
Medic84,
Поищите в архивных темах, там было решение подобной задаче (копирование с отображением прогресса). |
Так, я то нашел, и оно впринципе работает, на не так как надо...
Код:
Func Backup_Proc() Я не знаю как вызвать из процесса копирования эти самые % |
Цитата:
Вопрос только вот в чём; что имеется в виду под «что бы действительно отображал процесс копирования»? Просто имитация прогресса, или реально отображение всего прогресса (включая имена файлов, оставшееся время и т.п.)? P.S А вариант с отображением системного диалога копирования подходит? Вот пока пример для системного диалога: Код:
_FileCopy("C:\Source", "C:\Dest") |
Цитата:
|
Вот нашёл тот пример: http://forum.oszone.net/post-695975.html#post695975
|
Вложений: 1
Версия для последнего AutoIt (3.3.0.0).
|
Ооооо вот это я понимаю настоящий программер!!! Вопрос $Parent_Handle = WinGetHandle("") - это что???
|
Цитата:
|
И еще. Не мог бы ты немного модифицировать твой "инклуд"(Или создать другой)? собственно хочется что бы можно было Эту папку архивировать и вынимать из архива. Название архива можно принять Название копируемой папки.
|
Цитата:
|
Просто я когда создавал осознавал что архивирование мне не осилить... Поэтому начал спрашивать про копирование.
P.S. А как правильно написать. Мне нужно что бы программа проверила Путь в GUICtrlRead($A2) и если в нем нет папки \players, то выводит ошибку Так не работает Код:
If Not FileExists(GUICtrlRead($A2)&"\players") Then Return SetError(1, 0, -1) |
Цитата:
Архивирование можно осуществить через консольную программу 7zip. Ну или через COM-объект - Zip UDF. Цитата:
Можно ещё так проверить: Код:
If Not StringInStr(FileGetAttrib(GUICtrlRead($A2) & "\players"), "D") Then Return SetError(1, 0, -1) |
Разобрался сам. И наверное последний вопрос. Уже 2 час бьюсь об это. Расскажу на русском языке.
При отсутствии папки \player msgbox выдает сообщение Код:
If Not FileExists($Folder) Then MsgBox(4112,"Error", "Указана неверная папка!") Код:
MsgBox(4112,"Error", "Указана неверная папка!")And EndFunc |
Все! Спасибо Creat0R, я все сделал. Если хочешь посмотреть на программу, напиши сдесь. Я выложу.
|
Цитата:
|
Ан нет. Не последний. Как вызвать окно выбора папок? Как вызвать выбор файлов знаю, а папок нет.
Код:
$file = FileOpenDialog("Выберите файл...",@ProgramFilesDir,"Zip (*.Zip)") |
Аааа.. Что здесь не так??? Уже все волосы на голове выдергал!
Код:
$A1=GuiCtrlCreateInput("G:\Bakcup", 10, 180, 230, 20) Цитата:
|
Естественно.
StringReplace($Folder1,"G:\Bakcup", $A1) Означает, прочесать строку $Folder1 на наличие в ней "G:\Bakcup" и если оно там есть - заменить на $A1 GUICtrlSetData ( $A1, $Folder1) вместо этого следует использовать И ещё. Советую проверять. Вдруг в окне выбора папки нажата отмена. |
Medic84,
Не надо всё кидать в кучу, есть вопросы разной тематики - создавайте соответственно новые темы (убедившись что подобной темы ещё нет). |
Вот похожая функция, бнемного облегченная, с одним прогрессбаром.
_FileCopyEx($Source, $Dest) Одно плохо, процесс копирования нельзя отменить. Уважаемые знатоки, подскажите, как добавить клавишу отмены копирования. С правкой тела функций разумеется. Спасибо. Func _FileCopyEx($sSource, $sDest) If Not FileExists($sSource) Then Return SetError(1) ProgressOn("Идет копирование","","",@DesktopWidth-320,@DesktopHeight-181,2) Local $hCopyProgressRoutine = DllCallbackRegister("_CopyProgressRoutine", "int", _ "uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr") DllCall("kernel32.dll", "int", "CopyFileExA", _ "str", $sSource, _ "str", $sDest, _ "ptr", DllCallbackGetPtr($hCopyProgressRoutine), _ "ptr", 0, _ "int", 0, _ "int", 0) DllCallBackFree($hCopyProgressRoutine) Sleep(1000) ProgressOff() EndFunc Func _CopyProgressRoutine($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData) Local $iPrecent = $TotalBytesTransferred/$TotalFileSize * 100 ProgressSet($iPrecent, "Выполнено " & Round($iPrecent, 1) & " %") EndFunc |
11943499,
Куски кода заключайте в соот-вующие теги. Цитата:
|
Цитата:
есть работающая функция копирования с прогрессбаром. Компильнул и пользуешься. Не хватает клавиши или кнопки отмены. Использование горячей клавиши не идет, или запускающая ею функция не корректна для прерывания прогрессбара. Умнее чем ProgressOff ( ) не накопал, нл оно не работает. Вот такие важные детали. :) |
Цитата:
опять же, идея все та же - нарисовать окно, в нем пргресс бар, прикрутить эту функцию и вставить кнопку отмена Creat0R, а ты не делал пример на с отменой? что то было кажется, да найти не могу... |
Цитата:
Код:
#include <Misc.au3> Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Процесс копирования виснет, а не закрывается. |
Цитата:
|
Цитата:
Autoit последний |
|
Виснет именно при копировании файла с прицепленным потоком NTFS.
Об этом уже говорили на Ruboard, получается этот процесс в принципе непрерываем. Отстегивание и пристегивание скрытого потока не пойдет, чревато потерями данных... |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Код:
_FileCopy("E:\Downloads\Video.avi", "C:\Dest\") |
В свете разработок по закрытию дубля программы, нашел способ прерывать ЛЮБОЙ процесс копирования :unsure:
Для прерывания процесса достаточно запустить скрипт из самого себя. Происходит дубль открытия, процессы гасятся, копирование прекращается. :) |
Цитата:
Если уже на то пошло (“гашение” процесса копирование), то почему бы просто не указать скрипту закрывать самого себя? Код:
ProcessClose(@AutoItPID) |
Цитата:
Цитата:
Одно НО, все эти функции один фиг не вызываются Hotkey в процессе копирования, который видимо занимает все активное процессорное время и не пускает в память никого. (Я про копирование NTFS). Пока решаю это просто ручным повторным открытием скрипта. Все же есть особенности в копировании системным способом и программным. Даже Total Comander не отменяет такого копирования. |
Цитата:
Цитата:
Хм, забавно, на практике всё намного хуже чем я думал - дочерний скрипт тоже не обрабатывает HotKeySet пока процесс копирование не завершится :dont-know очень странный баг... |
А что мешает использовать _IsPressed? Оно нормально проверяется и срабатывает.
Код:
#include <Misc.au3> |
Цитата:
|
А темка-то живет ! :)
Вот еще вопросец, Как с помощью этой функции копировать файл с перетиранием системного и только для чтения ? По умолчанию она не перетирает такие файлы. |
|
Цитата:
|
Взял прогресс бар из этой темы:
Copy With Progress Example.au3 Copy_With_Progress_Incl.au3 Обеденил в один и с конвертировал его в "exe",теперь нужно сделать так: Запуск будет через cmd\bat. Код:
Copy-With.exe "C:\из" "D:\куда" За ранее спасибо. |
Цитата:
|
Вложений: 1
Извеняюсь.
И если можно ещё его как то облегчить,и для общего понятия там файлов около 40гб файлы разные от 1 байта до 3гб. |
Цитата:
Цитата:
|
Цитата:
Спасибо! Код:
$Title = "Копирование..." И ещё можете помочь в этой теме,последнее сообщение. http://forum.oszone.net/thread-244893.html Только желательно готовый вариант. |
Цитата:
Код:
start /? |
Цитата:
Вообще речи и шла на прямой запуск "тогда рабочий стол блокируеться",в друг буду и напрямик пользоваться. А через cmd можно и так,но это не важно,главное уже решено,вы мне в другой теме лучше помогите. http://forum.oszone.net/thread-244893.html Ещё раз спасибо. |
Время: 02:32. |
Время: 02:32.
© OSzone.net 2001-