Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Вставка прогресс бара в функцию (http://forum.oszone.net/showthread.php?t=141807)

Medic84 03-06-2009 22:55 1134371

Вставка прогресс бара в функцию
 
Имеется функция и в нее нужно вставить прогресс бар, и что бы действительно отображал процесс копирования
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

Всю программу я не стал выкладывать, т.к. она объемная...

Creat0R 03-06-2009 23:30 1134391

Medic84,
Поищите в архивных темах, там было решение подобной задаче (копирование с отображением прогресса).

Medic84 04-06-2009 12:28 1134761

Так, я то нашел, и оно впринципе работает, на не так как надо...

Код:

Func Backup_Proc()
        GUICtrlSetData($progress, DirCopy(GUICtrlRead($A2), GUICtrlRead($A1), 1))
    _RegExport("HKLM\Software\Activision\Call of Duty 4", "codkey", GUICtrlRead($A1) & "\key.reg")
EndFunc

Заполняется только 1% и то когда все закончится.
Я не знаю как вызвать из процесса копирования эти самые %

Creat0R 04-06-2009 13:53 1134845

Цитата:

Цитата Medic84
я то нашел, и оно впринципе работает, на не так как надо »

Это не то. Я и сам затрудняюсь найти тот самый пример, но есть он у меня в архивах на харде :)

Вопрос только вот в чём; что имеется в виду под «что бы действительно отображал процесс копирования»? Просто имитация прогресса, или реально отображение всего прогресса (включая имена файлов, оставшееся время и т.п.)?

P.S
А вариант с отображением системного диалога копирования подходит?

Вот пока пример для системного диалога:

Код:

_FileCopy("C:\Source", "C:\Dest")

Func _FileCopy($sSource, $sDest, $iShowConfirm=1, $iShowProgress=1)
    Local Const $FOF_RESPOND_YES = 64
    Local Const $FOF_NOCONFIRMATION = 16
    Local Const $FOF_SIMPLEPROGRESS = 256

    Local $iFlags = 0

    If $iShowConfirm = 0 Then $iFlags = BitOR($iFlags, $FOF_NOCONFIRMATION)
    If $iShowProgress <> 0 Then $iFlags = BitOR($iFlags, $FOF_SIMPLEPROGRESS)

    If Not FileExists($sDest) Then DirCreate($sDest)

    Local $oShell = ObjCreate("Shell.Application")

    Local $oNameSpace = $oShell.NameSpace($sDest)
    $oNameSpace.MoveHere($sSource, $iFlags)
EndFunc


Medic84 04-06-2009 14:04 1134858

Цитата:

Цитата Creat0R
Вопрос только вот в чём; что имеется в виду под «что бы действительно отображал процесс копирования»? Просто имитация прогресса, или реально отображение всего прогресса (включая имена файлов, оставшееся время и т.п.)? »

Да, хотя бы просто реальное отображение прогресса....

Creat0R 04-06-2009 14:09 1134869

Вот нашёл тот пример: http://forum.oszone.net/post-695975.html#post695975

Creat0R 04-06-2009 14:14 1134877

Вложений: 1
Версия для последнего AutoIt (3.3.0.0).

Medic84 04-06-2009 14:34 1134893

Ооооо вот это я понимаю настоящий программер!!! Вопрос $Parent_Handle = WinGetHandle("") - это что???

Creat0R 04-06-2009 14:45 1134905

Цитата:

Цитата Medic84
WinGetHandle("") - это что? »

Это идентификатор родительского окна, там (между "") можно подставить любой заголовок, к этому окну будет “приатаченно” окно прогресса.

Medic84 04-06-2009 14:45 1134906

И еще. Не мог бы ты немного модифицировать твой "инклуд"(Или создать другой)? собственно хочется что бы можно было Эту папку архивировать и вынимать из архива. Название архива можно принять Название копируемой папки.

Creat0R 04-06-2009 14:58 1134911

Цитата:

Цитата Medic84
хочется что бы можно было Эту папку архивировать и вынимать из архива »

А при чём тут прогресс копирования?

Medic84 04-06-2009 15:17 1134927

Просто я когда создавал осознавал что архивирование мне не осилить... Поэтому начал спрашивать про копирование.

P.S. А как правильно написать. Мне нужно что бы программа проверила Путь в GUICtrlRead($A2) и если в нем нет папки \players, то выводит ошибку
Так не работает
Код:

