Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.049 c
1-1080080348
Tack83
2004-03-24 01:19
2004.04.11
Глюки при создании COM-клиента


14-1079698034
Kolyan
2004-03-19 15:07
2004.04.11
Про Ping


4-1075960605
Shi
2004-02-05 08:56
2004.04.11
Создан ли класс?


1-1080051069
ruslan_as
2004-03-23 17:11
2004.04.11
Помогите считать двоичный файл


3-1079013639
Лысый
2004-03-11 17:00
2004.04.11
Изменение записи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский