ivantu |
Отправлено: 08 Апреля, 2021 - 10:28:46
|
Эксперт
Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013
Репутация: 14
|
Выделено в отдельную тему из темы "Версия 5.43 Работа с HTTPS протоколом" Вообще у меня задумка такая, пока файл закачивается вывести на экран прогрес бар, на форуме нашел:
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));/// красный фон
}
|
|
|
Kibor |
Отправлено: 08 Апреля, 2021 - 11:58:44
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Перенесено из темы "Версия 5.43 Работа с HTTPS протоколом"
ivantu пишет: Вообще у меня задумка такая, пока файл закачивается вывести на экран прогрес бар, на форуме нашел:
Что бы его вывести, надо знать ожидаемый объем данных. Размер ожидаемых количества байт в Size_Bute
Процесс загрузки (Отобразить)
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
#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, "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");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
int Size_Bute=35000;//Сколько байт ждем
int histance, progress_bar1, progress_bar2;
createdialog(0);
showdialog(0, "Загрузка ресурсов", 100, 100, 400, 100, 1, 1);
///////////////////////////////////////////////////////////////////
int Size_B;
string fr;
int read_b=50; //Какими порциями и с какой скоростью загружать 1024
enabletimer(0);
load();
disabletimer(0);
sendmessage(PBM_SETPOS, Size_B, 0, formatiw(progress_bar2));
messagebox ("Загружено "+format(Size_B)+" байт");
messagebox (fr);
/////////////////////////////////////////////////////////////////////////////////
CREATE_TIMER(0, 10)//Номер таймера, выполнение таймера через мсек.
{
sendmessage(PBM_SETPOS, Size_B, 0, formatiw(progress_bar2));
}
function getmessage(0, WM_CREATE)
{
histance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
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+Size_Bute*65536, formatiw(progress_bar2)); // минимальное и максимальное значение (от 0 до Size_Bute)
sendmessage(PBM_SETBARCOLOR, 0, 14130224, formatiw(progress_bar2));///черная полоса
sendmessage(PBM_SETBKCOLOR, 0, 12631996, formatiw(progress_bar2));/// красный фон
}
function load()
{
Size_B=0;
fr="";
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",
"forum",
NULL,
NULL,
0,
INTERNET_FLAG_SECURE | INTERNET_FLAG_NO_CACHE_WRITE,
1);
if (hRequest != NULL) // посылаем запрос
{
int bSend = HttpSendRequest(hRequest,
NULL,
0,
NULL,
0);
new char szData[read_b];
int dwBytesRead;
loop()
{
int bRead = InternetReadFile(
hRequest,
address(#szData[0]),
sizearray(szData)-1,
address(#dwBytesRead));
szData[dwBytesRead]=0;
fr=fr+format(#szData[0]);
Size_B=Size_B+dwBytesRead;
if (bRead == FALSE || dwBytesRead == 0) break;
}
delete szData;
InternetCloseHandle(hRequest);// закрываем запрос
}
InternetCloseHandle(hConnect);// закрываем сессию
}
InternetCloseHandle(hInternet);// закрываем WinInet
}
}
(Добавление)
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
}
}
(Добавление)
Поправил код..
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");
} |
|
|
Kibor |
Отправлено: 08 Апреля, 2021 - 13:26:17
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Перенесено из темы "Версия 5.43 Работа с HTTPS протоколом"
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");
} |
|
|
|