If Not FileExists(GUICtrlRead($A2)&"\players") Then Return SetError(1, 0, -1)

Creat0R 04-06-2009 16:51 1135027

Цитата:

Цитата Medic84
Поэтому начал спрашивать про копирование. »

И это является офтопиком.
Архивирование можно осуществить через консольную программу 7zip. Ну или через COM-объект - Zip UDF.

Цитата:

Цитата Medic84
Так не работает »

Что именно тут не работает?
Можно ещё так проверить:

Код:

If Not StringInStr(FileGetAttrib(GUICtrlRead($A2) & "\players"), "D") Then Return SetError(1, 0, -1)
Это для надёжности, иначе при наличии файла (не папки) с именем player (без расширения) тоже будет определена ошибка.

Medic84 04-06-2009 17:06 1135042

Разобрался сам. И наверное последний вопрос. Уже 2 час бьюсь об это. Расскажу на русском языке.
При отсутствии папки \player msgbox выдает сообщение

Код:

If Not FileExists($Folder) Then MsgBox(4112,"Error", "Указана неверная папка!")
Но процесс продолжается. Не знаю еще как сделать. Думал поставить после

Код:

MsgBox(4112,"Error", "Указана неверная папка!")And EndFunc
Не проходит...

Medic84 04-06-2009 20:50 1135212

Все! Спасибо Creat0R, я все сделал. Если хочешь посмотреть на программу, напиши сдесь. Я выложу.

Creat0R 04-06-2009 21:22 1135252

Цитата:

Цитата Medic84
Не проходит »

Эм... вот для того чтобы не гадать (проходит не проходит), справка по AutoIt и была написана ;).

Medic84 05-06-2009 10:38 1135590

Ан нет. Не последний. Как вызвать окно выбора папок? Как вызвать выбор файлов знаю, а папок нет.

Код:

$file = FileOpenDialog("Выберите файл...",@ProgramFilesDir,"Zip (*.Zip)")
- Вызов диалога Open

Medic84 05-06-2009 12:45 1135687

Аааа.. Что здесь не так??? Уже все волосы на голове выдергал!

Код:

$A1=GuiCtrlCreateInput("G:\Bakcup", 10, 180, 230, 20)
$A2=GuiCtrlCreateInput("G:\Call of Duty 4 - Modern Warfare\players", 10, 220, 230, 20)

Цитата:

Case $Button_A1
$Folder1 = FileSelectFolder("Выберите папку", "")
StringReplace($Folder1,"G:\Bakcup", $A1)
Case $Button_A2
$Folder2 = FileSelectFolder("Выберите папку", "")
StringReplace($Folder2,"G:\Call of Duty 4 - Modern Warfare\players", $A2)
Новый заданный путь не прописывается в Input!

SyDr 05-06-2009 15:08 1135786

Естественно.

StringReplace($Folder1,"G:\Bakcup", $A1)
Означает, прочесать строку $Folder1 на наличие в ней "G:\Bakcup" и если оно там есть - заменить на $A1

GUICtrlSetData ( $A1, $Folder1) вместо этого следует использовать

И ещё. Советую проверять. Вдруг в окне выбора папки нажата отмена.

Creat0R 05-06-2009 15:30 1135803

Medic84,
Не надо всё кидать в кучу, есть вопросы разной тематики - создавайте соответственно новые темы (убедившись что подобной темы ещё нет).

11943499 20-07-2009 22:57 1173151

Вот похожая функция, бнемного облегченная, с одним прогрессбаром.
_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

Creat0R 20-07-2009 23:35 1173174

11943499,
Куски кода заключайте в соот-вующие теги.

Цитата:

Цитата 11943499
процесс копирования нельзя отменить »

Можно, если это конечно не тот же вопрос что был на руборде, тогда вы снова упускаете важные детали при постановке вопроса :)

11943499 21-07-2009 00:54 1173226

Цитата:

Цитата Creat0R
Можно, если это конечно не тот же вопрос что был на руборде, тогда вы снова упускаете важные детали при постановке вопроса »

Постановка проста,
есть работающая функция копирования с прогрессбаром. Компильнул и пользуешься. Не хватает клавиши или кнопки отмены.
Использование горячей клавиши не идет, или запускающая ею функция не корректна для прерывания прогрессбара.
Умнее чем ProgressOff ( ) не накопал, нл оно не работает. Вот такие важные детали. :)

