Главная страница
    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.042 c
6-1075456598
Morfeus
2004-01-30 12:56
2004.04.11
просмотр рабочего стола клиента на сервере


14-1082010626
Layner
2004-04-15 10:30
2004.04.11
Юристы! Ломятся менты в дверь, хотят видимо показания взять


1-1079950484
Aleksandr
2004-03-22 13:14
2004.04.11
Смешно, но не могу наладить показ итемов ListBox a в его хинте


14-1079596768
Leon Crom
2004-03-18 10:59
2004.04.11
Пасхальные яйца


7-1075961892
SHS
2004-02-05 09:18
2004.04.11
Как вывести в TrayClock (TrayClockWClass) время в своём формате?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский