Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Как скачать файл и распаковать его

Страниц (8): [1] 2 3 4 5 6 7 8 »
 

1. ivantu - 07 Апреля, 2021 - 16:44:55 - перейти к сообщению
может ли sendgetweb вернуть к примеру текущие полученные байты, не общий размер а сколько получено на данный момент

CODE:
int count_byte=sendgetweb(#textb[0], "Mozilla", "GET", "http:/"+"/site.ru", "main.exe");


т.к. count_byte вернет общее количество после загрузки, а мне нужно получить значение во время загрузки.
Или есть какое то другое решение...
2. Zireael - 07 Апреля, 2021 - 18:13:43 - перейти к сообщению
 Цитата:
Или есть какое то другое решение...

https://kibor-bot.com/forum/topi...74792#1561374792
3. ivantu - 08 Апреля, 2021 - 00:18:33 - перейти к сообщению
[quote=Zireael](для просмотра ссылки Вам необходимо авторизоваться) /quote]
Посмотрел, и что то не понял где решение (
4. ivantu - 08 Апреля, 2021 - 02:28:46 - перейти к сообщению
Вообще у меня задумка такая, пока файл закачивается вывести на экран прогрес бар, на форуме нашел:

CODE:

#define GWL_HINSTANCE -6
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824

#define PBM_SETRANGE 1025
#define PBM_SETPOS 1026
#define PBS_SMOOTH 1

#define PBM_SETBARCOLOR 1033
#define PBM_SETBKCOLOR 8193

external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");

int histance, progress_bar1, progress_bar2;

createdialog(0);
showdialog(0, "Загрузка ресурсов", 500, 400, 400, 100, 1, 1);

for(int i=0; i<100; i++)
{
//sendmessage(PBM_SETPOS, i, 0, formatiw(progress_bar1));
sendmessage(PBM_SETPOS, i, 0, formatiw(progress_bar2));
sleep(10);
}


function getmessage(0, WM_CREATE)
{
histance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
//progress_bar1=CreateWindow(0, "msctls_progress32", "", WS_VISIBLE | WS_CHILD, 10, 10, 310, 25, gethwnd(0), 0, histance, 0, 0);
progress_bar2=CreateWindow(0, "msctls_progress32", "", PBS_SMOOTH + WS_VISIBLE | WS_CHILD, 5, 15, 380, 25, gethwnd(0), 0, histance, 0, 0);
sendmessage(PBM_SETRANGE, 0, 0+100*65536, formatiw(progress_bar1)); // минимальное и максимальное значение (от 0 до 100)
//sendmessage(PBM_SETRANGE, 0, 0+100*65536, formatiw(progress_bar2));

sendmessage(PBM_SETBARCOLOR, 0, 14130224, formatiw(progress_bar2));///черная полоса
sendmessage(PBM_SETBKCOLOR, 0, 12631996, formatiw(progress_bar2));/// красный фон

}
5. Zireael - 08 Апреля, 2021 - 03:09:28 - перейти к сообщению
 Цитата:
Посмотрел, и что то не понял где решение

Файл скачивается блоками по 1024 байта, после вызова InternetReadFile можно выполнить нужный код.
6. ivantu - 08 Апреля, 2021 - 03:48:29 - перейти к сообщению
Сложновато для меня даже не понимаю как там сохранить полученные байты на диск...
7. Kibor - 08 Апреля, 2021 - 03:58:44 - перейти к сообщению
 ivantu пишет:
Вообще у меня задумка такая, пока файл закачивается вывести на экран прогрес бар, на форуме нашел:
Что бы его вывести, надо знать ожидаемый объем данных. Размер ожидаемых количества байт в Size_Bute

Процесс загрузки (Отобразить)

(Добавление)
 ivantu пишет:
Сложновато для меня даже не понимаю как там сохранить полученные байты на диск...

Что бы скачать файл и сохранить его на диске, надо просто указать его в адресе и вместо string fr использовать массив char, который надо потом сохранить в файле в бинарном режиме.
(Добавление)
При скачивание файла на сервере он должен быть без расширения.
Пример скачивания программы VisualEditor с темы Новый Визуальный редактор, сохранения ее на диск C и ее запуск.
Программа скачивается с(для просмотра ссылки Вам необходимо авторизоваться)

Скачивание, сохранание и запуск программы с сайта (Отобразить)

(Добавление)
Поправил код..

CODE:
#define NULL 0
#define FALSE 0
#define INTERNET_OPEN_TYPE_PRECONFIG 0
#define INTERNET_DEFAULT_HTTPS_PORT 443
#define INTERNET_SERVICE_HTTP 3
#define INTERNET_FLAG_SECURE 8388608
#define INTERNET_FLAG_NO_CACHE_WRITE 67108864


external(INT, "InternetOpen", "InternetOpenA", "Wininet.dll");
external(INT, "InternetConnect", "InternetConnectA", "Wininet.dll");
external(INT, "HttpOpenRequest", "HttpOpenRequestA", "Wininet.dll");
external(INT, "HttpSendRequest", "HttpSendRequestA", "Wininet.dll");
external(INT, "InternetReadFile", "InternetReadFile", "Wininet.dll");
external(INT, "InternetCloseHandle", "InternetCloseHandle", "Wininet.dll");


char szData[2000000];//С запасом



///////////////////////////////////////////////////////////////////



int Size_B=0;

load();
messagebox ("Загружено "+format(Size_B)+" байт");


if (fopen ("C:\VisualEditor.exe", "wb")!=0)
{
fwriteb(#szData[0], Size_B);//Запись по указателю на масив char
fclose();
}
start("C:\VisualEditor.exe");

/////////////////////////////////////////////////////////////////////////////////




function load()
{

int hInternet = InternetOpen(
"My bot",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,NULL,
0);

if (hInternet != NULL) // открываем HTTP сессию
{
int hConnect = InternetConnect(
hInternet,
"kibor-bot.com",
INTERNET_DEFAULT_HTTPS_PORT,
NULL,NULL,
INTERNET_SERVICE_HTTP,
0,
1);

if (hConnect != NULL)
{
int hRequest = HttpOpenRequest(
hConnect,
"POST",
"files/VisualEditor",
NULL,
NULL,
0,
INTERNET_FLAG_SECURE | INTERNET_FLAG_NO_CACHE_WRITE,
1);


if (hRequest != NULL) // посылаем запрос
{
int bSend = HttpSendRequest(hRequest,
NULL,
0,
NULL,
0);

int dwBytesRead;

loop()
{
int bRead = InternetReadFile(
hRequest,
address(#szData[Size_B]),
sizearray(szData)-1,
address(#dwBytesRead));
Size_B=Size_B+dwBytesRead;
if (bRead == FALSE || dwBytesRead == 0) break;
}

InternetCloseHandle(hRequest);// закрываем запрос
}

InternetCloseHandle(hConnect);// закрываем сессию
}

InternetCloseHandle(hInternet);// закрываем WinInet
}
}


Или проще с помощью sendgetweb
CODE:
char szData[2000000];//С запасом
int Size_B=sendgetweb(#szData[0], "", "GET", "https:/^/kibor-bot.com", "files/VisualEditor");
if (Size_B)
{
messagebox ("Загружено "+format(Size_B)+" байт");
if (fopen ("C:\VisualEditor.exe", "wb")!=0)
{
fwriteb(#szData[0], Size_B);//Запись по указателю на масив char
fclose();
}
start("C:\VisualEditor.exe");
}
8. ivantu - 08 Апреля, 2021 - 05:19:35 - перейти к сообщению
Земной поклон, буду изучать!
9. Kibor - 08 Апреля, 2021 - 05:26:17 - перейти к сообщению
 ivantu пишет:
Земной поклон, буду изучать!

За одно и виз редактор протестируете))

А вообще проще с помощью sendgetweb
CODE:
char szData[2000000];//С запасом
int Size_B=sendgetweb(#szData[0], "", "GET", "https:/^/kibor-bot.com", "files/VisualEditor");
if (Size_B)
{
messagebox ("Загружено "+format(Size_B)+" байт");
if (fopen ("C:\VisualEditor.exe", "wb")!=0)
{
fwriteb(#szData[0], Size_B);//Запись по указателю на масив char
fclose();
}
start("C:\VisualEditor.exe");
}
10. ivantu - 08 Апреля, 2021 - 05:36:31 - перейти к сообщению
 Kibor пишет:
А вообще проще с помощью sendgetweb

Проще то я знаю что проще с него и начал, но как к этому всему прикрутить индикатор загрузки... там нет промежуточных значений, просто общий объем, может Вы знаете как ))

Powered by ExBB FM 1.0 Final