Exenin sonuna eklemek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Exenin sonuna eklemek
Merhaba
Resource ile exeye bilgi eklemek mümkün ama ben exenin sonuna sadece bir metin eklemek istiyorum. Burada çalışma sayısını tutacağım.
Dos zamanında yapan foksiyonum var torryde birde unite buldum ama bana gereken basit iş gören bir fonksiyon
Saygılar
Resource ile exeye bilgi eklemek mümkün ama ben exenin sonuna sadece bir metin eklemek istiyorum. Burada çalışma sayısını tutacağım.
Dos zamanında yapan foksiyonum var torryde birde unite buldum ama bana gereken basit iş gören bir fonksiyon
Saygılar
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
Re: Exenin sonuna eklemek
ExeMod.pas dosyası vardı bu konuda forumda olması lazım
Re: Exenin sonuna eklemek
uniti kopyaya yazboz.pas olarak kaydet projene ekle.
yazmak için
okumak için
yazboz uniti.
Kolay gelsin.
yazmak için
Kod: Tümünü seç
var
str: string;
yz: TYazBoz;
begin
yz := TYazBoz.Create(pchar('c:\a.exe'));
str := 'ali-veli';
yz.SetYazBoz(pchar(str)^, length(str));
Kod: Tümünü seç
var
dstr: string;
yz: TYazBoz;
begin
dstr := ParamStr(0);
yz := TYazBoz.Create(dstr);
SetLength(dstr, yz.YazBozSize);
yz.GetYazBoz(PChar(dstr)^);
showmessage(dstr);
yazboz uniti.
Kod: Tümünü seç
unit YazBoz;
interface
type
TYazBoz = class(TObject)
private
fFileName: string;
fOldFileMode: Integer;
fFile: File;
procedure Open(Mode: Integer);
procedure Close;
public
constructor Create(const FileName: string);
function HasYazBoz: Boolean;
function YazBozSize: Integer;
procedure SetYazBoz(const Data; const DataSize: Integer);
procedure GetYazBoz(var Data);
procedure RemoveYazBoz;
end;
implementation
uses
ActiveX;
type
TYazBozFooter = packed record
WaterMark: TGUID;
ExeSize: LongInt;
DataSize: LongInt;
end;
const
cWaterMarkGUID: TGUID =
'{9FABA105-EDA8-45C3-89F4-369315A947EB}';
cReadOnlyMode = 0;
cReadWriteMode = 2;
procedure InitFooter(out Footer: TYazBozFooter);
begin
FillChar(Footer, SizeOf(Footer), 0);
Footer.WaterMark := cWaterMarkGUID;
end;
function ReadFooter(var F: File;
out Footer: TYazBozFooter): Boolean;
var
FileLen: Integer;
begin
FileLen := FileSize(F);
if FileLen > SizeOf(Footer) then
begin
Seek(F, FileLen - SizeOf(Footer));
BlockRead(F, Footer, SizeOf(Footer));
end
else
FillChar(Footer, SizeOf(Footer), 0);
Result := IsEqualGUID(Footer.WaterMark, cWaterMarkGUID);
end;
procedure TYazBoz.Close;
begin
CloseFile(fFile);
FileMode := fOldFileMode;
end;
constructor TYazBoz.Create(const FileName: string);
begin
inherited Create;
fFileName := FileName;
end;
procedure TYazBoz.GetYazBoz(var Data);
var
Footer: TYazBozFooter;
begin
Open(cReadOnlyMode);
try
if ReadFooter(fFile, Footer)
and (Footer.DataSize > 0) then
begin
Seek(fFile, Footer.ExeSize);
BlockRead(fFile, Data, Footer.DataSize);
end;
finally
Close;
end;
end;
function TYazBoz.HasYazBoz: Boolean;
begin
Result := YazBozSize > 0;
end;
procedure TYazBoz.Open(Mode: Integer);
begin
fOldFileMode := FileMode;
AssignFile(fFile, fFileName);
FileMode := Mode;
Reset(fFile, 1);
end;
function TYazBoz.YazBozSize: Integer;
var
Footer: TYazBozFooter;
begin
Result := 0;
Open(cReadOnlyMode);
try
if ReadFooter(fFile, Footer) then
Result := Footer.DataSize;
finally
Close;
end;
end;
procedure TYazBoz.RemoveYazBoz;
var
PLSize: Integer;
FileLen: Integer;
begin
PLSize := YazBozSize;
if PLSize > 0 then
begin
Open(cReadWriteMode);
FileLen := FileSize(fFile);
try
Seek(fFile, FileLen - PLSize - SizeOf(TYazBozFooter));
Truncate(fFile);
finally
Close;
end;
end;
end;
procedure TYazBoz.SetYazBoz(const Data;
const DataSize: Integer);
var
Footer: TYazBozFooter;
begin
RemoveYazBoz;
if DataSize > 0 then
begin
Open(cReadWriteMode);
try
InitFooter(Footer);
Footer.ExeSize := FileSize(fFile);
Footer.DataSize := DataSize;
Seek(fFile, Footer.ExeSize);
BlockWrite(fFile, Data, DataSize);
BlockWrite(fFile, Footer, SizeOf(Footer));
finally
Close;
end;
end;
end;
end.
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...
http://www.tcct.us
Re: Exenin sonuna eklemek
io error 32 veriyor ...
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: Exenin sonuna eklemek
veriyi çalışan dosya üzerine yazdırmaya çalışmayın.iki ayrı dosyanız olmalı.
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...
http://www.tcct.us
Re: Exenin sonuna eklemek
Windows çalıştırılan exe lerin değiştirilmesine izin vermez. Çalışmakta olan exeleri değiştirmeye karşı kilitler.
Re: Exenin sonuna eklemek
benim yapmam gereken bu ama. sağlık olsun. başka bir yol bulacağız.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
NTFS Alternate Data Streams (ADS)
Selamlar,
Aşağıdaki kodlar sanırım tam istediğin kodlar. EXE çalışırken yazılıyor. Aslına bakarsanız EXE'nin arkasına eklemiyor. Windows bunun için ayrı bir dosya sistemi kullanıyor. Windows'un NTFS Alternate Data Streams (ADS) 'dir. Detaylı bilgi için tıklayınız.
** Ancak hiç deneme ihtiyacı duymadım, EXE yi bir başka PC ye kopyalayınca bilgilerde kopyalanıyor mu hiç bilmiyorum.
Windows XP, Vista ve Win7 de bunlar çalışır. Windows bir programı çalıştırmadan önce Zone.Identifier 'e bakar. Eğer Zone=3 ise bu dosya internetten gelmiştir. Zaten bu dosyayı çift tıklarsanız, Windows bu programın internetten geldiğini belirten bir onay penceresi çıkartacaktır.
Bir örnek:yazdığımızda, ADS oluşturulmamışsa File not found mesajını alırız. Eğer Zone.Identifier varsa bize bilgileri gösterir:gibi bir şey karşımıza çıkar. Bilgi olsun diye diğer ZoneId 'lerin anlamlarını da veriyorum.
Ben örneğimde IniFile ile bilgilere ulaşıp yazdım. Ama dilerseniz AssignFile, Reset, Rewrite vb. komutlarla da ulaşabilirsiniz. İhtiyacınız olduğunu düşündüğüm kodlar aşağıdadır. Umarım faydalı olur.
Şimdi de kontrol edelim
ya da
Sonuç:
Aşağıdaki kodlar sanırım tam istediğin kodlar. EXE çalışırken yazılıyor. Aslına bakarsanız EXE'nin arkasına eklemiyor. Windows bunun için ayrı bir dosya sistemi kullanıyor. Windows'un NTFS Alternate Data Streams (ADS) 'dir. Detaylı bilgi için tıklayınız.
** Ancak hiç deneme ihtiyacı duymadım, EXE yi bir başka PC ye kopyalayınca bilgilerde kopyalanıyor mu hiç bilmiyorum.
Windows XP, Vista ve Win7 de bunlar çalışır. Windows bir programı çalıştırmadan önce Zone.Identifier 'e bakar. Eğer Zone=3 ise bu dosya internetten gelmiştir. Zaten bu dosyayı çift tıklarsanız, Windows bu programın internetten geldiğini belirten bir onay penceresi çıkartacaktır.
Bir örnek:
Kod: Tümünü seç
C:\>more < inettengelen.exe:Zone.Identifier
Kod: Tümünü seç
[ZoneTransfer]
ZoneId=3
Kod: Tümünü seç
Zone= -1 //NoZone
Zone= 0 //MyComputer
Zone= 1 //Intranet
Zone= 2 //Trusted
Zone= 3 //Internet
Zone= 4 //Untrusted
Kod: Tümünü seç
Uses Windows, Forms, SysUtils, IniFiles;
.
.
.
procedure TForm1.FormCreate(Sender: TObject);
var
ini : TIniFile;
fn : string;
d : TDate;
i : Integer;
begin
fn := Application.ExeName + ':gizlibilgiler';
ini := TIniFile.Create(fn);
if not ini.SectionExists('lisans') then
begin
// ilk defa kuruluyor ve gizli bilgileri oluşturuyoruz.
ini.WriteDate('lisans', 'ilkkurulum', Now);
ini.WriteDate('lisans', 'sonkullanimtarihi', Now + 15); // 15 gün
ini.WriteInteger('lisans', 'calistirmasayisi', 1);
ini.WriteString('lisans', 'lisanssahibi', 'murat dicle');
end
else
begin
d := ini.ReadDate('lisans', 'sonkullanimtarihi', StrToDate('01.01.2000'));
if (Now - d) > 15 then Halt(0); // Son kullanım tarihini geçmiş.
i := ini.ReadInteger('lisans', 'calistirmasayisi', 1);
i := i + 1;
ini.WriteInteger('lisans', 'calistirmasayisi', i);
end;
FreeAndNil(ini);
end;
Kod: Tümünü seç
C:\projeler>more < form1.exe:gizlibilgiler
Kod: Tümünü seç
C:\projeler>notepad form1.exe:gizlibilgiler
Kod: Tümünü seç
[lisans]
ilkkurulum=03.11.2011
sonkullanimtarihi=18.11.2011
calistirmasayisi=2
lisanssahibi=murat dicle