Страница 2 из 2

Добавлено: Ср дек 10, 2008 23:14
kefirux
Volniy
кстати спасибо за кусок кода копирования, это толчок к созданию
этого самого окошка) всё представляю как сделать кроме отображения скорости передачи

Добавлено: Ср дек 10, 2008 23:20
kefirux
о, чёто я туплю. надож просто посчитать сколько он скопировал за одну секунду. так что это тоже можно сказать сделанно. хотя это уже не под формат форума :)

Добавлено: Чт дек 11, 2008 23:46
kefirux
ну вот сделал версию без участия Тотала (простите старого еретика)
большая проблема в том что ну вот не нашёл я в ВБ не то что прогресс бара, но даже модального окна. сделал прогресс бар с подгрузкой IE
Изображение
тут я вспомнил о такой вещи как многопоточность ) потому что надо както чтобы один поток копировал а другой отображал ход действий. но я это решил тем что запускается второй ВБскрипт из первого

основная прога:

Код: Выделить всё

'Option Explicit
Dim WshShell
Dim RetCode
Dim fso
Dim StartFolder
Dim str
Dim M1
Dim FItem
Dim Answer
Dim curFolder, curFolder2

Set WshShell = CreateObject("WScript.Shell")

str=InputBox("Введите имя папки","Имя Папки",Date,vbOK)
Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FolderExists("X:\- ПАКИ ФОТОСЕТОВ\" & str) Then
fso.CreateFolder("X:\- ПАКИ ФОТОСЕТОВ\" & str)
End If


StartFolder = "F:/Dcim"
If fso.FolderExists(StartFolder) = False Then
MsgBox "какаято ошибка!", vbCritical
WScript.Quit
End If


Set curFolder = fso.GetFolder(StartFolder)

RetCode = WshShell.Run("""G:\KefiR\Pack\VB\ProgressBar.vbs"" " & str , 1, False)
For Each FItem In curFolder.SubFolders
   fso.CopyFile FItem.Path & "\*.*", "X:\- ПАКИ ФОТОСЕТОВ\" & str
Next

WScript.Sleep 1000
WScript.Quit 
второй поток (ProgressBar.vbs)

Код: Выделить всё

Option Explicit
Dim fso
Dim StartFolder
Dim curFolder, curFolder2
Dim RetCode, objArgs
Dim gdocProgressBar 'Required global declaration for status bar document
Dim goieProgressBar 'Required global declaration for Internet Explorer object
Set gdocProgressBar = Nothing
Set goieProgressBar = Nothing


Set objArgs = WScript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")


StartFolder = objArgs(0)
MsgBox StartFolder
StartFolder = "X:\- ПАКИ ФОТОСЕТОВ\" & StartFolder

Set curFolder2 = fso.GetFolder("F:\Dcim")
Set curFolder = fso.GetFolder(StartFolder)

Do
    Set curFolder = fso.GetFolder(StartFolder)
    ProgressBar curFolder.Size/(curFolder2.Size/100)
    WScript.Sleep 100
    
Loop While curFolder.Size <> curFolder2.Size

answer = msgbox(StartFolder & " " & curFolder2.Size & " => " & curFolder.Size & vbNewLine & "=========================" & vbNewLine & "Запустить Lightroom?", vbOkCancel)
if answer=vbOk then RetCode = WshShell.Run("""E:\Program Files\Adobe\Adobe Photoshop Lightroom 2\lightroom.exe"" """ & StartFolder & """", 0, False)
ProgressBar -1

WScript.Quit 




Sub ProgressBar(intPercent)
'Requires global declaration for gdocProgressBar and goieProgressBar
'Creates an html page showing a status bar.
'intPercent must be between 0 and 100. 
'If intPercent is out of range, the status bar is shut down. 

	'Create the status bar window
	If gdocProgressBar Is Nothing Then
		If ((Cint(intPercent) >= 0) And (Cint(intPercent) <= 100)) Then
			Set goieProgressBar = CreateObject("InternetExplorer.Application")
			goieProgressBar.Offline = True
			goieProgressBar.AddressBar = False
			goieProgressBar.Height = 100
			goieProgressBar.Width = 250
			goieProgressBar.MenuBar = False
			goieProgressBar.StatusBar = False
			goieProgressBar.Silent = True
			goieProgressBar.ToolBar = False
			goieProgressBar.Navigate "about:blank"
			Do While goieProgressBar.Busy
				WScript.Sleep 100
			Loop
			'On Error Resume Next
			Set gdocProgressBar = Nothing
			Do Until Not gdocProgressBar Is Nothing
				WScript.Sleep 100
				Set gdocProgressBar = goieProgressBar.Document
			Loop
			gdocProgressBar.Open
			gdocProgressBar.Write "<html><head><title>"
			gdocProgressBar.Write "Copy"
			gdocProgressBar.Write "</title></head><body><center>"
			gdocProgressBar.Write "<TABLE width=200 border=3 frame=box><tr><td>"
			gdocProgressBar.Write "<TABLE id=status width=0 border=0 cellpadding=0 cellspacing=0 bgcolor=#FFFFFF>"
			gdocProgressBar.Write "<tr><td>&nbsp</td></tr></table></td></tr></table></center></body></html>"
			gdocProgressBar.Close
			goieProgressBar.Visible = True			
		Else
			Exit Sub
		End If
	End If

	'Close the status bar window
	If Not gdocProgressBar Is Nothing Then
		If ((Cint(intPercent) < 0) Or (Cint(intPercent) > 100)) Then
			goieProgressBar.Visible = False
			Set gdocProgressBar = Nothing
			goieProgressBar.Quit
			Set goieProgressBar = Nothing
			Exit Sub
		End If
	End If

	'Update the status bar window
	If Cint(intPercent) = 0 Then
		gdocProgressBar.all.status.width = "1%"
		gdocProgressBar.all.status.bgcolor = "#FFFFFF"
	Else
		gdocProgressBar.all.status.width = Cstr(Cint(intPercent)) & "%"
		gdocProgressBar.all.status.bgcolor = "#339955"
	End If

End Sub	
класс прогресс бара честно украл на просторах интернета

Добавлено: Пт дек 12, 2008 16:37
kefirux
я полазил везде и понял что это не выполняемо )
поэтому я написал свою версию на полноценном языке:

Изображение

причём если нужно кому, могу код кинуть и сам exe,
так как она универсальная, я её запускаю из ВБскрипта, а во входящих параметрах указывается два пути "откуда" и "куда"
но оно не копирует! оно просто следит за размерами этих папок и высчитывает прогресс

Добавлено: Сб сен 18, 2010 01:27
taravasya
kefirux
Мне пригодился бы такой код... :roll: