Download — Помогите с URLDownloadToFile в dll


Download — Помогите с URLDownloadToFile в dll

I’m trying to make a program that downloads a dll from my website and then inject it into notepad but I’m not able to download the dll.

I would like that the program downloads the dll but It doesn’t work.

See also questions close to this topic

I have a couple of questions about how initializer_list `s work in C++. First of all, say that we have (std:: omitted for simplicity):

In Visual Studio, I peaked a bit into the class and found only these two constructors:

So my first question is: the line above marked with (*), is there some kind of syntactic sugar behind that allows this syntax (or maybe regular syntax for the compiler, so that he mangles with it and sets up everything properly)?

By the look of the class, everything is constexpr so my conclusion is that it’s all done in compile time, but I couldn’t find any concrete explanations about the question.

Next question is a bit contradictory to the previous conclusion, but since I am not 100% sure about the stuff happening, I’m gonna ask anyway: if I’m not explicitly using new initializer_list (<. >); , can the initializer_list ever use dynamic memory in any way (is there a certain use-case where it does)?

Again, it’s a silly question, but I want to understand exactly what happens with the class, as well as how it mangles with the memory.

Third question is, say that we have a code that looks like this:

In this case, is there any possible way to use the constructor of the Test class other than the way it is used with the t1 and t2 instances? And of course, is this even correct to begin with? cout does print out the correct values, however I want to be sure that there is nothing ill-formed, like for instance the ‘brace init list’ < . >being destroyed (if saying something like this is even possible) before cout uses them?

This is bugging me since I don’t have any understanding about how does the C++ manage the memory when things like these are written.

urldownloadtofile ИЛИ InternetOpenUrl не работает из DLL

Я пытаюсь использовать UrlDownloadToFile ИЛИ InternetOpenUrl, чтобы перейти по какой-либо ссылке в Интернете из файла DLL. Хотя он работает с файлом .exe, но он не работает с файлом DLL, и даже никакой информации об ошибках. Это просто не удалось без какой-либо информации.

Кто-нибудь может мне помочь? Заранее спасибо.

Мой код, как показано ниже:

Это не удалось в:

Это не удалось в:

Обновить:

Если я вставлю строку, такую как «MessageBox» чуть выше, где это не удается, MessageBox будет отображаться успешно.

Если я вставлю строку типа «MessageBox» сразу после того, где произойдет сбой, MessageBox не будет отображаться. И нет никакого кода ошибки, если я попытался отобразить «hUrl» или «aa».

1 ответ

Не делай этого в DllMain . Смотрите точку входа DllMain

Функция точки входа должна выполнять только простые задачи инициализации или завершения. Он не должен вызывать функцию LoadLibrary или LoadLibraryEx (или функцию, которая вызывает эти функции), поскольку это может создавать циклы зависимостей в порядке загрузки DLL. Это может привести к использованию DLL до того, как система выполнит свой код инициализации.

РЕДАКТИРОВАТЬ, так как вы хотите внедрить Dll и запустить код в нем.

Один из способов заставить внедренную Dll начать выполнение кода, не полагаясь на DllMain, заключается в следующем:


Используйте перехват сообщений, ограниченный одной веткой.

Найдите HWND, принадлежащий процессу, который вы хотите внедрить. Для Internet Explorer вы можете перечислить Windows верхнего уровня, используя EnumWindows . Основной IE Windows имеет класс IEframe . Используйте EnumChildWindows, чтобы найти окно класса Internet_Explorer Server . Используйте GetWindowThreadProcessId, чтобы получить связанный TID (идентификатор потока ).

Используйте SetWindowsHookEx для установки ловушки потока. Вы можете выбрать WH_CALLWNDPROC или хук WH_GETMESSAGE . Передайте TID, полученный в 1. Ваша DLL введена и обрабатывает сообщения.

Используйте PostMessage или SendMessage или PostThreadMessage , в зависимости от типа ловушки, который вы выбрали в 2, с зарегистрированным сообщением. Смотрите RegisterWindowMessage

В вашей функции ловушки отфильтруйте зарегистрированное сообщение (получите его значение в DllMain и сохраните его в глобальной переменной), и, когда это сообщение будет получено, вызовите свой пользовательский код.

Предупреждение : эта техника хорошо подходит для недолговечного кода, вы находитесь в функции ловушки. Это, возможно, не место для загрузки из Интернета.

Другой способ — создать поток в DllMain , используя _ beginthreadex.

В цепочке у вас может быть классическая последовательность RegisterClass / CreateWindow / GetMessage / DispatchMessage, и ваш EXE сможет отправлять / отправлять сообщения на ваш Dll.

Предупреждение : в зависимости от того, как вы вводили Dll, вы должны быть очень осторожны с преждевременной выгрузкой Dll. Если поток все еще работает, возможны сбои. Быть чистым и стабильным с этими вещами нелегко. Но, если вы просто играете / экспериментируете, не беспокойтесь и просто загружайте библиотеку (не в DllMain) во второй раз, когда вы владеете библиотекой, она останется здесь навсегда.

Вы можете смешать два метода, а именно: использовать ловушку сообщения потока, чтобы внедрить Dll и запустить поток в функции ловушки.

urldownloadtofile ИЛИ InternetOpenUrl не работает из DLL

November 2020

915 раз

Я пытаюсь использовать UrlDownloadToFile ИЛИ InternetOpenUrl посетить некоторые ссылки в Интернете из файла DLL. В то время как он работает на exe-файл, но он не работает из файла DLL, и даже нет какой-либо информации об ошибке. Он просто не смог без какой-либо информации.

Любой может дать мне какую-либо помощи? Заранее спасибо.

Мой код, как показано ниже:

Он потерпел неудачу в:

Он потерпел неудачу в:

Обновить:

Если я вставить строку «MessageBox» чуть выше, где он выходит из строя, MessageBox будет отображаться успешно.

Если я вставить строку «MessageBox» только после того, когда он выходит из строя, не будет отображаться MessageBox. И нет там нет какой-либо код ошибки возвращается, если я попытался отобразить «швырять» или «AA».

1 ответы

Не делайте этого в DllMain . См DllMain точку входа

Функция точки входа следует выполнять только простые инициализации или завершения задачи. Это не должно вызвать функцию LoadLibrary или LoadLibraryEx (или функцию, которая вызывает эти функции), так как это может создавать циклы зависимостей в порядке DLL нагрузки. Это может привести к DLL используется до того, как система выполнила свой код инициализации.

EDIT, как вы хотите, чтобы впрыснуть Dll и запуска кода в нем.

Один из способов сделать впрыскивается Dll , чтобы начать выполнение кода, не полагаясь на DllMain выглядит следующим образом :


Используйте сообщение крюк, ограничивается одной нитью.

Найти HWND , относящийся к процессу , который требуется вводить. Для Internet Explorer, вы можете перечислить верхний уровень Windows, используя EnumWindows Главного IE для Windows имеет класс IEframe . Используйте EnumChildWindows , чтобы найти окно класса Internet_Explorer Server . Используйте GetWindowThreadProcessId , чтобы получить соответствующий TID (идентификатор потока).

Используйте SetWindowsHookEx , чтобы установить нить крючок. Вы можете выбрать WH_CALLWNDPROC или на WH_GETMESSAGE крючок. Пропустите TID , полученный в 1. Вашей DLL вводятся, и обработка сообщений.

Используйте PostMessage или SendMessage или PostThreadMessage , в зависимости от типа крюка вы выбираете в 2, с зарегистрированным сообщением. См RegisterWindowMessage

В функции крюка, фильтр для зарегистрированного сообщения (получить его значение в вашем DllMain и сохранить его в глобальной переменной) и при получении этого сообщения, вызовите пользовательский код.

Внимание : этот метод хорошо подходит для короткого живого кода, вы находитесь в функции крюка. Это , возможно , не место для загрузки из Интернета.

Другой способ заключается в создании нить DllMain , используя _ beginthreadex

В потоке, вы можете иметь классическую последовательность RegisterClass / CreateWindow / GetMessage / DispatchMessage, и ваш EXE будет иметь возможность отправки / почтовые сообщения в Dll.

Внимание : в зависимости от того, как вы вводили Dll, вы должны быть очень carreful о преждевременных выгрузках вашей Dll. Если нить еще работает, может быть сбой. Будучи чистым и стабильным с тезисами вещами не легко. Но, если вы просто играть / экспериментировать, не беспокоить и просто LoadLibrary (не в DllMain) вы собственную библиотеку во второй раз, он останется здесь навсегда.

Цукерберг рекомендует:  Электроника - macbook для программирования

Вы можете смешивать два метода, а именно: использовать нить сообщение крюк, чтобы впрыснуть Dll и запустить поток в функции крючков.

Download — Помогите с URLDownloadToFile в dll

Downloads bits from the Internet and saves them to a file.

Syntax

Parameters

A pointer to the controlling IUnknown interface of the calling ActiveX component, if the caller is an ActiveX component. If the calling application is not an ActiveX component, this value can be set to NULL. Otherwise, the caller is a COM object that is contained in another component, such as an ActiveX control in the context of an HTML page. This parameter represents the outermost IUnknown of the calling component. The function attempts the download in the context of the ActiveX client framework, and allows the caller container to receive callbacks on the progress of the download.

A pointer to a string value that contains the URL to download. Cannot be set to NULL. If the URL is invalid, INET_E_DOWNLOAD_FAILURE is returned.

A pointer to a string value containing the name or full path of the file to create for the download. If szFileName includes a path, the target directory must already exist.

Reserved. Must be set to 0.

A pointer to the IBindStatusCallback interface of the caller. By using IBindStatusCallback::OnProgress, a caller can receive download status. URLDownloadToFile calls the IBindStatusCallback::OnProgress and IBindStatusCallback::OnDataAvailable methods as data is received. The download operation can be canceled by returning E_ABORT from any callback. This parameter can be set to NULL if status is not required.

Return value

This function can return one of these values.

The download started successfully.

The buffer length is invalid, or there is insufficient memory to complete the operation.


The specified resource or callback interface was invalid.

Remarks

URLDownloadToFile binds to a host that supports IBindHost to perform the download. To do this, it first queries the controlling IUnknown passed as pCaller for IServiceProvider, then calls IServiceProvider::QueryService with SID_SBindHost. If pCaller does not support IServiceProvider, IOleObject or IObjectWithSite is used to query the object’s host container. If no IBindHost interface is supported, or pCaller is NULL, URLDownloadToFile creates its own bind context to intercept download notifications.

URLDownloadToFile returns S_OK even if the file cannot be created and the download is canceled. If the szFileName parameter contains a file path, ensure that the destination directory exists before calling URLDownloadToFile. For best control over the download and its progress, an IBindStatusCallback interface is recommended.

Windows Internet Explorer 8. URLDownloadToFile does not support IBindStatusCallbackEx and cannot be used to download files over 4 gigabytes (GB) in size. Refer instead to IBindStatusCallbackEx::GetBindInfoEx for a code example.

Скачать файл из интернета без использования WinAPI

Часто требуется макросом скачать некий файл из интернета.
Обычно в этом помогает WinAPI-функция URLDownloadToFile, но есть также возможность загрузить файл без её использования:

Чем чревато использование функции URLDownloadToFile — по сути, ничем, кроме как необходимостью прописывать её в 2 вариантах, для обеспечения совместимости с 64-битной Windows

Я же предлагаю другое решение — функцию DownloadFile с использованием объектов Microsoft.XMLHTTP и ADODB.Stream:

  • 38621 просмотр

Комментарии

CreateObject(«Microsoft.XMLHTTP») Вот такой объект кэшировал ответ от сервера где-то в excel.. CreateObject(«WinHttp.WinHttpRequest.5.1») вот это решило проблему.

как вариант, можно добавлять в конец ссылки что-то типа ?a=123
тогда кешироваться не будет

Здравствуйте
Скачиваю файлы этим способом, но похоже файлы кэшируются и при ежедневном запуске макроса у некоторых файлов последняя дата создания и изменения висит по 2-3 недели без изменений, т.е. актуальный файл скачать не получается. Подскажите, пожалуйста, как это можно исправить?
Сейчас макрос выглядит так: http://prntscr.com/jr2pxr
Пробовал добавлять в него строчки заголовков, но не помогает

Доброго времени суток, если пытаюсь выполнять эту функцию через определенный промежуток времени, то файл сохраняется самый первый(хотя на сайте обновляется).
Public NextTime As Date
sub DLoad
sFile=»d:\!\test.xls»
СсылкаНаФайл$ = «http://. /test.xls»
ПутьДляСохранения$ = sFile
DownloadFile СсылкаНаФайл$, ПутьДляСохранения$
Set xlWbk1 = Workbooks.Open(sFile)
.
sFileItog= «d:\!\test»&»_n»&».xls»
xlWbk1.SaveAs (sFileItog)
xlWbk1.Close
Set xlWbk1 = Nothing

NextTime = Now() + TimeValue(«00:10:00»)
Application.OnTime NextTime, «DLoad»
end sub

Надо применить к ссылке преобразование URLencode
http://excelvba.ru/code/URLEncode

Добрый день. Спасибо за отличную функцию, работает на ура! Но не работает, если в ссылке есть русские буквы. Можете подсказать что делать в этом случае? Пожалуйста.

В коде по-русски написано, что последняя команда открывает скачанный файл:

Попробовал скачать .jpg вашим макросом. По окончании скачки почему-то картинка открывается программой просмотра фотографий. Как устранить это?

Здравствуйте Игорь. Благодарю Вас за предложение. Я уже решил свою проблему благодаря Вашей функции GetURLstatus, спасибо и за неё.

Здравствуйте, Кирилл.
Это сделать можно (чтобы таймаут можно было задать), — но код надо полностью переписывать.
Могу написать функцию для скачивания файлов под заказ, если готовы оплатить

Добрый дань! Спасибо за макрос. Подскажите пожалуйста , как решить проблему, Ваш код файлы качает на ура но, как только сайт начинает виснуть или отключатся макрос зависает вместе с ним. Как выходить из макроса если он не отвечает больше 5 секунд? Заранее спасибо

Проблема непонятна, — не понимаю, как может быть такое:
1) во внутренностях файла Эксель не хватает 2 файлов
(когда там в принципе никаких файлов во внутренностях быть не должно)
2) какая программа выдает сообщение, что диск не может быть открыт?
причем тут устаревший браузер?
Всё это не должно иметь никакого отношения к файлу Excel


В любом случае, проблема тут не в коде
Возможно, для вашей задачи код нужен несколько иной, — посложнее, что-то типа такого
http://excelvba.ru/code/DownloadFileWithAuth

Обнаружил следующую проблему:
Скачиваю с яндекс-диска по публичной ссылке следующего вида: https://yadi.sk/d/7Hi5WQ79_тратата.
Обычный файл с расширением xls. У меня стоит уже устаревшая Windows XP и 2007 офис.

Файл файл скачивается, но при открытии экселевского файла он сообщает что в его внутренностях не хватает как минимум 2 файлов. И демонстрирует мне следующую надпись: ДИСК НЕ МОЖЕТ БЫТЬ ОТКРЫТ, тк ваш браузер устарел. А содержимое файла отсутствует.

В то же время с со старого сайта на НАРОДЕ -нормальные ссылки с полным указанием пути к файлу — качаются без проблем.

Т.е оба кода не качают ПУБЛИЧНЫЕ ССЫЛКИ, в случае работы в устаревшей системе с устаревшим IE. Или есть какая то иная возможность?

Спасибо большое за отличный пример!
У меня вопрос такой: с одного источника файлы скачиваются нормально, а с другого — вместо того содержимого, которое должно быть, файл содержит кусок html-кода веб-страницы, с которой я его беру. При этом, если просто подставить в браузер ссылку, файл скачивается.
И zip-файл, скачанный с этого же сайта, не хочет открываться.
Подскажите, пожалуйста, почему такое может происходить?

узнать размер файла после его скачивания — не проблема,
для этого в VBA есть функция filelen(ПолныйПутьКФайлу)

Благодарю, работает! Если не секрет, то как узнать размер загружаемого файла.

Сергей, проблема не в моём макросе, — а в том, что каспер распознает ваш файл как подозрительный.
Как макрос не переделывай, — тут ничем не помочь.
Разбирайтесь либо с файлом, либо с техподдержкой касперского.

Доброго, вначале работало на ура, но сейчас еба***й касперский удаляет файл сходу.
Есть вариант реализовать скачивание без подобных акцессов?

Мне нужно переодически загружать 1 файл, исполнять его, после отсылать почтой результаты, все это было реализовано 2мя вашими функциями, экономило кучу времени.

Здравствуйте, JeyCi.
Код можно использовать и в VBS (только там есть некоторые отличия, не все из которых я помню)
Например, надо убрать все объявления переменных, в частности, удалить строку Dim XMLHTTP, ADOStream, FileName
А в остальном, — должно работать.

кстати, только один небольшой вопрос есть — можно ли этот код использовать для vbs скрипта. я попробовала, но получила ошибку в строке1 «XMLHTTP» объект как-то не задаётся видимо CreateObject’ом. этот код вообще в скрипт не переделать или есть какой-то способ?

«приведённый в этой статье код может давать ошибку». вот и у меня такое случилось. методом высоко-научного тыка, прочитав MsgBox(Text), спустя пол-дня, увидев что до значения 200 код добирается, но всё равно выдает ошибку, всё-таки дополнила текстом ошибки строку If XMLHTTP.statustext = «OK» Or XMLHTTP.statustext = «SAMEORIGIN» Then . SAMEORIGIN — был этим текстом. и оказалось, что как минимум такая ошибка совсем не страшна, её можно обойти (оператором or как дополнила строку указанную). и у меня всё сохранилось. вобщем не все ошибки страшные. Игорю спасибо за код

Если файл доступен для скачивания (вы копируете этот адрес в браузер, нажимаете Enter, — и файл начинает скачиваться), — то функция DownloadFile сможет загрузить этот файл.

Если же для загрузки этого файла нужна авторизация на FTP-сервере, — то тогда нужно уже совсем другое решение
(макросы для работы с FTP у меня тоже есть на сайте)

Подскажите, а если URL ведет на ftp://aaa.bbb.ru/111.jpg, то есть возможность что-то подправить в функции DownloadFile чтобы макрос заработал? Или есть какой обходной путь чтобы скачивать не только по http но и по ftp? Спасибо.

Сделать можно (если вы вручную можете посмотреть список файлов, т.е. если доступ к этому списку есть)
Оформляйте заказ, и пишите, что и как должно работать.

Спасибо, очень полезная функция. Но у меня несколько расширенная задача: прежде чем скачивать файл, необходимо вывести список файлов, находящихся на фтп сервере. Закачанные файлы сохраняются строго в одни и тот же каталог и переименовываются по определенному алгоритму. Поэтому использование интернет эксплорера является не самым удобным вариантом для меня.

Если сайт требует авторизации, и вы авторизовались, используя браузер InternetExplorer, — то им и надо скачивать файл.
Авторизация же не распространяется на любые соединения с компа (согласитесь, если после авторизации открыть ту же страницу в другом браузере, вы же не будете авторизованы. )
Вот и тут так. (хоть тут скачивание производится не браузером, а средствами компонентов Windows, — авторизация, выполненная через IE, никакого отношения к этому макросу не имеет)
Т.е. этот макрос вам не нужен.
В том макросе, где происходит авторизация, добавьте код скачивания файла (какой конкретно код — не знаю, ни разу не приходилось качать файлы через IE)

я попал именно в этот 1%.
C помощью указанной функции удачно авторизовался на сайте, а файл скачивать отказывается (пишет что доступ закрыт и неоходимо залогиниться), что я делаю не правильно:
URL = «https://www.atsenergo.ru/reporting/personal/sib/sell_norem/20130331/имя файла/»
Dest = «путь сохранения.xls»
If URLDownloadToFile(0, URL, Dest, 0, 0) = 0 Then MsgBox «файл скачан в » & Dest
Причем тот же самый код с ссылкой на файл из незакрытой зоны закачивает правильно.

Есть возможность запрашивать список файлов с сервера автоматически.
А остальное можно автоматизировать.

Вроде бы, мне уже приходилось делать подобную программу для этого сайта, для загрузки файлов и обработки данных с atsenergo.ru
Только давно было, не помню подробностей.
Если готовы оплатить работу — обращайтесь в личку, доработаем существующую программу, или напишем новую.

«А зачем вам вход по логину-паролю, если все файлы для скачивания доступны и без этого?»

На этом же сайте есть персональный раздел: https://www.atsenergo.ru/auth
С которого идет скачка и последующая обработка персональных данных.

На счет ответа #20: каждый раз человек не может делать одну и туже операцию которая описана в ответе. Есть ли возможность запрашивать список автоматически? (далее процедура будет запускаться по времени и работать ночью)


А зачем вам вход по логину-паролю, если все файлы для скачивания доступны и без этого?

А получить список файлов можно веб-запросом в Excel
(и обновлять этот запрос макросом, или при открытии файла)

Как сделать веб-запрос в Excel для получения списка файлов на сервере:
(щелкните на картинке для увеличения)

Еще вопрос по скачке, в директории на сервере лежат в одной папке несколько отчетов:
https://www.atsenergo.ru/reporting/public/eur/carana_sell_units/20130215

День ото дня количество и названия отчетов могут меняться: Как правило добавляется один файл с новым названием.
Какой механизм лучше использовать для загрузки полного списка файлов. Может быть подойдет что-то вроде Dir()?

Да, можно и это сделать.
Есть 2 варианта:

1) использовать эту функцию, при этом логин\пароль прописывать в строке URL в определённом формате (после http://)
не уверен, что сработает (далеко не все сайты принимают этот стандартный для http метод авторизации) — но можно попробовать

2) использовать функцию для авторизации на сайте
http://excelvba.ru/code/ConnectServer
и после авторизации скачивать файл средствами Internet Explorer
(этот способ в вашем случае сработает с вероятностью 99%)

Файл прекрасно работает, но также есть необходимость скачивать данные с закрытого раздела сайта (вход по коду участника/логину/паролю). Это как-нибудь можно реализовать?

Strateg, в этом случае код усложнится.
Я в таких случаях подключаюсь в сайту через IE (Internet Explorer), где программно нажимаю согласие с сертификатом, и потом уже скачиваю файл.

Можно сделать это и с использованием объекта «Microsoft.XMLHTTP»

К сожалению, пример кода дать не могу (я как-то публиковал примеры на форумах, но оба форума у меня в данный момент недоступны. пробовал найти в кеше яндекса — не получилось)
Поищите в интернете — наверняка найдёте примеры.

Выяснилось, что проблема в сертификате узла, к которому подключаюсь. Ранее, подключаясь к не доверенному сертификату, возникало сообщение, хочу ли я продолжить. Теперь программа просто падает с ошибкой. Как исправить ситуацию?

Здравствуйте. Подскажите, почему может быть такая ситуация.
У меня есть ссылка на файл, если эту ссылку я вставляю в браузер, начинается загрузка файла.
Если использую данную функцию, на строке
XMLHTTP.send
возникает ошибка

Run-time error ‘-2147467259 (80004005)’:
Неопознанная ошибка

Да, конечно можно.
Обычно так всегда и делаю.

После этой строки кода добавьте строку

Сразу увидите, в чем проблема (может, имя файла некорректно формируется)

Добрый день!
Подскажите, пожалуйста, можно ли ссылку на файл указать в следующем виде:
СсылкаНаФайл$ = «http://excelvba.ru/sites/default/files/» & имя_файла
А имя_файла сформировать отдельно?
У меня данный метод не работает. Может подскажите как это осуществить.

Да, вы правы.
Скачать по прежнему не удается.
Скачивается но не то что надо, т.е с маской скачать не получится.

C InstrRev пробовала, но т.к ссылки полностью нет, все по той же причине, то этот вариант не проходит.

Скачивать файлы с маской у меня вроде получилось, теперь осталась проблема только с сохранением. Под другим именем файлы скачиваются и сохраняются.

Сохранить под новым именем а потом переименовать тоже не получилось, т.к не знаю где можно узнать имя, которое должно быть.

Может можно как-то узнать имя файла которое было скачано? может эти ссылки где-то хранятся?

Путь (точнее, имя файла) для сохранения можно сформировать, взяв кусок текста из ссылки.
(например, при помощи функции InstrRev взяв текст после последнего слэша)
Главное, чтобы ссылка была полностью известна, — остальное уже мелочи.

У меня нет примера вашего файла — потому не буду тратить время на примеры кода, — не факт, что вы адаптируете код под свою задачу.


А подскажите тогда, как указать путь сохранения, если имя неизвестно? можно ли как-то указать путь без имени, чтобы файл сохранялся под тем же именем под которым скачивается?

Нет, так скачать файл из интернета не получится.
Если искать файл в папке на компе — тогда можно было бы найти его поиском по маске.
А в интернете такой способ не работает — надо знать точную ссылку на файл.

Если на сайте где-то есть список доступных файлов (ссылок) — тогда другое дело, можно проанализировать этот список, и найти подходящее имя файла.
По-другому — увы, никак.

Добрый день!
Столкнулась со следующей проблемой.
Программа работает, если известно имя файла и расширение. но в моем случае о файле который скачивается известно только расширение. Имя файла составляется частично автоматически, частично в зависимости от данных таблицы. Можно ли как-то скачать такой файл и чтобы сохранялся файл именно с таким именем. Т.е. переименовывать файл нельзя.

вот имя файла C600965000263161.dsp
В этом имени заранее известно:
Первая буква она всегда С, вторая и третья цифра заранее не известны(в нашем случае 60), 0965 и 000263 надо взять из двух ячеек в таблице и последние 3 цифры тоже не известны (161).

Можно ли как-то скачать файл например по такому принципу
номер = A1 + A2 ‘ склеиваем ту часть что известна
имя файла = С** & номер & ***
СсылкаНаФайл$ = «http://ссылка/» & имя файла

Номеров идентичных не бывает. т.е нам все равно какие цифры под звездочками, главное чтобы номер, что мы берем из таблицы совпадал.

И как сохранить данный файл именно под тем именем, под которым он лежит в интернете.

Надеюсь, я более менее понятно объяснила что мне надо. Сразу предупрежу, что в vba я не сильна, поэтому не судите строго за данный вопрос.

Если кто-то вызовется помочь, могу скинуть конкретный пример на почту.

По ссылке расширение файла ну никак не узнать.
Веб-сервер получает по этой ссылке данные, и возвращает файл, но не тот, который написан в ссылке, а тот, какой считает нужным возвратить.

Т.е. даже если ссылка имеет вид /. /чего_то_там.jpg,
сервер может вам выдать файл СовсемДругоеИмя.exe

А если расширение в ссылке не содержится, то узнать тип файла можно, только скачав его, и проанализировав.

Впрочем, можно и не анализировать — Windows сама корректно распознаёт тип графического файла, не обращая внимание на расширение.
Т.е. вы можете переименовать файл JPG в BMP или PNG, потом открыть — и файл корректно откроется, без каких либо уведомлений.
Т.е. сохраняйте файл с любым расширением (я обычно ставлю JPG), и работайте с ним дальше как с файлом формата JPG,
— все программы (с вероятностью 99%) не заметят подвоха.

То, что по длинной ссылке не скачивается — тут ничего не могу подсказать.
Во-первых, тот километр текста, что вы привели в качестве примера, ссылкой не является (начинается с «data:image/jpeg;base64,/9j/4AAQ», а ссылки начинаются с «http://»),
а во-вторых, очень может быть, что функция не принимает ссылки длинее 255 символов (или 1024 сиволов)

Я про эти ограничения не знаю — ибо не сталкивался.

И вообще, лучше для скачивания файлов пользоваться другим кодом — с использованием WinAPI функции URLDownloadToFile
(как тут недавно выяснилось, URLDownloadToFile качает всё, а приведённый в статье код может выдавать ошибку при некоторых файлах или ссылках.
Не помню точно в чем проблема — скорее всего, в размере файла. А функция на основе URLDownloadToFile качает что угодно)

PS: Километр текста из вашего комментария удалил

Столкнулся с проблемой — не всегда при загрузке из интернета ссылка имеет вид http://excelvba.ru/. /чего_то_там.jpg
иногда попадаются (в случае с поиском по Гуглу) такие конструкции:
https://адрес сайта/images?q=iZBwCJ

и даже такие звери (простите за ужасный объем)
data:image/jpeg;base64,/9j/4AAQSkZJR . очень-очень много букв. QCEIQCEIQCEIQf/2Q==

как в таких случаях узнать хотябы расширение привильное результирующего файла (jpg, png, gif и пр.)
ну и второй вопрос — как закачать по второй ссылке (зверской)?
Ваш код отлично справляется с первой (если расширение jpg), а на вторую ругается

Download — Помогите с URLDownloadToFile в dll

I’m trying to make a program that downloads a dll from my website and then inject it into notepad but I’m not able to download the dll.

I would like that the program downloads the dll but It doesn’t work.

See also questions close to this topic

I have a couple of questions about how initializer_list `s work in C++. First of all, say that we have (std:: omitted for simplicity):


