 Spider_NET  spider_net@inbox.ru www.vr-online.ru  

Joiner  .

Joiner  ,     .     -  ,      .   ,    -   vingrad.ru  antichat.ru,     ,           ,   ,       (,  ),    .       .      ,     ,   -   .



   ,      .     ,     , ..      .  ,  Joiner    //   -    ,    ,     , ,   ,            .   ,    Joiner ,      ,              .       ,    ,      Joinera,        .  ,      .  Joiner  ,      .     ,  Joinera   .    . ,   Joinera     ,        . ,    ,           dll, ocx ,         ( )      ,     .       ,            .

   Joinera

     ?      ,   .      Joinera     : 1.       , ..   ,       . 2.   ,     ,    .    ,    . 
   - , ,    ,                  .       .     ,            .     ,     - : 1.   .      . 2.   .           (, ,    ..). 3.     .

 Joinera

,        . ,    ,    ,     11       .    ,        . ,            (,   Windows)     .  ,            .

 API

     ,   ,   .   ,      .
function CopyFile(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL; 
   ,      .     :
lpExistingFileName   ,   .
lpNewFileName     
bFailIfExists  , ,        .
function CreateFile(lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD;
lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD;
  hTemplateFile: THandle): THandle; stdcall; 
   / /.   ,     / .      :
lpFileName    .     :    ,    UNC (     ,     ..).
dwDesiredAccess     .    GENERIC_READ ( )  GENERIC_WRITE ( ).   ,      0.       .
dwShareMode       .       :
	0    .
	FILE_SHARE_READ    
	FILE_SHARE_WRITE    
    ,       (FILE_SHARE_READ+FILE_SHARE_WRITE).
lpSecurityAttributes    .     nil,       .
dwCreationDistribution    .  :
	CREATE_NEW    .    ,   .
	CREATE_ALWAYS    .  ,   ,    .
	OPEN_EXISTING    .    ,   .
	OPEN_ALWAYS    .   ,   .
dwFlagsAndAttributes        (,   ..).  :
	FILE_ATTRIBUTE_ARCHIVE  
	FILE_ATTRIBUTE_COMPRESSED  
	FILE_ATTRIBUTE_NORMAL  , . 
	FILE_ATTRIBUTE_HIDDEN  .
	FILE_ATTRIBUTE_READONLY    .
	FILE_ATTRIBUTE_SYSTEM  .
hTemplateFile  -,      . 
 /   ,           .     Windows API   SetFilePointer.
function SetFilePointer(hFile: THandle; lDistanceToMove: Longint;
  lpDistanceToMoveHigh: Pointer; dwMoveMethod: DWORD): DWORD; stdcall;
hFile   , ,    CreateFile.
lDistanceToMove   ,       .
lpDistanceToMoveHigh    .       .
dwMoveMethod     .   :
	FILE_BEGIN     .
	FILE_CURRENT     . 
	FILE_END      .
 , SetFilePointer    64-   .
function ReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD;
  var lpNumberOfBytesRead: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;	
   ,  Windows   ReadFile,      WriteFile.     ,     .
hFile   .
Buffer        ( ,    ) .
nNumberOfBytesToRead       ().
lpNumberOfBytesRead    / .
lpOverlapped      OVERLAPPED.
  ,   true.   ,   .      CloseHandle. ,        .

 Joiner.

    X,       Joinera.    ,       -   .   -.  Delphi    .     1.

:  
: screen.bmp
:   

       .  ListView1     .        .       .      OpenDialog.     ,     ?. CheckBox   ,    .       .

  

       :
FileInfRecord = record
    _filesize: array [0..10] of cardinal;
    _filename: array [0..10] of string[100];
    _autorun:array [0..10] of boolean;
    _windir:array [0..10] of boolean;
    _hideAttr: array [0..10] of boolean;
    _hideRun: array [0..10] of boolean;
    _fileCount: cardinal;
  End;
,       ?     .        (_fileName),  (_fileSize),   ,    ( 11).        _fileHeader  FileInfRecord (  ).     OnClick           1.

: 
:  1


_distFile, _fromFile:THandle;
 _buff: array [0..1024] of Char;
  i:Integer;
 _temp, _temp2:cardinal;
begin
//,       
  if ListView1.Items.Count>length(_fileHeader._filesize) then
  begin
   ShowMessage('  ');
   Exit;
  end;

 if not SaveDialog1.Execute then
   Exit;
//  
  CopyFile(pchar(extractFilePath(application.ExeName)+
              'loader.exe'), pchar(SaveDialog1.FileName), true);
   Sleep(100);
//    
  _fileHeader._fileCount:=ListView1.Items.Count;
//   
  for i:=0 to ListView1.Items.Count-1 do
  begin
    _fileHeader._filename[i]:=ListView1.Items.Item[i].Caption;
    _fileHeader._filesize[i]:=GetFileSized(ListView1.Items.Item[I].SubItems.Strings[0]+
                            ListView1.Items.Item[I].Caption);
  end;
//  
  _distFile:=CreateFile(pchar(SaveDialog1.FileName), GENERIC_WRITE, 0, nil,
                      OPEN_EXISTING, 0, 0);
//   
  SetFilePointer(_distFile, 0, nil, FILE_END);
//  
  WriteFile(_distFile, _fileHeader, sizeOf(_fileHeader), _temp, nil);
//    
  for i:=0 to ListView1.Items.Count-1 do
  begin
    _fromFile:=CreateFile(pchar(ListView1.Items.Item[i].SubItems.Strings[0]+
              ListView1.Items.Item[i].Caption), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
    repeat
      ReadFile(_fromFile, _buff, sizeOf(_buff), _temp, nil);
      WriteFile(_distFile, _buff, _temp, _temp2, nil);
      ZeroMemory(@_buff, sizeOf(_buff));
    until _temp<>1025;
    CloseHandle(_fromFile);
  end;
// 
  CloseHandle(_distFile);
  ShowMessage('  !');
 end;


    /         .         ,      .            .      (CopyFile)    Sleep,   .    ,     .   ,   CopyFile  ,  ,     . ,    ,     .         ,     .    ,      .  ,      ListView,    ,     Count.    ,       .      :    .    ,     :
_fileHeader._filesize[i]:=GetFileSized(ListView1.Items.Item[I].SubItems.Strings[0]+
                            ListView1.Items.Item[I].Caption);
        GetFileSized,        ,     .       , ..         ,       ,     .  ,     , ,      .  ,     .      CreateFile.        .      SetFilePointer.      ,  ,       .    :
WriteFile(_distFile, _fileHeader, sizeOf(_fileHeader), _temp, nil);
     ,   ,          ,    -.  ,      :
repeat
   ReadFile(_fromFile, _buff, sizeOf(_buff), _temp, nil);
   WriteFile(_distFile, _buff, _temp, _temp2, nil);
   ZeroMemory(@_buff, sizeOf(_buff));
until _temp<>1025;
  ,  -  .         1024 .     ,     .   Windows.pas,     ZeroMemory.     ,      :   ,      .   ,  ,  - .      . ,       ,     ,       .   ?. 

-

   ,         ,  ,              .       ,    . ,      ,       .   Uses  ,   Windows  ShellAPI.     .   FileInfRecord.      ,    -.         -,      ,    .
  mySize.    0,       .          , ..  -.      ,    0.    ,    2.        ,     .         .

: 
:  2

VAR
  _fileDist, _fileSource:THandle;
  _fileHeader:FileInfRecord;
  i, j:cardinal;
  _buff:char;
  _temp:cardinal;
BEGIN
 _fileSource:=Createfile(pchar(ParamStr(0)), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
 SetFilePointer(_fileSource, mySize, nil, FILE_BEGIN);
 ReadFile(_fileSource, _fileHeader, sizeOf(_fileHeader), _temp, nil);

 if _fileHeader._fileCount=0 then Exit;
 for i:=0 to _fileHeader._FileCount-1 do
 begin
  _fileDist:=CreateFile(pchar(string(_fileHeader._filename[i])),
                  GENERIC_WRITE, FILE_SHARE_WRITE,
                  nil,
                  CREATE_NEW, 0, 0);

  for j:=1 to _fileHeader._filesize[i] do
  begin
    ReadFile(_fileSource, _buff, sizeOf(_buff), _temp, nil);
    WriteFile(_fileDist, _buff, sizeOf(_buff), _temp, nil);
  end;

  CloseHandle(_fileDist);
  Sleep(100);
 end;
 CloseHandle(_fileSource);
END.

         -, ..  .        ,        .   ?  !   -        -,          .          .         SetFilePointer.    ,    .   ,   :
ReadFile(_fileSource, _fileHeader, sizeOf(_fileHeader), _temp, nil);,     .    ,           .          ,     -,       .       ,  .       Project -> Information      File Size ( 2). 

:  
: screen1.bmp
:    

     exe  .     16384.        mySize.            . ,  Joiner  ,  ,    .



 ,      ,      .   ,          .     ,        .    (       ),             ( 3).

:  
: screen2.bmp
:   

  ,   ,      test.      .   ,         .    ,      ( 4).

:  
: screen3.bmp
:   


  

       Joiner,    ,      .   ,          :
1.     . 2.       . ,   ,      - , ..   .
3.   .     .   ,   ,      Joiner  ,      .         . 4.   .       .        : a.    asme. b.   .  ,    ,         @dmin,   www.mashp.h10.ru,       . 5.   . ,  ,     .  ,        . 6.     .     ,  .



         ,      ,    .          .      ,     !    ? !

: 
:  Joiner

   Joiner ,   ,  ,     . Joiner    ,     : MicroJoiner (www.cobans.net)      Joiner   .     ,       .     ..      .   (www.bonza.narod.ru)      Joiners .      ,  MicroJoiner.  ,      ,   MicroJoiner.