proxy 21-07-2009 01:36 1173253

Цитата:

Цитата 11943499
есть работающая функция копирования с прогрессбаром. Компильнул и пользуешься. Не хватает клавиши или кнопки отмены. »

мне это только кажется или на ру-борде этот вопрос в тот раз еще не решили?
опять же, идея все та же - нарисовать окно, в нем пргресс бар, прикрутить эту функцию и вставить кнопку отмена

Creat0R, а ты не делал пример на с отменой? что то было кажется, да найти не могу...

Creat0R 21-07-2009 02:54 1173276

Цитата:

Цитата 11943499
Постановка проста »

Ну посмотрим:

Код:

#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\Some big file.avi", "C:\Some big file.avi")

Func _FileCopyEx($sSource, $sDest)
    If Not FileExists($sSource) Then Return SetError(1)
    ProgressOn("_FileCopyEx() Demo", "Копирование файла: " & StringRegExpReplace($sSource, "^.*\\", ""))

    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) & " %")

    If _IsPressed("1B", $hDll) Then
        ProgressSet($iPrecent, "Проценты: " & Round($iPrecent, 1) & " % (Прервано пользователем)")
        Return $PROGRESS_CANCEL
    EndIf

    Return
$PROGRESS_CONTINUE
EndFunc

Цитата:

Цитата 11943499
Использование горячей клавиши не идет, или запускающая ею функция не корректна для прерывания прогрессбара. »

По HotKeySet да, оно не сработает, видимо это из за повторного использования механизма callbak (HotKeySet это тоже своего рода callback).

Цитата:

Цитата proxy
ты не делал пример на с отменой? »

Только его направляющую часть ;)

proxy 21-07-2009 04:13 1173288

Цитата:

Цитата Creat0R
Только его направляющую часть »

значит на досуге надо собраться нам и сделать ....а то чувствую это тема доооооооооооооооооолго тянется )

Creat0R 21-07-2009 04:36 1173293

Цитата:

Цитата proxy
значит на досуге надо собраться нам и сделать »

Что сделать? Я же выше привёл рабочий вариант. Кроме прочего, поискать можно и найти кучу подобных решении, у меня в базе скриптов как минимум штук 5 есть.

11943499 21-07-2009 08:19 1173327

Цитата:

Цитата Creat0R
Что сделать? Я же выше привёл рабочий вариант. »

Вариант рабочий, но на практике не очень. На ruborde я писал про копирование NTFS потоков, это было ошибочное заявление, там пробовал Hotkey-ем тормозить процесс, и вроде срабатывало на FAT32, но на самом деле та же история. Лучшее что происходит, так это зависание процесса копирования. Спасибо за проявленный интерес, когда гуру собираются вместе, как-то спокойно и светло на душе становится... :)

Creat0R 21-07-2009 08:47 1173337

Цитата:

Цитата 11943499
Вариант рабочий, но на практике не очень. На ruborde я писал про копирование NTFS потоков, это было ошибочное заявление, там пробовал Hotkey-ем тормозить процесс, и вроде срабатывало на FAT32, но на самом деле та же история. »

Так в чём собственно непрактичность примера?

11943499 21-07-2009 10:01 1173386

Цитата:

Цитата Creat0R
Так в чём собственно непрактичность примера? »

да все хорошо, но не работает...
Процесс копирования виснет, а не закрывается.

Creat0R 21-07-2009 16:30 1173719

Цитата:

Цитата 11943499
Процесс копирования виснет, а не закрывается »

Какая система и версия AutoIt?

11943499 21-07-2009 19:10 1173876

Цитата:

Цитата Creat0R
Какая система и версия AutoIt? »

Windows 7 X64 и XP Prof SP3
Autoit последний

Creat0R 21-07-2009 19:20 1173889

Цитата:

Цитата 11943499
Windows 7 X64 и XP Prof SP3 »

Не знаю, у меня на XP SP2 hf,jnftn (Fat32). См. MSDN для подробностей.

11943499 22-07-2009 01:23 1174214

Виснет именно при копировании файла с прицепленным потоком NTFS.
Об этом уже говорили на Ruboard, получается этот процесс в принципе непрерываем.
Отстегивание и пристегивание скрытого потока не пойдет, чревато потерями данных...