In Visual Studio, I peaked a bit into the class and found only these two constructors:

So my first question is: the line above marked with (*), is there some kind of syntactic sugar behind that allows this syntax (or maybe regular syntax for the compiler, so that he mangles with it and sets up everything properly)?

By the look of the class, everything is constexpr so my conclusion is that it’s all done in compile time, but I couldn’t find any concrete explanations about the question.

Next question is a bit contradictory to the previous conclusion, but since I am not 100% sure about the stuff happening, I’m gonna ask anyway: if I’m not explicitly using new initializer_list (<. >); , can the initializer_list ever use dynamic memory in any way (is there a certain use-case where it does)?

Again, it’s a silly question, but I want to understand exactly what happens with the class, as well as how it mangles with the memory.

Third question is, say that we have a code that looks like this:

In this case, is there any possible way to use the constructor of the Test class other than the way it is used with the t1 and t2 instances? And of course, is this even correct to begin with? cout does print out the correct values, however I want to be sure that there is nothing ill-formed, like for instance the ‘brace init list’ < . >being destroyed (if saying something like this is even possible) before cout uses them?

This is bugging me since I don’t have any understanding about how does the C++ manage the memory when things like these are written.

Простой способ скачивания файла по HTTP

Если ваша программа содержит подключаемые модули (BPL или DLL) или есть необходимость обновлять саму программу, то наверняка стояла проблема обновления копий программы. С развитием Internet появилась прекрасная возможность сделать это быстро и красиво. В данной статье мы расскажем, как добавить опцию автообновления программ из Internet.

