Форум: "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