| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 
 | Imports System.Runtime.InteropServices
Imports System.ComponentModel
 
Public Class Form1
 
 
    <DllImport("kernel32.dll", SetLastError:=True, EntryPoint:="MoveFileWithProgressW", CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Private Shared Function MoveFileWithProgress( _
        ByVal lpExistingFileName As String, _
        ByVal lpNewFileName As String, _
        ByVal lpProgressRoutine As CopyProgressRoutine, _
        ByVal lpData As IntPtr, _
        ByVal dwFlags As MoveFileFlags) As Boolean
    End Function
 
 
    Private Delegate Function CopyProgressRoutine( _
        ByVal TotalFileSize As Int64, _
        ByVal TotalBytesTransferred As Int64, _
        ByVal StreamSize As Int64, _
        ByVal StreamBytesTransferred As Int64, _
        ByVal dwStreamNumber As UInt32, _
        ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, _
        ByVal hDestinationFile As IntPtr, _
        ByVal lpData As IntPtr) As CopyProgressResult
 
    Private Enum CopyProgressResult As UInt32
        PROGRESS_CONTINUE = 0
        PROGRESS_CANCEL = 1
        PROGRESS_STOP = 2
        PROGRESS_QUIET = 3
    End Enum
 
    Private Enum CopyProgressCallbackReason As UInt32
        CALLBACK_CHUNK_FINISHED = 0
        CALLBACK_STREAM_SWITCH = 1
    End Enum
 
    <Flags()>
    Private Enum MoveFileFlags As UInt32
        MOVE_FILE_REPLACE_EXISTSING = &H1
        MOVE_FILE_COPY_ALLOWED = &H2
        MOVE_FILE_DELAY_UNTIL_REBOOT = &H4
        MOVE_FILE_WRITE_THROUGH = &H8
        MOVE_FILE_CREATE_HARDLINK = &H10
        MOVE_FILE_FAIL_IF_NOT_TRACKABLE = &H20
    End Enum
 
    Private Function OnCopyProgress( _
    ByVal TotalFileSize As Int64, _
    ByVal TotalBytesTransferred As Int64, _
    ByVal StreamSize As Int64, _
    ByVal StreamBytesTransferred As Int64, _
    ByVal dwStreamNumber As UInt32, _
    ByVal dwCallbackReason As CopyProgressCallbackReason, _
    ByVal hSourceFile As IntPtr, _
    ByVal hDestinationFile As IntPtr, _
    ByVal lpData As IntPtr) As CopyProgressResult
        Dim percent As Double = TotalBytesTransferred / TotalFileSize
progressbar1.value = percent
        Return CopyProgressResult.PROGRESS_CONTINUE
 
    End Function
 
 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim result As Boolean = MoveFileWithProgress("D:\images.img", "C:\images.amg", AddressOf OnCopyProgress, IntPtr.Zero, MoveFileFlags.MOVE_FILE_WRITE_THROUGH Or MoveFileFlags.MOVE_FILE_COPY_ALLOWED)
 
    End Sub
End Class | 
Partager