Delphi дает нам полный доступ к API WinInet (wininet.pas), что позволяет подключиться и скачать любой файл с указанного вебсайта, используя протоколы FTP или HTTP. Например, мы можем использовать функции API WinInet для создания FTP-браузера или программы для поиска на публичных FTP-серверах заданных файлов.

Основная функция нашей программы — GetInetFile:

Замечание: конечно, этот пример нужно расширить, вставив, например, код для отображения прогресса скачивания в цикл.

Использовать функцию GetInetFile очень просто:

URLDownloadToFile завершается с кодом 0x800c0008 (INET_E_DOWNLOAD_FAILURE)

Я пытаюсь использовать URLDownloadToFile для загрузки файла, но я получаю INET_E_DOWNLOAD_FAILURE после того, как файл частично загружен. Мой вызов выглядит следующим образом:

strTemp дает URL в виде:

pCallback является реализация IBindStatusCallback, IHttpSecurity и IWindowForBindingUI.

Я в состоянии добраться до точки, имеющие окна показать диалоговое окно, предупреждающее меня о сертификате безопасности сайта (возвращая S_FALSE в IHttpSecurity :: OnSecurityProblem).

Я получаю несколько звонков в IBindStatusCallback :: OnProgress, с этой последовательностью значений ulStatus:

