Автор: Zloy_Gelud
Дата сообщения: 13.07.2008 11:38
40rt -- Руссификатор используешь?
Добавлено:
Robby
Вот [more=скрипт]
Код: -- Функция возвращает имя папки из пути к ней
FolderEx={};
function FolderEx.GetName(sPath)
if (String.Right(sPath, 1) == "\\") then
sPath = String.Left(sPath, String.Length(sPath) - 1);
end
local nInd = String.ReverseFind(sPath, "\\", false);
if (nInd ~= -1) then
sName = String.Right(sPath, String.Length(sPath) - nInd);
else
sName = sPath;
end
return sName;
end
-- Функция возвращает имя инстоллятора или пустую строку "", если он не найден
function GetInstallFile(sPath)
-- путь к инстоллятору
sPath_InstallFile = "";
-- ищем файлы по маске cName_SetupFile
local tPaths_SetupFile = File.Find(sPath, "setup.*", false, false, nil);
-- если нашли
if (tPaths_SetupFile) then
-- если нашли один файл
if (Table.Count(tPaths_SetupFile) == 1) then
-- значит это и есть инстоллятор
sPath_InstallFile = tPaths_SetupFile[1];
--elseif (Table.Count(tPathsSetup) > 1) then
--sPath_InstallFile = sPath;
end
-- если не нашли
else
-- ищем экзешники
local tPaths_ExeFile = File.Find(sPath, "*.exe", false, false, nil);
-- также ищем мсишники
local tPaths_MsiFile = File.Find(sPath, "*.msi", false, false, nil);
-- если нашли экзешники
if (tPaths_ExeFile) then
-- если нашли один экзешник и не нашли мсишников
if (Table.Count(tPaths_ExeFile) == 1 and tPaths_MsiFile == nil) then
-- значит этот файл - инстоллятор
sPath_InstallFile = tPaths_ExeFile[1];
--else
--sPath_InstallFile = sPath;
end
-- не нашли экзешников
else
-- а нашли мсишники
if (tPaths_MsiFile) then
-- если один мсишник
if (Table.Count(tPaths_MsiFile) == 1) then
-- тогда он и есть инстоллятор
sPath_InstallFile = tPaths_MsiFile[1];
--else
--sPath_InstallFile = sPath;
end
--else
--sPath_InstallFile = sPath;
end
end
end
if (sPath_InstallFile ~= "") then
return String.SplitPath(sPath_InstallFile).Filename..String.SplitPath(sPath_InstallFile).Extension;
else
return "";
end
end
-- Узнаем размер файла
function GetFileSize(sFile)
local nBytes = File.GetSize(sFile);
sSizeFile = String.GetFormattedSize(nBytes, FMTSIZE_AUTOMATIC, true);
-- возвращаем размер файла
return sSizeFile;
end
-- описание программы
function GetDescription(sPath)
-- ищем файлы а папке с программой по маске
local tPaths_DescFile = File.Find(sPath, "readme.*", false, false, nil);
-- если нашли
if (tPaths_DescFile) then
-- считываем содержимое первого файла в таблице в строку
sDesc = TextFile.ReadToString(tPaths_DescFile[1]);
-- если не нашли
else
-- произвольное сообщение
sDesc = "Описание к данной программе отсутствует.";
end
-- возвращаем описание к программе
return sDesc;
end
-- web-адресс программы
function GetUrl(sPath)
-- урл-адрес
sURL = "";
-- поиск урл-файлов
local tPath_UrlFile = File.Find(sPath, "*.url", false, false, nil, nil);
-- если нашли
if (tPath_UrlFile) then
-- выбираем первого в списке
local sPath_UrlFile = tPath_UrlFile[1];
-- считываем урл-адрес (без "http:\\")
local sIn = String.Mid(INIFile.GetValue(sPath_UrlFile, "InternetShortcut", "URL"), 8, -1);
--если имеется завершающая "/"
if (String.Right(sIn, 1) == "/") then
-- удвляем ее
sURL = String.Left(sIn, String.Length(sIn) - 1);
end
end
-- возвращаем урл-адрес
return sURL;
end
-- Возвращает имя скриншота программы
function GetImage(sPath)
local sFullImg = "";
local tMasks = {"*.png", "*.jpg", "*.bmp", "*.gif", "*.tga", "*.tiff"};
for n, cMask in tMasks do
local tFullPaths = File.Find(sPath, cMask, false, false, nil, nil);
if (tFullPaths) then
sFullImg = tFullPaths[1];
end
end
return String.SplitPath(sFullImg).Filename..String.SplitPath(sFullImg).Extension;
end
-- возвращает имя руссификатора
function GetRusFile(sPath)
-- ищем файлы по маске
local tPaths_RusFile = File.Find(sPath, "rus.*", false, false, nil);
-- если нашли
if (tPaths_RusFile) then
-- руссификатор - первый в таблице файл
sPath_RusFile = tPaths_RusFile[1];
else
sPath_RusFile = "";
end
--возвращаем путь к руссификатору
return String.SplitPath(sPath_RusFile).Filename..String.SplitPath(sPath_RusFile).Extension;
end
-- возвращает имя патча
function GetCrackFile(sPath)
-- ищем файлы по маске
local tPaths_CrackFile = File.Find(sPath, "crack.*", false, false, nil);
-- если нашли
if (tPaths_CrackFile) then
-- патч - первый в таблице файл
sPath_CrackFile = tPaths_CrackFile[1];
else
sPath_CrackFile = "";
end
--возвращаем путь к патчу
return String.SplitPath(sPath_CrackFile).Filename..String.SplitPath(sPath_CrackFile).Extension;
end
-- создание БД
sFolderPath = Dialog.FolderBrowse("Please select a folder:", "C:\\");
if (sFolderPath ~= "CANEL") and (sFolderPath ~= "") then
local sXMLDB = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<database>\r\n";
tRazdelNames = Folder.Find(sFolderPath.."\\", "*", false, nil);
if (tRazdelNames) then
for n, cRazdelName in tRazdelNames do
tProgramNames = Folder.Find(cRazdelName.."\\", "*", false, nil);
if (tProgramNames) then
for n, cProgramName in tProgramNames do
sXMLDB = sXMLDB.."<item><name>"..FolderEx.GetName(cProgramName).."</name>";
----------------------------------------------------------
sProgramFile=GetInstallFile(cProgramName);
sProgramSize = GetFileSize(cProgramName.."\\"..sProgramFile);
sXMLDB = sXMLDB.."<size>"..sProgramSize.."</size>";
----------------------------------------------------------
sProgramDesc = GetDescription(cProgramName);
sXMLDB = sXMLDB.."<desc>"..sProgramDesc.."</desc>";
----------------------------------------------------------
sPrgURL = GetUrl(cProgramName);
sXMLDB = sXMLDB.."<url>"..sPrgURL.."</url>";
----------------------------------------------------------
sPrgImg = GetImage(cProgramName);
sXMLDB = sXMLDB.."<img>"..sPrgImg.."</img>";
----------------------------------------------------------
sXMLDB = sXMLDB.."<file>"..GetInstallFile(cProgramName).."</file>";
----------------------------------------------------------
sXMLDB = sXMLDB.."<rus>"..GetRusFile(cProgramName).."</rus>";
----------------------------------------------------------
sXMLDB = sXMLDB.."<crack>"..GetCrackFile(cProgramName).."</crack>";
----------------------------------------------------------
sXMLDB = sXMLDB.."<razdel>"..FolderEx.GetName(cRazdelName).."</razdel></item>\r\n\r\n";
end
end
end
sXMLDB = sXMLDB.."</database>";
end
XML.SetXML(sXMLDB);
-- непошифрованная БД
--XML.Save("C:\\db_dec.xml");
sEncDB = Crypto.BlowfishEncryptString(sXMLDB, "ru-board", 0);
TextFile.WriteFromString("C:\\db.xml", sEncDB, false);
end