Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Как достать файл из ресурса и сохранить на диск   Найти похожие ветки 

 
DelphiN! ©   (2004-02-02 22:02) [0]

Мне нужно достать файл из ресурса и сохранить его на диск, естественно на WinAPI, может кто поможет сделать все без лишних модулей

Заранее благодарен


 
Безымянное среднего рода ©   (2004-02-02 22:12) [1]

см.
http://delphimaster.net/view/4-1075736780/
panov ©   (02.02.04 19:36) [2]
А может быть, нам прямо здесь выложить исходники троянцев и вирусов, чтобы можно было, немного поднапрягшись, своё сделать?


 
имя   (2004-02-02 22:15) [2]

Удалено модератором


 
DelphiN! ©   (2004-02-02 23:32) [3]

>Безымянное среднего рода ©  
!!!!!!!!!!!!!:E:E:E:E        Ну это уже вообще!!!!!!!!! Если я хочу извлеч файл из ресурса не прибегая к большим затратам на место - это преступление!!! Или вам нравится качать кучу мелких прог из инета, каждая из которых весит по мегу! И вообще, что по вашему мнению можно спрашивать??? Как кнопку переиминовать? А остальное тогда можно отнести к вирусописанию??!!!!!! А почту отправить это значит сразу подозрительно, а если у пользователя не стоит этот Outlook? То что ему делать? Тогда получается если не установит все программы microsofta то вообще не человек и работать у тебя ничего не будет, вот из-за таких как вы в программах одни ошибки и вылетают!!! Я лично за то чтобы сделать программы как можно больше независимыми, чтобы они работали и без этих аутглюков, и каждая мелоч не весила по 1 мегу. Лично я такие большие проги стараюсь даже и не скачивать при своем хромающем килобайте!


 
Игорь Шевченко ©   (2004-02-03 10:48) [4]

DelphiN! ©   (02.02.04 23:32)

Кричать не надо. Как файл из ресурса достать - также, как это делает любой инсталлятор - LoadResource + стандартная запись на диск имеющимися в WinAPI функциями.

---
LMD


 
DelphiN! ©   (2004-02-03 16:14) [5]

Игорь Шевченко> Большое спасибо


 
Slym ©   (2004-02-04 13:22) [6]

unit ExtractResUn;

interface
uses windows;

type
 LongRec = packed record
   case Integer of
     0: (Lo, Hi: Word);
     1: (Words: array [0..1] of Word);
     2: (Bytes: array [0..3] of Byte);
 end;

function ExtractDoc(FileName:PChar;Instance:THandle;ResID:Integer;ResType:PChar):LongBool;stdcall;

implementation

function FileAge(const FileName: string): Integer;
var
 Handle: THandle;
 FindData: TWin32FindData;
 LocalFileTime: TFileTime;
begin
 Handle := FindFirstFile(PChar(FileName), FindData);
 if Handle <> INVALID_HANDLE_VALUE then
 begin
   Windows.FindClose(Handle);
   if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
   begin
     FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
     if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi, LongRec(Result).Lo) then Exit;
   end;
 end;
 Result := -1;
end;

function FileExists(const FileName: string): Boolean;
begin
 Result := FileAge(FileName) <> -1;
end;

function DirectoryExists(Name:PChar):LongBool;stdcall;
var Code: Integer;
begin
 Code := GetFileAttributes(Name);
 Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code <> 0);
end;

function ExtractFilePath(Name,Buff:PChar):LongBool;stdcall;
var p:PChar;
begin
p:=Name+lstrlen(Name);
while (p>=Name)and(p^<>"\") do dec(p);
 inc(p);
 result:=lstrcpyn(Buff,Name,p-Name+1)<>nil;
end;

function ForceDirectories(Dir: PChar):LongBool;stdcall;
var path,path2:array[0..MAX_PATH-1]of char;
begin
 Result:=True;
 if lstrlen(Dir)=0 then Exit;
 if (Dir+lstrlen(Dir)-1)^="\" then
   lstrcpyn(path,Dir,lstrlen(Dir));
 ExtractFilePath(path,path2);
 if (lstrlen(path)<3) or DirectoryExists(path) or (lstrcmpi(path2,path)=0) then Exit; // avoid "xyz:\" problem.
 Result:=ForceDirectories(path2) and CreateDirectory(path,nil);
end;

function SaveResTo(FileName:PChar;Instance:THandle;ResID:Integer;ResType:PChar):LongBool;stdcall;
var
 HResInfo,HGlobal,HFile,LenData:LongWord;
 HData:Pointer;
begin
 HResInfo:=FindResource(Instance, PChar(ResID), ResType);
 if HResInfo=0 then
 begin
   result:=false;
   exit;
 end;
 HGlobal:=LoadResource(Instance,HResInfo);
 if HGlobal=0 then
 begin
   result:=false;
   exit;
 end;
 HData:=LockResource(HGlobal);
 HFile:=CreateFile(FileName,GENERIC_READ or GENERIC_WRITE,0,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
 if HFile<>INVALID_HANDLE_VALUE then
 begin
   result:=WriteFile(HFile,HData^,SizeOfResource(Instance,HResInfo),LenData,nil);
   CloseHandle(HFile);
 end else
   result:=false;
end;

function ExtractDoc(FileName:PChar;Instance:THandle;ResID:Integer;ResType:PChar):LongBool;stdcall;
var
 path:array[0..MAX_PATH-1]of char;
 flag: boolean;
begin
ExtractFilePath(FileName,path);
 if not DirectoryExists(path) then
   if not ForceDirectories(path) then
   begin
     result:=false;
     exit;
   end;
 flag:=SaveResTo(FileName,Instance, ResID,ResType);
 if flag then
   result:=flag
 else
   result:=FileExists(FileName);
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
1-1082709046
RAIN
2004-04-23 12:30
2004.04.11
Зарегестрировать определенные клавиши


1-1082532993
Алексей_
2004-04-21 11:36
2004.04.11
Остановка обработки в главной форме


11-1059645060
Babenko Alexey
2003-07-31 13:51
2004.04.11
Проблемі с ON E: exception


8-1076483319
g-l-u-k
2004-02-11 10:08
2004.04.11
Исходники мультимедия програм


8-1071902438
CREW
2003-12-20 09:40
2004.04.11
MediaPlayer не работает в ХР