Creat0R 22-07-2009 02:22 1174234

Цитата:

Цитата 11943499
Виснет именно при копировании файла с прицепленным потоком NTFS »

А я ведь писал:

Цитата:

Цитата Creat0R
Можно, если это конечно не тот же вопрос что был на руборде, тогда вы снова упускаете важные детали при постановке вопроса »

Цитата:

Цитата 11943499
этот процесс в принципе непрерываем »

При копировании через Windows, можно отменить этот процесс? значит и через скрипт можно, нужно просто покапаться поглубже. Кстати если нужно, есть пример для копирования именно с отображением системного диалога.

11943499 22-07-2009 08:47 1174321

Цитата:

Цитата Creat0R
При копировании через Windows, можно отменить этот процесс? »

Да, Винда процесс прерывает, но Total Comander и Far не могут :) Они выдают сообщение что процесс отменен и продолжают копировать.

Цитата:

Цитата Creat0R
Кстати если нужно, есть пример для копирования именно с отображением системного диалога. »

Буду благодарен. Надо как-то разобраться, а то застрял на ерунде...

Creat0R 22-07-2009 16:39 1174759

Цитата:

Цитата 11943499
Буду благодарен »

Код:

_FileCopy("E:\Downloads\Video.avi", "C:\Dest\")

Func _FileCopy($sSource, $sDest, $iShowConfirm=1, $iShowProgress=1)
    Local Const $FOF_RESPOND_YES = 64
    Local Const $FOF_NOCONFIRMATION = 16
    Local Const $FOF_SIMPLEPROGRESS = 256

    Local $iFlags = 0

    If $iShowConfirm = 0 Then $iFlags = BitOR($iFlags, $FOF_NOCONFIRMATION)
    If $iShowProgress <> 0 Then $iFlags = BitOR($iFlags, $FOF_SIMPLEPROGRESS)

    Local $sDest_Path = StringRegExpReplace($sDest, "\\[^\\]*$", "")
    If Not StringInStr(FileGetAttrib($sDest_Path), "D") Then DirCreate($sDest_Path)

    Local $oShell = ObjCreate("Shell.Application")

    Local $oNameSpace = $oShell.NameSpace($sDest)
    $oNameSpace.CopyHere($sSource, $iFlags)
EndFunc

Func
_FileMove($sSource, $sDest, $iShowConfirm=1, $iShowProgress=1)
    Local Const $FOF_RESPOND_YES = 64
    Local Const $FOF_NOCONFIRMATION = 16
    Local Const $FOF_SIMPLEPROGRESS = 256

    Local $iFlags = 0

    If $iShowConfirm = 0 Then $iFlags = BitOR($iFlags, $FOF_NOCONFIRMATION)
    If $iShowProgress <> 0 Then $iFlags = BitOR($iFlags, $FOF_SIMPLEPROGRESS)

    Local $sDest_Path = StringRegExpReplace($sDest, "\\[^\\]*$", "")
    If Not StringInStr(FileGetAttrib($sDest_Path), "D") Then DirCreate($sDest_Path)

    Local $oShell = ObjCreate("Shell.Application")

    Local $oNameSpace = $oShell.NameSpace($sDest)
    $oNameSpace.MoveHere($sSource, $iFlags)
EndFunc


11943499 23-07-2009 21:26 1175978

В свете разработок по закрытию дубля программы, нашел способ прерывать ЛЮБОЙ процесс копирования :unsure:
Для прерывания процесса достаточно запустить скрипт из самого себя. Происходит дубль открытия, процессы гасятся, копирование прекращается. :)

Creat0R 23-07-2009 23:26 1176049

Цитата:

Цитата 11943499
Для прерывания процесса достаточно запустить скрипт из самого себя. Происходит дубль открытия, процессы гасятся, копирование прекращается. »

Что-то тут нелогично, как повторный запуск скрипта влияет на процесс первого скрипта (если он конечно его сам и не закрывает)?

Если уже на то пошло (“гашение” процесса копирование), то почему бы просто не указать скрипту закрывать самого себя?

Код:

ProcessClose(@AutoItPID)
:)

11943499 24-07-2009 00:02 1176068

Цитата:

Цитата Creat0R
Что-то тут нелогично, как повторный запуск скрипта влияет на процесс первого скрипта (если он конечно его сам и не закрывает)? »

Я использую функцию закрытия всех пидов с имемем скрипта, так что закрываются все близнецы.
Цитата:

Цитата Creat0R
Если уже на то пошло (“гашение” процесса копирование), то почему бы просто не указать скрипту закрывать самого себя? »

Это еще круче, не знал про такую возможность.
Одно НО, все эти функции один фиг не вызываются Hotkey в процессе копирования, который видимо занимает все активное процессорное время и не пускает в память никого. (Я про копирование NTFS). Пока решаю это просто ручным повторным открытием скрипта.
Все же есть особенности в копировании системным способом и программным. Даже Total Comander не отменяет такого копирования.

Creat0R 24-07-2009 01:04 1176104

Цитата:

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

HotKeySet не обрабатывается до завершения callback-функции при копировании любого файла.

Цитата:

Цитата 11943499
Пока решаю это просто ручным повторным открытием скрипта. »

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

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

Creat0R 24-07-2009 01:23 1176116

А что мешает использовать _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


11943499 24-07-2009 13:04 1176466

Цитата:

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

Согласен, мне этот способ тоже больше нравится, видимо он обрабатывает нажатия на более глубинном уровне.

11943499 24-07-2009 16:51 1176680

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

Creat0R 24-07-2009 17:17 1176706

Цитата:

Цитата 11943499
А темка-то живет »

Темка может и живёт, а вот вопросики в ней уже пошли не в темку :)

Цитата:

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

А почему бы просто не убрать атрибуты у файла (FileSetAttrib())?

11943499 24-07-2009 18:40 1176801

Цитата:

Цитата Creat0R
А почему бы просто не убрать атрибуты у файла (FileSetAttrib())? »

Не допер до этого, чувствуется ход мысли истинного прграммера, спасибо! :ok:

crimes 06-04-2014 17:59 2333908

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

Copy With Progress Example.au3
Copy_With_Progress_Incl.au3

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

Запуск будет через cmd\bat.
Код:

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

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

Iska 06-04-2014 18:11 2333917

Цитата:

Цитата crimes
Взял … Обеденил … теперь нужно сделать так: »

Где Ваш «обеденённый» код?

crimes 06-04-2014 18:40 2333936

Вложений: 1
Извеняюсь.

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

Iska 06-04-2014 20:46 2334003

Цитата:

Цитата crimes
теперь нужно сделать так:
Запуск будет через cmd\bat.
Код:

Copy-With.exe "C:\из" "D:\куда"
»

Делайте: Running Scripts — Command Line Parameters.

Цитата:

Цитата crimes
И ещё при копирование не доступен рабочий стол, »

Не подтверждаю. Доступен.

crimes 06-04-2014 21:11 2334007

Цитата:

Цитата Iska
Не подтверждаю. Доступен. »

Это если напрямую запускать скрипт ".au3",а если через батник,то батник заблокирован,но раб. стол активен.(Но пойдёт и так.)

Спасибо!
Код:

$Title = "Копирование..."

$Source = $CmdLine[1]
$Dest = $CmdLine[2]


И ещё можете помочь в этой теме,последнее сообщение.
http://forum.oszone.net/thread-244893.html

Только желательно готовый вариант.

Iska 06-04-2014 23:56 2334083

Цитата:

Цитата crimes
Это если напрямую запускать скрипт ".au3",а если через батник,то батник заблокирован,но раб. стол активен.(Но пойдёт и так.) »

В переводе на русский — «окно консоли пакетного файла остаётся открытым, пока не будет завершено исполнение скомпилированного скрипта AutoIt». К AutoIt, собственно, отношения не имеет. Решение:
Код:

start /?

crimes 07-04-2014 00:19 2334089

Цитата:

Цитата Iska
В переводе на русский — «окно консоли пакетного файла остаётся открытым »

Сокращённо cmd\bat.

Вообще речи и шла на прямой запуск "тогда рабочий стол блокируеться",в друг буду и напрямик пользоваться.

А через cmd можно и так,но это не важно,главное уже решено,вы мне в другой теме лучше помогите.

http://forum.oszone.net/thread-244893.html

Ещё раз спасибо.


Время: 02:32.

Время: 02:32.
© OSzone.net 2001-