Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: UrlDownloadToFile Добавлено: 22.08.06 14:24  

Автор вопроса:  i0ngunn3r
Как сделать, чтобы во время закачки файла вся программа не зависала?
Использую функцию так:

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Private Sub Command1_Click()
URLDownloadToFile 0, "http://somesite/someexe.exe", "c:\someexe.exe", 0, 0
End Sub

У меня что-то неверно?
Можно сделать так, чтобы вся прога не зависала? А еще лучше - если можно как-либо указать процентность закаченного файла. :)
Если можно, то как?)

Ответить

  Ответы Всего ответов: 31  

Номер ответа: 1
Автор ответа:
 i0ngunn3r



Вопросов: 11
Ответов: 30
 Профиль | | #1 Добавлено: 22.08.06 14:38
Извините, погуглил, нашел решение.

Ответить

Номер ответа: 2
Автор ответа:
 Softer



ICQ: 203660381  

Вопросов: 29
Ответов: 205
 Web-сайт: hware.org.ua
 Профиль | | #2
Добавлено: 22.08.06 15:17
И какое если не секрет?

Ответить

Номер ответа: 3
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #3
Добавлено: 22.08.06 15:25
И какое если не секрет?

Погугли, найдешь ;)

Ответить

Номер ответа: 4
Автор ответа:
 Softer



ICQ: 203660381  

Вопросов: 29
Ответов: 205
 Web-сайт: hware.org.ua
 Профиль | | #4
Добавлено: 22.08.06 15:30
Ок... На что гуглить?

Ответить

Номер ответа: 5
Автор ответа:
 i0ngunn3r



Вопросов: 11
Ответов: 30
 Профиль | | #5 Добавлено: 22.08.06 15:41
Можно даже не гуглить, а яндексить.
http://pda.yandex.ru/search?query=%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B0%D0%B5%D1%82+urldownloadtofile

Вторая страница с похожей темой. Там же - как минимум два способа. Я через Winsock использую, правда теперь появилась куча проблем..

Ответить

Номер ответа: 6
Автор ответа:
 Softer



ICQ: 203660381  

Вопросов: 29
Ответов: 205
 Web-сайт: hware.org.ua
 Профиль | | #6
Добавлено: 22.08.06 15:42
Пасиб!

Ответить

Номер ответа: 7
Автор ответа:
 i0ngunn3r



Вопросов: 11
Ответов: 30
 Профиль | | #7 Добавлено: 22.08.06 15:48
Да не за что.. :)
Чтоб не создавать новую тему.. вопрос - как применить IXMLHttpRequest?
Это, как я понял, ведь не API-функция? Если нет, то как его использовать?

Ответить

Номер ответа: 8
Автор ответа:
 Softer



ICQ: 203660381  

Вопросов: 29
Ответов: 205
 Web-сайт: hware.org.ua
 Профиль | | #8
Добавлено: 22.08.06 15:53
Если чесно, то не знаю... что-то я по твоему линку не понял... Вот ето что ли? http://www.vbnet.ru/forum/show.aspx?id=40868

Ответить

Номер ответа: 9
Автор ответа:
 i0ngunn3r



Вопросов: 11
Ответов: 30
 Профиль | | #9 Добавлено: 22.08.06 16:03
Нет, не vbnet.

эта функция предназначена для скачивания небольших файлов. например, скачать баннер или маленькую картинку с какогото сайта. лучше качай через винсок. правда потрудиться придётся, но зато всё нормально будет: и скорость скачивания, и зависать не будет. ну а если тебе приспичило качать через апи ф-цию, то в проге помимо главного экзешника создай что-то типа download.exe. в этой проге обрабатывай коандную строку (Command). Для того чтобы потом скачать файл, в своей главной программе вызови этот Download.exe с необходимыми параметрами командной строки. Например, это у тебя будет в коде проги Download.exe :

Private Sub Form_Load()
dim URL as string
URL = Command
DownloadFile URL, "куда скачать"
End
End Sub

А в главной проге будет так:

Private Sub cmdDownload_Click()
Shell App.path & "\download.exe " & txtURL.text , vbHide
End Sub

Тогда зависнет прога Download.exe , а главное окно твоей главной проги будет нормально. Для того, чтобы юзер понял, что файл скачался, в коде download.exe до начала скачивания создай какой нибудь файл, а после скачивания удали. А главная прога будет проверять существует ли файл. Если не существует, значит файл скачался. Можешь даже реестр использовать, и оставить какую нибудь метку. Например, файл скачался успешно или нет. Можешь сделать кнопку "Отмена". При клоике на неё вызывай TerminateProcess или какую нибудь другую ф-цию чтобы убить процесс Download.exe (Можно и SendMessage использовать, ведь тебе будет известно имя окна).
В принципе, можно сделать и скорость скачивания, но проблема в том, как узнать размер файла, который ты скачиваешь.

вот, попробуй этот пример:
www.v-adix.narod.ru/files2/multidownloader.zip
не помню как он качает, главное что качает. может поможет...


Еще вариант:

Option Explicit

Private Sub Form_Click()
    Dim sAddress As String
    sAddress = InputBox("URL";)
    With Winsock1
        'Для Proxy
        While .State <> sckClosed
            .Close
            Wend
        
        .Connect "192.168.1.1", 3128
        Do
            DoEvents
            Loop While .State <> sckConnected
        .SendData "GET " & sAddress
        .SendData vbCrLf
        .SendData "User-Agent: Mozilla/2.0 (Win95;I)"
        End With
    End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim F As Long, sData As String
F = FreeFile
Winsock1.GetData sData
Debug.Print sData
If Len(sData) = 0 Then Debug.Print ";Donload....Ok"

End Sub

sAddress должен быть равен "/файл".
Т.е. если хост в винсоке ты задал как "yandex.ru", а тебе надо скачать файл "yandex.ru/logo.gif", то ты указываешь winsock1.remotehost="yandex.ru" и sAddress="/logo.gif"

Ответить

Номер ответа: 10
Автор ответа:
 i0ngunn3r



Вопросов: 11
Ответов: 30
 Профиль | | #10 Добавлено: 22.08.06 16:05
ЗЫ: Вторая страница имел в виду не яндексовская, а вторая ссылка (на первой странице :))

Ответить

Номер ответа: 11
Автор ответа:
 Softer



ICQ: 203660381  

Вопросов: 29
Ответов: 205
 Web-сайт: hware.org.ua
 Профиль | | #11
Добавлено: 22.08.06 16:07
А! Понял! Сенкс!

Ответить

Номер ответа: 12
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #12 Добавлено: 22.08.06 16:18
URLOpenPullStream не проще? :)
По поводу IXMLHttpRequest. Эту функцию экспортирует библиотека msxml*.dll. Как ActiveX вариант - юзай XMLHTTP из той же библы.

Ответить

Номер ответа: 13
Автор ответа:
 i0ngunn3r



Вопросов: 11
Ответов: 30
 Профиль | | #13 Добавлено: 22.08.06 18:20
Хммм.. Спасибо)

Ответить

Номер ответа: 14
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #14
Добавлено: 22.08.06 19:03
IXMLHttpRequest - это не функция, а интерфейс, наследованный от IDispatch

Ответить

Номер ответа: 15
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #15 Добавлено: 23.08.06 03:41
Private Sub cmdDownload_Click()
   Shell App.path & "\download.exe " & txtURL.text , vbHide
End Sub

ужОс какой-то...

Зачем извращаться, если достаточно сделать все по правильному - как уже говорили, через Winsock

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам