Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Описание: Упаковка нужных файлов в ресурсы exe. Изображения, данные и т.д.
Zireael
Отправлено: 28 Октября, 2018 - 23:36:03
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017  
Репутация: 585




Попробуйте так:
CODE:
external(INT, "GetModuleFileName", "GetModuleFileNameA", "kernel32.dll" );
char c[255];
GetModuleFileName(0, address (#c[0]), 255);
messagebox(format(#c[0]));
 
 Top
adoks
Отправлено: 19 Августа, 2019 - 15:13:54
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2019  
Репутация: 0




Доброго времени суток. Пытаюсь конвертировать из bmp в bmpt и обратно файлы изображений. Делаю по выше описанным кодам. По итогу не получаются оригиналы исходников. Или битые файлы, или частично утеряные фрагменты изображений. Где я что не так делаю?

вот что выходит
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]

Код (Отобразить)

(Отредактировано автором: 19 Августа, 2019 - 15:20:57)

 
 Top
007wan
Отправлено: 21 Сентября, 2019 - 12:26:08
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1838
Дата рег-ции: Март 2017  
Репутация: -2




 Kibor пишет:
unpack("C:\Windows\system32\calc.exe", "C:\c.exe", 1);
первый параметр - строка или переменная string в которой содержится путь к файлу каким он прописан в блоке RESOURCE. Этот параметр указывает какой файл извлекаем из ресурсов.
второй - строка или переменная string в которой содержится путь куда запишем файл.
третий параметр 0 или 1
 Kibor пишет:

1 - заменять.

Добаработайте параметр в unpack если есть - не заменять. Он будет не просто проверять "Есть, не заменять, нету, заменить" (по существу), а еще будет проверять по Хэшу, Тогда уже будет так:
 Цитата:
-Если не существует файл, распаковать.
-Если существует файл
--Если хэш файла совпадает с хэшом файла, который в ресурсах, то не распаковывать и не заменять.
--Если не совпадает хэш с файлом, который в ресурсах, то распаковать с заменой.


(Добавление)
Так же добавьте что вернет при Int a= unpack...
0 - отсутствует файла(распакован)
1 - заменен файла, хэш не совпал
2 - файл не требует замены и распаковки

(Отредактировано автором: 21 Сентября, 2019 - 12:29:11)

 
 Top
007wan
Отправлено: 26 Сентября, 2019 - 11:43:07
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1838
Дата рег-ции: Март 2017  
Репутация: -2




 Kibor пишет:
Если очень надо, добавил функцию resource

можно загрузить файл с ресурса в массив char без распаковки
 Цитата:
char buf[1000000];
resource(#buf[0], "C:\images.bmp"); //загружает в массив buf с ресурса файл обозначенный "C:\images.bmp" в блоке RESOURCE
RESOURCE
{
"C:\images.bmp" ;
}

Возвращает количество загруженных байт.

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

для этого можно использовать этот скрипт
 Цитата:
//создать папку C:\images и скинуть в нее все bmp
//создать в этой папке папку image_res (C:\images\image_res). в ней бут конвертованные файлы
string pyt="C:\images\";
string file_bmp[1000];
int kol, n;


kol=dir(pyt, #file_bmp[0], "file", "bmp");//узнаем все bmp
for (n=0; n<kol; n++)//перечислить все bmp и конверт их
{
if (bmpt()==-1){messagebox (ошибочка.); goto er;}
}
er:;

function bmpt()
{
int ImageS[500][500];
int x, y, x1, y1;
char byt[4];
if (loadimage (#ImageS[0][0], pyt+file_bmp[n])<1)return -1;
x=imagewidth(#ImageS[0][0]);
y=imageheight(#ImageS[0][0]);

if (fopen (pyt+"image_res\"+file_bmp[n]+"t", "wb")!=0)
{
codhex(x, #byt[0]);//Конвертируем число int 4 байт x в HEX (ширина)
fwriteb(byt[0]);fwriteb(byt[1]);fwriteb(byt[2]);fwriteb(byt[3]);
codhex(y, #byt[0]);//Конвертируем число int 4 байт y в HEX (высота)
fwriteb(byt[0]);fwriteb(byt[1]);fwriteb(byt[2]);fwriteb(byt[3]);
for (y1=0; y1<y; y1++)
{
for (x1=0; x1<x; x1++)
{
codhex(ImageS[x1][y1], #byt[0]);//Конвертируем число int 4 байт ImageS[x1][y1] в HEX (цвет)
fwriteb(byt[0]);
fwriteb(byt[1]);
fwriteb(byt[2]);
fwriteb(byt[3]);
}
}
fclose();
}
return 0;
}


потом поместить в ресурсы файла с папки C:\images\image_res с расширением bmpt

с ресурса использовать с помощью resource так
CODE:
int image[500][500];
int i5[500][500];
loadimage_res(#image[0][0], "C:\images\image_res\image0.bmpt");
loadimage_res(#i5[0][0], "C:\images\image_res\5.bmpt");



function loadimage_res(int #images[0][0], string pyt);
{
char buf[1000000];
int sezbuf;
int n, x, y, x1, y1;
sezbuf=resource(#buf[0], pyt);
n=0; x=codhexi(#buf[n], 4);//перевести HEX код 4 байт с целое число int x
n=4; y=codhexi(#buf[n], 4);//перевести HEX код 4 байт с целое число int x
n=8;
for (y1=0; y1<y; y1++)
{
for (x1=0; x1<x; x1++)
{
images[x1][y1]=codhexi(#buf[n], 4);//перевести HEX код 4 байт с целое число int image[x1][y1]
n=n+4;
}
}
for (x1=0; x1<=x; x1++)images[x1][y]=-1;//забить границу -1 в целое число int ImageS[x1][y1]
for (y1=0; y1<=y; y1++)images[x][y1]=-1;//забить границу -1 в целое число int ImageS[x1][y1]
}

RESOURCE
{
"C:\images\image_res\image0.bmpt";
"C:\images\image_res\5.bmpt" ;
}
Тоесть я правильно понимаю принцип действия:
Мы берем картинку bmp преобразовываем через скрипт в bmpt, потом загружаем в ресурсы эти преобразованные файлы, а старые удаляем после сборки(для теста), потом мы используемуем скриипт для извлечения итд и загружаем их из ресурса в loadimage? Чё так сложно то))
(Добавление)
Почему мне кажется всё старое - ненадежное? Ведь функция в 2015 была и код придется вставлять такой длинющий в свой скрипт, потом преобразовывать в ручную еще...
 
 Top
Dantes3000
Отправлено: 08 Декабря, 2019 - 13:29:51
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




CODE:
int u=unpack("D:\Misc\Kibor\TF2\FindColor.dll", tempfolder()+"FindColor.dll", 1);

external(INT, "FindColor", "FindColor", tempfolder()+"FindColor.dll");

messagebox(u);


RESOURCE
{
"d:\Misc\Kibor\TF2\FindColor.dll";
}


При запуске из Кибор - выводит 1.
Собираю в ехе - всегда выводит -2. ПОчему?
 
 Top
Zireael
Отправлено: 08 Декабря, 2019 - 13:35:27
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
Собираю в ехе - всегда выводит -2. ПОчему?

Поставить галку 'Упаковать файлы с блока RESOURCE в EXE'.
 
 Top
Dantes3000
Отправлено: 08 Декабря, 2019 - 13:55:44
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




Zireael , ставил
 
 Top
Zireael
Отправлено: 08 Декабря, 2019 - 14:02:50
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
d:\

С заглавной напиши.
CODE:
D:\
 
 Top
Dantes3000
Отправлено: 08 Декабря, 2019 - 15:08:39
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




Zireael , Да, спасибо
 
 Top
Remyc
Отправлено: 13 Августа, 2020 - 05:21:06
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 67
Дата рег-ции: Апр. 2019  
Репутация: 1




А можно указывать путь к файлу находящемся на ftp хранилище? Или например давать URL ссылку на файл?

Дело вот в чем, переодически дорабатывая, тот или иной скрипт, получаю новые элементы в блоке ресурс (или меняются старые), Из-за этого пользователям приходится постоянно перекачивать exe, хочу этого избежать
 
 Top
Страниц (7): « 1 2 3 [4] 5 6 7 »
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by