T
testnet
Unregistered / Unconfirmed
GUEST, unregistred user!
unit TWriteMePas;
{
; ;功 ; ;能:向当前可执行文件写入数据
; ;使用方法:只要USES TWriteMePas,就可以引用WriteMe这个变量
; ; ; ; ; ; ;function TWriteMe.Read():string; 读数据
; ; ; ; ; ; ;procedure TWriteMe.Write(const atag:string); 写数据
; ;作 ; ;者:testnet
; ;备 ; ;注:我是从一篇相关的帖子上得到启发的,但忘了是哪篇,当时我只看了
; ; ; ; ; ; ; 一下,没太在意,大家可以先看看哪篇。有好的建议OR发现BUG请告诉我,谢谢!
}
interface
uses
; Classes,Windows, SysUtils;
type
; ;TWriteMe=class
; ; ; ; ; ; ; ;public
; ; ; ; ; ; ; ; ; function Read():string;
; ; ; ; ; ; ; ; ; procedure Write(const atag:string);
; ; ; ; ; ; ; ; ; constructor Create(); overload;
; ; ; ; ; ; ; ; ; destructor Destroy; override;
; ; ; ; ; ; ; ; ; function ;Enable():boolean;
; ; ; ; ; ; ; ;private
; ; ; ; ; ; ; ; ; FileSize:int64; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ; TagSize :integer;
; ; ; ; ; ; ; ; ; hfile:TFileStream;
; ; ; ; ; ; ; ; ; szSrc, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ; szDest ; ;: array[0..MAX_PATH] of char; ; ; ; ;
; ; ; ; ; ; ; ; ; szCmdLine : string;
; ; ; ; ; ; ; ; ; hProcess ;: THandle;
; ; ; ; ; ; ; ; ; SI ; ; ; ;: TStartupInfo;
; ; ; ; ; ; ; ; ; PI ; ; ; ;: TProcessInformation;
; ; ; ; ; ; ; ; ; FEnable ; :Boolean;
; ; ; ; ; ; ; ; ; procedure KillMe();
; ; ; ; ; ; ; ; ; procedure NoParameter();
; ; ; ; ; ; ; ; ; procedure HaveParameter();
; ; ; ; ; ; ;end;
var
; WriteMe :TWriteMe;
implementation
uses
; ShellApi;
procedure TWriteMe.KillMe;
var
; BatFile:TextFile;
begin
; ;AssignFile(BatFile,'Kill.bat');
; ;ReWrite(BatFile);
; ;try
; ; ;writeln(BatFile,'del ',ParamStr(0));
; ; ;Writeln(BatFile,'del ','Kill.bat');
; ;finally
; ; ;closeFile(BatFile);
; ;end;
; ;ShellExecute(0,'open','Kill.bat',nil,nil,0);
end;
procedure ;TWriteMe.NoParameter();
begin
; GetModuleFileName(0, szSrc, MAX_PATH);
; ;GetTempPath(MAX_PATH, szDest);
; ;GetTempFileName(szDest, 'Tmp', 0, szDest);
; ;CopyFile(szSrc, szDest, FALSE); ; ; ; ; ; ; ; ;
; ;hProcess := OpenProcess(SYNCHRONIZE,
; ; ; ; ; ; ; ; ; ; ; ; ; ;TRUE,
; ; ; ; ; ; ; ; ; ; ; ; ; ;GetCurrentProcessId); ;
; ;szCmdLine := Format('%s %d "%s"', [szDest, hProcess, szSrc]);
; ;FillChar(SI, SizeOf(SI), 0);
; ;SI.cb := SizeOf(SI);
; ;CreateProcess(nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;PChar(szCmdLine), ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;TRUE, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;NORMAL_PRIORITY_CLASS, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;SI, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;PI); ; ; ; ; ; ; ; ; ; ; ; ; ;
; ;CloseHandle(hProcess);
end;
procedure TWriteMe.HaveParameter();
begin
; ;FEnable:=true;
; ;hProcess := THANDLE(StrToInt(ParamStr(1)));
; ;WaitForSingleObject(hProcess, INFINITE); ; ; ;
; ;SetCurrentDirectory(PChar(paramstr(2)));
; ;CloseHandle(hProcess);
; hfile:=TFileStream.Create(paramstr(2),fmOpenReadWrite);
; ;if hFile<>nil then
; ; ; begin
; ; ; ; try
; ; ; ; ; hfile.Seek($80,soFromBeginning);
; ; ; ; ; hfile.Read(FileSize,sizeof(FileSize));
; ; ; ; ; if FileSize=0 then
; ; ; ; ; ; begin
; ; ; ; ; ; ; FileSize:=hfile.Size;
; ; ; ; ; ; ; hfile.Seek($80,soFromBeginning);
; ; ; ; ; ; ; hfile.Write(FileSize,sizeof(FileSize));
; ; ; ; ; ; end
; ; ; ; ; else
; ; ; ; ; ; begin
; ; ; ; ; ; end;
; ; ; ; finally
; ; ; ; ; hFile.Free ;
; ; ; ; end;
; ; ; end;
end;
function TWriteMe.Read():string;
begin
; hfile:=TFileStream.Create(paramstr(2),fmOpenReadWrite);
; ;if hFile<>nil then
; ; ; begin
; ; ; ; try
; ; ; ; ; hfile.Seek($90,soFromBeginning);
; ; ; ; ; hfile.Read(TagSize,sizeof(TagSize));
; ; ; ; ; if TagSize=0 then
; ; ; ; ; ; begin
; ; ; ; ; ; ; result:='';
; ; ; ; ; ; end
; ; ; ; ; else
; ; ; ; ; ; begin
; ; ; ; ; ; ; ;hfile.Seek($80,soFromBeginning);
; ; ; ; ; ; ; ;hfile.Read(FileSize,sizeof(FileSize));
; ; ; ; ; ; ; ;hFile.Seek(FileSize,soFromBeginning);
; ; ; ; ; ; ; ;setlength(Result,TagSize);
; ; ; ; ; ; ; ;hFile.Read(Result[1],TagSize);
; ; ; ; ; ; end;
; ; ; ; finally
; ; ; ; ; hFile.Free ;
; ; ; ; end;
; ; ; end;
end;
procedure TWriteMe.Write(const atag:string);
begin
; hFile:=TFileStream.Create(paramstr(2),fmOpenReadWrite);
; if hFile<>nil then
; begin
; ; try
; ; ; ;hFile.Seek($80,soFromBeginning);
; ; ; ;hFile.Read(FileSize,Sizeof(FileSize));
; ; ; ;hFile.Seek($90,soFromBeginning);
; ; ; ;TagSize:=length(atag);
; ; ; ;hFile.Write(TagSize,SizeOf(TagSize));
; ; ; ;hFile.Seek(FileSize,soFromBeginning);
; ; ; ;hFile.Write(atag[1],TagSize);
; ; finally
; ; ; hFile.Free;
; ; end;
; end;
end;
constructor TWriteMe.Create();
begin
; inherited Create();
; FEnable:=false;
; ; ; if ParamCount=0 then
; ; ; ; NoParameter
; ; ; else
; ; ; ; HaveParameter;
end;
destructor TWriteMe.Destroy;
begin
; inherited Destroy;
end;
function TWriteMe.Enable:Boolean;
begin
; result:=FEnable;
end;
initialization
; WriteMe:=TWriteMe.Create;
; if not WriteMe.Enable then
; ; halt;
finalization
; if WriteMe.Enable then
; ; WriteMe.KillMe;
; WriteMe.Free;
end.
{
; ;功 ; ;能:向当前可执行文件写入数据
; ;使用方法:只要USES TWriteMePas,就可以引用WriteMe这个变量
; ; ; ; ; ; ;function TWriteMe.Read():string; 读数据
; ; ; ; ; ; ;procedure TWriteMe.Write(const atag:string); 写数据
; ;作 ; ;者:testnet
; ;备 ; ;注:我是从一篇相关的帖子上得到启发的,但忘了是哪篇,当时我只看了
; ; ; ; ; ; ; 一下,没太在意,大家可以先看看哪篇。有好的建议OR发现BUG请告诉我,谢谢!
}
interface
uses
; Classes,Windows, SysUtils;
type
; ;TWriteMe=class
; ; ; ; ; ; ; ;public
; ; ; ; ; ; ; ; ; function Read():string;
; ; ; ; ; ; ; ; ; procedure Write(const atag:string);
; ; ; ; ; ; ; ; ; constructor Create(); overload;
; ; ; ; ; ; ; ; ; destructor Destroy; override;
; ; ; ; ; ; ; ; ; function ;Enable():boolean;
; ; ; ; ; ; ; ;private
; ; ; ; ; ; ; ; ; FileSize:int64; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ; TagSize :integer;
; ; ; ; ; ; ; ; ; hfile:TFileStream;
; ; ; ; ; ; ; ; ; szSrc, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ; szDest ; ;: array[0..MAX_PATH] of char; ; ; ; ;
; ; ; ; ; ; ; ; ; szCmdLine : string;
; ; ; ; ; ; ; ; ; hProcess ;: THandle;
; ; ; ; ; ; ; ; ; SI ; ; ; ;: TStartupInfo;
; ; ; ; ; ; ; ; ; PI ; ; ; ;: TProcessInformation;
; ; ; ; ; ; ; ; ; FEnable ; :Boolean;
; ; ; ; ; ; ; ; ; procedure KillMe();
; ; ; ; ; ; ; ; ; procedure NoParameter();
; ; ; ; ; ; ; ; ; procedure HaveParameter();
; ; ; ; ; ; ;end;
var
; WriteMe :TWriteMe;
implementation
uses
; ShellApi;
procedure TWriteMe.KillMe;
var
; BatFile:TextFile;
begin
; ;AssignFile(BatFile,'Kill.bat');
; ;ReWrite(BatFile);
; ;try
; ; ;writeln(BatFile,'del ',ParamStr(0));
; ; ;Writeln(BatFile,'del ','Kill.bat');
; ;finally
; ; ;closeFile(BatFile);
; ;end;
; ;ShellExecute(0,'open','Kill.bat',nil,nil,0);
end;
procedure ;TWriteMe.NoParameter();
begin
; GetModuleFileName(0, szSrc, MAX_PATH);
; ;GetTempPath(MAX_PATH, szDest);
; ;GetTempFileName(szDest, 'Tmp', 0, szDest);
; ;CopyFile(szSrc, szDest, FALSE); ; ; ; ; ; ; ; ;
; ;hProcess := OpenProcess(SYNCHRONIZE,
; ; ; ; ; ; ; ; ; ; ; ; ; ;TRUE,
; ; ; ; ; ; ; ; ; ; ; ; ; ;GetCurrentProcessId); ;
; ;szCmdLine := Format('%s %d "%s"', [szDest, hProcess, szSrc]);
; ;FillChar(SI, SizeOf(SI), 0);
; ;SI.cb := SizeOf(SI);
; ;CreateProcess(nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;PChar(szCmdLine), ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;TRUE, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;NORMAL_PRIORITY_CLASS, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;SI, ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ;PI); ; ; ; ; ; ; ; ; ; ; ; ; ;
; ;CloseHandle(hProcess);
end;
procedure TWriteMe.HaveParameter();
begin
; ;FEnable:=true;
; ;hProcess := THANDLE(StrToInt(ParamStr(1)));
; ;WaitForSingleObject(hProcess, INFINITE); ; ; ;
; ;SetCurrentDirectory(PChar(paramstr(2)));
; ;CloseHandle(hProcess);
; hfile:=TFileStream.Create(paramstr(2),fmOpenReadWrite);
; ;if hFile<>nil then
; ; ; begin
; ; ; ; try
; ; ; ; ; hfile.Seek($80,soFromBeginning);
; ; ; ; ; hfile.Read(FileSize,sizeof(FileSize));
; ; ; ; ; if FileSize=0 then
; ; ; ; ; ; begin
; ; ; ; ; ; ; FileSize:=hfile.Size;
; ; ; ; ; ; ; hfile.Seek($80,soFromBeginning);
; ; ; ; ; ; ; hfile.Write(FileSize,sizeof(FileSize));
; ; ; ; ; ; end
; ; ; ; ; else
; ; ; ; ; ; begin
; ; ; ; ; ; end;
; ; ; ; finally
; ; ; ; ; hFile.Free ;
; ; ; ; end;
; ; ; end;
end;
function TWriteMe.Read():string;
begin
; hfile:=TFileStream.Create(paramstr(2),fmOpenReadWrite);
; ;if hFile<>nil then
; ; ; begin
; ; ; ; try
; ; ; ; ; hfile.Seek($90,soFromBeginning);
; ; ; ; ; hfile.Read(TagSize,sizeof(TagSize));
; ; ; ; ; if TagSize=0 then
; ; ; ; ; ; begin
; ; ; ; ; ; ; result:='';
; ; ; ; ; ; end
; ; ; ; ; else
; ; ; ; ; ; begin
; ; ; ; ; ; ; ;hfile.Seek($80,soFromBeginning);
; ; ; ; ; ; ; ;hfile.Read(FileSize,sizeof(FileSize));
; ; ; ; ; ; ; ;hFile.Seek(FileSize,soFromBeginning);
; ; ; ; ; ; ; ;setlength(Result,TagSize);
; ; ; ; ; ; ; ;hFile.Read(Result[1],TagSize);
; ; ; ; ; ; end;
; ; ; ; finally
; ; ; ; ; hFile.Free ;
; ; ; ; end;
; ; ; end;
end;
procedure TWriteMe.Write(const atag:string);
begin
; hFile:=TFileStream.Create(paramstr(2),fmOpenReadWrite);
; if hFile<>nil then
; begin
; ; try
; ; ; ;hFile.Seek($80,soFromBeginning);
; ; ; ;hFile.Read(FileSize,Sizeof(FileSize));
; ; ; ;hFile.Seek($90,soFromBeginning);
; ; ; ;TagSize:=length(atag);
; ; ; ;hFile.Write(TagSize,SizeOf(TagSize));
; ; ; ;hFile.Seek(FileSize,soFromBeginning);
; ; ; ;hFile.Write(atag[1],TagSize);
; ; finally
; ; ; hFile.Free;
; ; end;
; end;
end;
constructor TWriteMe.Create();
begin
; inherited Create();
; FEnable:=false;
; ; ; if ParamCount=0 then
; ; ; ; NoParameter
; ; ; else
; ; ; ; HaveParameter;
end;
destructor TWriteMe.Destroy;
begin
; inherited Destroy;
end;
function TWriteMe.Enable:Boolean;
begin
; result:=FEnable;
end;
initialization
; WriteMe:=TWriteMe.Create;
; if not WriteMe.Enable then
; ; halt;
finalization
; if WriteMe.Enable then
; ; WriteMe.KillMe;
; WriteMe.Free;
end.