BINDSTATUS_PROXYDETECTING BINDSTATUS_COOKIE_SENT BINDSTATUS_CONNECTING BINDSTATUS_SENDINGREQUEST

После этого последнего OnProgress вызова, анализатор пакетов показывает, что я получаю 100+ килобайт данных, загруженных с сервера (Файл 18+ MB.) После этого я получаю вызов IBindStatusCallback :: OnStopBinding со значением HRESULT из INET_E_DOWNLOAD_FAILURE.

Я знаю, что разрешение на запись в каталог назначения не является проблемой.

Я не уверен ли я обработка IBindStatusCallback :: GetBindInfo и :: OnStartBinding правильно. Вот мой код для каждого из них:

Любые идеи о том, что может быть неправильно?

Я также имею эту проблему сейчас, хотя, когда я в последний раз использовал / разработал программу 6 месяцев назад она работала хорошо. Однако, если я запустить программу с правами администратора он работает отлично.


Мои симптомы очень похожи на Уэйна. Процесс мониторы показывает, что связь с сервером через TCP (хотя и несколько меньше данных, чем когда он не имеет права администратора) Это также делает звонки на обратный вызов состояния в обоих режимах. Расположение файла для загрузки является временным каталогом и не требует прав администратора.

Download — Помогите с URLDownloadToFile в dll

