怎么实现带进度条的文件复制

如何实现带进度条的文件复制
我现在用的是run copy 命令,运行时显示的是MSDOS窗口,如何实现WIN系统复制粘贴的进度条样式?
------解决思路----------------------
给个演示
oPB = ProgressBar("正在复制文件"+0h0D+"请稍候......")
IF !ISNULL(oPB)
    ** 相关函数 FOPEN()、FCREATE()、FSEEK()、FEOF()、FREAD()、FWRITE()、FCLOSE()
    文件大小 = 65536
    数据块大小 = 1024
    * 实际用 DO WHILE !FEOF()
    FOR i = 数据块大小 TO 文件大小 STEP 数据块大小
        oPB.nProgress = i / 文件大小
        INKEY(0.1, "H")
    ENDFOR
    oPB.Release
ENDIF
RETURN

FUNCTION ProgressBar(cMsg)
    PRIVATE oForm
    oForm = CREATEOBJECT("ProgressBarForm", cMsg)
    oForm.Show(2)
    RETURN oForm
ENDFUNC

DEFINE CLASS ProgressBarForm AS Form
    Desktop = .T.
    WindowType = 1 
    AutoCenter = .T.
    TitleBar = 0
    BorderStyle = 1
    
    nProgress = 0

    ADD OBJECT Label1 AS Label WITH Width=SYSMETRIC(1),AutoSize=.T.,WordWrap=.T.,FontSize=24
    ADD OBJECT Shape1 AS Shape WITH Top=this.Height-35,Height=25,Anchor=4
    ADD OBJECT Shape2 AS Shape WITH Top=this.Height-35,Height=25,Anchor=4,;
        Width=0,BackColor=RGB(50,150,250),BorderStyle=0

    PROCEDURE Init
        LPARAMETERS cMsg
        this.Label1.Caption = cMsg
    ENDPROC

    PROCEDURE Activate
        IF !EMPTY(this.Tag)
            RETURN
        ENDIF
        this.Tag = "1"
        *INKEY(0.05)
        this.AutoCenter = .T.
        this.Label1.Visible = .T.
        this.Height = this.Label1.Height + 65
        this.Width = this.Label1.Width + 40
        this.Label1.Top = INT((this.ViewPortHeight - this.Label1.Height - 45)/2)
        this.Label1.Left = INT((this.ViewPortWidth - this.Label1.Width)/2)
        this.Shape1.Left = this.Label1.Left
        this.Shape1.Width = this.Label1.Width
        this.Shape2.Left = this.Label1.Left
    ENDPROC
    
    PROCEDURE nProgress_Assign
        LPARAMETERS vNewVal
        IF BETWEEN(vNewVal, 0, 1)
            this.Shape2.Width = this.Shape1.Width * vNewVal
        ENDIF
    ENDPROC
ENDDEFINE


------解决思路----------------------
请参考:http://bbs.****.net/topics/340001733/