Страница: 1 |
Господа! Вот нашел в Инете одну шикарнейшую функцию для скачивания файла Взгляните на код... *********************************************************************** Private Declare Function URLDownloadToFile Lib "urlmon" Alias _ Private Function DownloadFile(FromPathName As String, ToPathName _ Private Sub Command1_Click() *********************************************************************** Преимущества: НО!!!!!!! В связи с этим у меня возник вопрос! - можно-ли эту функцию реинициализировать? произвести сброс её параметров API-монстры ОТЗОВИТЕСЬ!!! Заранее всем спасибо. EROS. eros@sandy.ru
А если использовать функции GetLastError и SetLastError для перехвата ошибок? Типа как в этом примере: Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100 В ходе экспериментов выяснилась одна особенность этой функции. Ты наверняка заметил такую вещь, что при запуске IE (браузера) иногда появляется диалог (не помню названия,кажется "Работа в Автономном режиме") с двумя кнопками "Подключиться" и "Автономно".Так вот если нажать "Автономно", то функция вообще вообще не вызывает окна "Установка удаленного соеденения", и наоборот.. Если нажать "подключиться", то она(функция) самостоятельно пытается установить связь.Так вот, для решения моей проблемы необходимо перед вызовом этой функции каким-то образом программно "нажать" кнопку "подключиться" и тогда все будет работать... Веротно, где-то хранится информация о том, в каком режиме работает компьютер, в автономном или нет.(может в реестре, может сообщение системы,может какой-то флаг, не знаю) Вообщем надо заставить машину думать, что она НЕ в Автономном режиме... А вот как это сделать,и где храниться эта информация... Вот в чем вопрос.... Дык RegMonitor'ом проследи че он с регистри делает кода жмешь кнопарь. Могешь и файлы проверить что он изменяет, хотя я думаю эта штука лежит в регистри. !-=Gork=-! У меня с RegMonitor'ом ничего не вышло... Ума не хватает... Может поможешь... где этот флаг в регистри находится... Заранее спасибо. Этот Ослик у меня при ентом нажатии ломится че-то на 2 с пловониной тысяци ключей.. там я нихрена не нашел.. Если есть эта штука в регистри, то тогда можно сделать слепок регистри, а потом сравнить после нажатия Offline. Для этого специальная прога была.. поищу ща.. Страница: 1 |
Вопрос: API - монстры ОТЗОВИТЕСЬ!!!
Добавлено: 10.12.02 21:54
Автор вопроса: EROS
с массой преимуществ и ОДНИМ недостатком
Option Explicit
"URLDownloadToFileA" (ByVal pCaller _
As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved _
As Long, ByVal lpfnCB As Long) As Long
As String) As Long
Screen.MousePointer = vbHourglass
DownloadFile = URLDownloadToFile(0, FromPathName, ToPathName, 0, 0)
Screen.MousePointer = vbDefault
End Function
Dim Result As Long
Result = DownloadFile("http://lidergroup.fromru.com/blank/blankdbver.txt", "C:\temp.txt")
Debug.Print Result
End Sub
- не требует дополнительных компонентов
- чрезвычайно проста в использовании и очень мала
- ждет окончания загрузки
- дает возможность самостоятельно указывать где и под каким именем
сохранять скачанный файл
- при отсутствии связи САМОСТОЯТЕЛЬНО вызывает окно "Установка удалённого соеденения"
Беда заключается в том, что это окно вызывается только 1 раз-первый!!!
А если user по каким-то причинам отменил установку связи, то потом хоть
занажимайся на кнопку - функция возвращает один и тот же код -2146697211
В случае удачного скачивания возвращает 0.
Чтобы функция снова вызвала окно неоходимо закрывать приложение и запускать
его по новой. Если же программа исполняется в среде разработки, то необходимо
перегружать сам Бэйсик.
чтобы она "думала", что её запускают в первый раз!
- что за код она мне возвращает, и как узнать остальные коды и что они означают ?...
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Zeus
ICQ: 161801353
Вопросов: 63
Ответов: 220
Web-сайт:
Профиль | | #1
Добавлено: 10.12.02 23:27
Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Const LANG_NEUTRAL = &H0
Const SUBLANG_DEFAULT = &H1
Const ERROR_BAD_USERNAME = 2202&
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Declare Sub SetLastError Lib "kernel32" (ByVal dwErrCode As Long)
Private Declare Function FormatMessage Lib "kernel32" Alias _
"FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, _
ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _
ByVal lpBuffer As String, ByVal nSize As Long, _
Arguments As Long) As Long
Private Sub Form_Load()
Dim Buffer As String
' Создаёт в буфере строку
Buffer = Space(200)
' Устанавливает номер ошибки
SetLastError ERROR_BAD_USERNAME
' Изменяет строку сообщения
FormatMessage FORMAT_MESSAGE_FROM_SYSTEM, _
ByVal 0&, GetLastError, LANG_NEUTRAL, _
Buffer, 200, ByVal 0&
' Выдаёт сообщение
MsgBox Buffer
End Sub
Номер ответа: 2
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #2
Добавлено: 11.12.02 22:27
Странно, а у меня диалог "Установка связи" вообще не выдаёт.
Попробуй такой код
call shell("rundll rnaui.dll,RnaDial ИмяСоединения",1)
Правда тебе сначала нужно узнать имя соединения.
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 12.12.02 14:51
Номер ответа: 4
Автор ответа:
-=Gork=-
ICQ: 9993198
Вопросов: 8
Ответов: 229
Web-сайт:
Профиль | | #4
Добавлено: 12.12.02 15:53
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 12.12.02 19:56
Номер ответа: 6
Автор ответа:
Zeus
ICQ: 161801353
Вопросов: 63
Ответов: 220
Web-сайт:
Профиль | | #6
Добавлено: 12.12.02 20:11
Номер ответа: 7
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 13.12.02 01:54
Дело вот в чем при скачивании по протоколу HTTP, все нормально...(сохраняет где я укажу), я наугад подставил в неё ftp-адрес - РАБОТАЕТ!!!. Но вызывает диалог "Сохранение файла", хотя в коде указано куда и под каким именем сохранить, а мне этот диалог не нужен... КАк от него избавиться?
Номер ответа: 8
Автор ответа:
-=Gork=-
ICQ: 9993198
Вопросов: 8
Ответов: 229
Web-сайт:
Профиль | | #8
Добавлено: 13.12.02 14:43