i made a project which should check for updates, atm i am using UrlDownloadToFile, it will save my version.txt on the remote computer and it will open the file to check if my dll version is the same as in the version.txt file.

is there any other way to download the string and store it in a char array without saving it to the harddisk?

— Edit: No i am not doing a paysite hack downloader — its for my san andreas API because im going to update it every often, and now i want to make a update notify in my api.

Return code Description
S_OK
E_OUTOFMEMORY
INET_E_DOWNLOAD_FAILURE
Momo5000 is offline

Ad Blockers — creating paywalls and destroying free content since 2006

We strive to provide all our services for free and not interrupt your visit with intrusive advertisements or restrictions — support us by disabling your ad blocker or whitelisting our site.

Ad Blockers — creating paywalls and destroying free content since 2006

We strive to provide all our services for free and not interrupt your visit with intrusive advertisements or restrictions — support us by disabling your ad blocker or whitelisting our site.

Announcement

Forum Gu >This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.

Simple demo of URLDownloadToFile (exported from system32\urlmon.dll)

  • Join Date: Sep 2000
  • Posts: 3194

Simple demo of URLDownloadToFile (exported from system32\urlmon.dll)

Downloading a file from a URL has never been easier! However there is a downside — it doesn’t give you any control over progress, filesizes or anything — you just say «save this URL to this file», and it will return 1 if successful — too easy!
Ready to compile in PB/CC. To compile in PB/DLL just replace STDOUT with MSGBOX
This demo downloads an 8kb jpeg from the Powerbasic server, but please change the URL to one of your own before using

  • Join Date: Dec 2005
  • Posts: 105

Is there a way to use the file’s existing filename, instead of assigning it in the program? I’d like to just select a directory, and all downloaded files go there.

Comment

  • Join Date: Feb 2000
  • Posts: 4945

Please create a new thread in one of the proper forums and link to this code if you need to refer to it.

——————
* Americans: Fight for Right. Join the push for the Fair Tax!

Comment

  • Join Date: Feb 2005
  • Posts: 7640

May not download current version if already in cache

Comment

We process personal data about users of our site, through the use of cookies and other technologies, to deliver our services, and to analyze site activity. For additional details, refer to our Privacy Policy.

By clicking «I AGREE» below, you agree to our Privacy Policy and our personal data processing and cookie practices as described therein. You also acknowledge that this forum may be hosted outside your country and you consent to the collection, storage, and processing of your data in the country where this forum is hosted.

Цукерберг рекомендует:  C# game - C#, ошибка при запуске 2д игры.
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих