Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


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

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


Многие (и наверное я сам) тут спрашивали, как копировать большой файл, и при этом получать данные прогресса...
Так вот, используя быстро набирающую популярность на оф. форуме библиотеку DllCallBack.au3, можно этого добиться очень просто!!!:

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

_FileCopyEx("C:\BigFile.avi", @ScriptDir & "\BigFile.avi")

Func _FileCopyEx($Source, $Dest)
    If Not FileExists($Source) Then Return SetError(1)
    ProgressOn("_FileCopyEx() Demo", "Копирование, ждите плиз...")
    $pCopyProgressRoutine = _DllCallBack("_CopyProgressRoutine", "uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr")
    DllCall("kernel32.dll", "int", "CopyFileExA", _
        "str", $Source, _
        "str", $Dest, _
        "ptr", $pCopyProgressRoutine, _
        "ptr", 0, _
        "int", 0, _
        "int", 0)
    _DllCallBack_Free($pCopyProgressRoutine)
    Sleep(1000)
    ProgressOff()
EndFunc

Func _CopyProgressRoutine($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    $Precent = $TotalBytesTransferred/$TotalFileSize*100
    ProgressSet($Precent, "Проценты: " & Round($Precent, 1) & " %")
    Return 0
EndFunc   ;==>_CopyProgressRoutine
Вот и всё!

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

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

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:19, 28-09-2007 | #509