Fortschrittsbalken

  • VBScript

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von p41n.

    Fortschrittsbalken

    Hallo Zusammen,

    Ich stehe vor einem kleinen Problem, welches die Implementierung eines Fortschrittbalkens in die FileCopy Methode des FileSystemObjects betrifft.

    Ich nutze ein VBScript, um eine Datei über das Netzwerk zu kopieren. Wenn die Datei allerdings einige MB umfasst und die Performance des Netzwerkes etwas schlechter ist, kann es unter Umständen mehrere Sekunden/Minuten dauern, bis die Datei kopiert ist. In dieser Zeit tut sich auf dem Bildschirm jedoch nichts und der Anwender bleibt dem Fortschritt des Kopiervorgangs gegenüber im Unklaren.

    Ich würde nun gerne eine Möglichkeit nutzen, welche den Anwender über den aktuellen Status des Kopierens informiert. Im Netz konnte ich nichts finden. Für Javascript und CSS und VB fand ich genügend Beispiele. Nur für VBScript nicht.. Sowas muss es doch auch für VBS geben, oder etwa nicht?

    Von euch kann mir bestimmt jemand helfen, oder? ;)


    Viele Grüße
    p41n


    EDIT:
    Ich habe doch noch ein Beispiel gefunden. Allerdings scheitere ich an dem Versuch es mit dem FilesystemObject und der CopyFile Methode zu verknüpfen. So, dass der aktuelle Fortschritt des Kopierens angezeigt wird. Es würde mir auch schon reichen, wenn in einer MsgBox von 0% bis 100% gezählt wird. Wichtig ist, dass man über den aktuellen Status informiert ist.

    Und hier nun der Code, den ich fand:

    Visual Basic-Quellcode

    1. Class ProgressBar
    2. Private m_PercentComplete
    3. Private m_CurrentStep
    4. Private m_ProgressBar
    5. Private m_Title
    6. Private m_Text
    7. Private m_StatusBarText
    8. 'Initialize defaults
    9. Private Sub ProgessBar_Initialize
    10. m_PercentComplete = 0
    11. m_CurrentStep = 0
    12. m_Title = "Progress"
    13. m_Text = ""
    14. End Sub
    15. Public Function SetTitle(pTitle)
    16. m_Title = pTitle
    17. End Function
    18. Public Function SetText(pText)
    19. m_Text = pText
    20. End Function
    21. Public Function Update(percentComplete)
    22. m_PercentComplete = percentComplete
    23. UpdateProgressBar()
    24. End Function
    25. Public Function Show()
    26. Set m_ProgressBar = CreateObject("InternetExplorer.Application")
    27. 'in code, the colon acts as a line feed
    28. m_ProgressBar.navigate2 "about:blank" : m_ProgressBar.width = 315 : m_ProgressBar.height = 40 : m_ProgressBar.toolbar = false : m_ProgressBar.menubar = false : m_ProgressBar.statusbar = false : m_ProgressBar.visible = True
    29. m_ProgressBar.document.write "<body Scroll=no style='margin:0px;padding:0px;'><div style='text-align:center;'><span name='pc' id='pc'>0</span></div>"
    30. m_ProgressBar.document.write "<div id='statusbar' name='statusbar' style='border:1px solid blue;line-height:10px;height:10px;color:blue;'></div>"
    31. m_ProgressBar.document.write "<div style='text-align:center'><span id='text' name='text'></span></div>"
    32. End Function
    33. Public Function Close()
    34. m_ProgressBar.quit
    35. End Function
    36. Private Function UpdateProgressBar()
    37. If m_PercentComplete = 0 Then
    38. m_StatusBarText = ""
    39. End If
    40. For n = m_CurrentStep to m_PercentComplete - 1
    41. m_StatusBarText = m_StatusBarText & "|"
    42. m_ProgressBar.Document.GetElementById("statusbar").InnerHtml = m_StatusBarText
    43. m_ProgressBar.Document.title = n & "% Complete : " & m_Title
    44. m_ProgressBar.Document.GetElementById("pc").InnerHtml = n & "% Complete : " & m_Title
    45. wscript.sleep 10
    46. Next
    47. m_ProgressBar.Document.GetElementById("statusbar").InnerHtml = m_StatusBarText
    48. m_ProgressBar.Document.title = m_PercentComplete & "% Complete : " & m_Title
    49. m_ProgressBar.Document.GetElementById("pc").InnerHtml = m_PercentComplete & "% Complete : " & m_Title
    50. m_ProgressBar.Document.GetElementById("text").InnerHtml = m_Text
    51. m_CurrentStep = m_PercentComplete
    52. End Function
    53. End Class
    54. 'Declare progressbar and percentage complete
    55. Dim pb
    56. Dim percentComplete
    57. 'Setup the initial progress bar
    58. Set pb = New ProgressBar
    59. percentComplete = 0
    60. pb.SetTitle("Step 1 of 5")
    61. pb.SetText("Copying bin/Debug Folder")
    62. pb.Show()
    63. 'Loop to update the percent complete of the progress bar
    64. 'Just add the pb.Update in your code to update the bar
    65. 'Text can be updated as well by pb.SetText
    66. Do While percentComplete <= 100
    67. wscript.sleep 500
    68. pb.Update(percentComplete)
    69. percentComplete = percentComplete + 10
    70. Loop
    71. wscript.sleep 3000
    72. 'This shows how you can use the code for multiple steps
    73. 'In a future iteration I will add a second bar to measure overall progress
    74. percentComplete = 0
    75. pb.SetTitle("Step 2 of 5")
    76. pb.SetText("Copying bin/Release Folder")
    77. pb.Update(percentComplete)
    78. Do While percentComplete <= 100
    79. wscript.sleep 500
    80. pb.Update(percentComplete)
    81. percentComplete = percentComplete + 10
    82. Loop
    83. pb.Close()
    84. wscript.quit

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „p41n“ ()

    Hi petaod,

    Danke für den Tipp.. Habe mich auch sogleich daran gemacht und nach den entsprechenden Begriffen gesucht. Allerdings waren die Ergebnisse ernüchternd. Kann es sein, dass die von Dir genannten Methoden nur für Visual BAsic sind? Unter VBScript scheinen die nicht zu funktionieren. Oder ich verstehe es nur einfach nicht.

    Hättest Du vielleicht ein Beispiel, um mir das ganze mal genau zu erläutern?


    Grüße
    p41n
    Ich fürchte du hast recht.
    Mit VBS scheint das wohl nicht zu funktionieren :(

    Dann fällt mir auch keine elegante Lösung ein.

    Hier hat mal jemand einen sehr rudimentären ProgressBar in VBS gebastelt.
    Aber so richtig sexy ist das Anzeigeverfahren mittels WshShell.Popup nicht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    In etwa so:

    Visual Basic-Quellcode

    1. Const FOF_CREATEPROGRESSDLG = &H0&
    2. dim QuellDatei, ZielOrdner
    3. QuellDatei="J:\Downloads\Windows8-ConsumerPreview-64bit-German.iso"
    4. ZielOrdner= "g:\temp"
    5. Set objShell = CreateObject("Shell.Application")
    6. Set objFolder = objShell.NameSpace(ZielOrdner)
    7. objFolder.CopyHere Quelldatei, FOF_CREATEPROGRESSDLG
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    peterfido schrieb:

    In etwa so:

    Visual Basic-Quellcode

    1. Const FOF_CREATEPROGRESSDLG = &H0&
    2. dim QuellDatei, ZielOrdner
    3. QuellDatei="J:\Downloads\Windows8-ConsumerPreview-64bit-German.iso"
    4. ZielOrdner= "g:\temp"
    5. Set objShell = CreateObject("Shell.Application")
    6. Set objFolder = objShell.NameSpace(ZielOrdner)
    7. objFolder.CopyHere Quelldatei, FOF_CREATEPROGRESSDLG

    Wahnsinn.. Geil! Du bist einfach göttlich, peterfido.. :thumbsup:

    Genau das war das, was ich nun schon seit mehreren Wochen suche.
    Richtig genial. Vor allen Dingen.. So verdammt einfach!

    Manchmal sieht man den Wald vor lauter Bäumen nicht und denkt zu kompliziert.

    Suuuper.. Ich kann mich einfach nur immer wieder bedanken bei Dir. *freu* :thumbup:

    Ich würde den Hilfreich-Button sogar 10x klicken, wenn es möglich wäre. :D

    Also nochmal Danke Danke..
    Du bist absofort mein persönlicher Held.. *peterfidoanbet* :D


    Grüße
    p41n


    Edit:
    Man muss nur wissen, wonach man zu suchen hat und schon wird man direkt fündig.
    Für nähere Information, sei jedem der folgende MS-Artikel ans Herz gelegt:
    technet.microsoft.com/en-us/library/ee176633

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „p41n“ ()