把ini文件以资源方式加入exe中,运行exe时,不释放这个ini文件,而是直接进行读写操作。
程序运行后每隔一秒向ini中写入字符串,后写入的字符串覆盖掉先前写入的。
程序启动时,能读取这个ini文件中最后一次写入的字符串。由于程序在运行中,往自身的资源文件ini文件写入字符串,这样的代码,没有写过,发个帖请教加学习!
给出代码者200分独得
如果谁有此代码,请帮忙发一份。
程序运行后每隔一秒向ini中写入字符串,后写入的字符串覆盖掉先前写入的。
程序启动时,能读取这个ini文件中最后一次写入的字符串。由于程序在运行中,往自身的资源文件ini文件写入字符串,这样的代码,没有写过,发个帖请教加学习!
给出代码者200分独得
如果谁有此代码,请帮忙发一份。
解决方案 »
- 问题来啦,截取字符串,网页源码中的字符串截取问题。
- 祝大家新年快乐
- delphi 得idftp.put方法能否上传大于2G得文件?
- 帮朋友问2,求程序算法原码??
- 小弟做的Delphi7程序为什么不能在别的机器上运行啊?在线等!
- 关于作用域的问题
- 如何实现DOS命令所完成的功能,答完就给分!!!
- 怎样复制表结构?
- delphi复制程序问题
- 3.可恨的memo.lines.string[1]:='xxxx';为什么赋值之后没变化?我用memo.lines.string[0]:='xxxx'就好用.怎么对第一行的第十个字操作呢?怎么对第二行操作呢?2个问题全答上来20分以上。有信用
- Delphi keybd_event方法模拟按下冒号(:)和反斜杠(\)
- 怎么安装DosMove控件?
从功能来说,ini在外部也是一样的效果
你可以考虑Dump方法!这应该是可行的,但难度很大,应该是五星级的!
不用这个方法,可能只能用副本来完成。
http://www.2ccc.com/article.asp?articleid=578
Windows,
Classes,
Sysutils,
TlHelp32,
Forms,
Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} Var
s: string;
a: byte;
Handle: THandle;
Found: boolean;
Lppe: TProcessEntry32;
begin
s:='';
a:=1;
while ParamStr(a)<>'' do
begin
s:=s+ParamStr(a)+' ';
inc(a);
end;
if s<>'' then
begin
Handle:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
lppe.dwSize:=Sizeof(TProcessEntry32);
Found:=Process32First(Handle,Lppe);
while Found do
begin
if pos(Lppe.szExeFile,s)<>0 then
TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, True,
Lppe.th32ProcessID),0);
Found:= Process32Next(Handle,Lppe);
end;
CloseHandle(Handle);
while FileExists(s) do DeleteFile(s);
CopyFile(PChar(ParamStr(0)),PChar(s),True);
winexec(PChar(s),SW_SHOW);
exit;
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end. **************************************************** unit Unit1; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
TempName: string; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject);
var
Sr: TSearchRec;
size : Longint;
begin
FindFirst(ParamStr(0),$27,Sr);
size:=Sr.Size;
FindClose(Sr);
StatusBar1.SimpleText:='本程序大小为 '+IntToStr(size)+' 字节';
end; procedure TForm1.Button1Click(Sender: TObject);
var
Dir: PChar;
Ch: Array[0..3] of Char;
Stream1,Stream2: TMemoryStream;
begin
GetMem(Dir,254);
GetTempPath(254, Dir);
TempName:=StrPas(Dir)+'o.o.0.o.o.exe';
CopyFile(PChar(ParamStr(0)),PChar(TempName),False);
Stream1:=TMemoryStream.Create;
Stream2:=TMemoryStream.Create;
Stream1.LoadFromFile(TempName);
//在尾部加入4个随机字节
Randomize;
Ch[0]:=Chr(Random(256));
Ch[1]:=Chr(Random(256));
Ch[2]:=Chr(Random(256));
Ch[3]:=Chr(Random(256));
Stream1.Seek(0,soFromEnd);
Stream1.Write(Ch,4);
//修改偏移48的一个字节,记录程序运行次数
Stream1.Seek(0,soFromBeginning);
Stream2.CopyFrom(Stream1,48);
Stream1.Seek(48,soFromBeginning);
Stream1.Read(Ch,1);
Ch[0]:=Chr(1+Ord(Ch[0]));
Stream2.Write(Ch,1);
Stream1.Seek(49,soFromBeginning);
Stream2.CopyFrom(Stream1,Stream1.Size-49);
Stream2.SaveToFile(TempName);
Stream1.Free;
Stream2.Free;
FreeMem(Dir);
repeat Close Until FileExists(TempName);
end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WinExec(PChar(TempName+' '+ParamStr(0)), SW_SHOWNORMAL);
end; end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Timer1: TTimer;
Edit1: TEdit;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
m,s:integer;
implementation{$R *.dfm}procedure TForm1.Timer1Timer(Sender: TObject);
begin
s:=s-1;
if s=-1 then
begin
s:=59;
m:=m-1;
if m=-1 then m:=59;
end;
Edit1.Text:=inttostr(m)+':'+inttostr(s);
Edit1.SelLength:=0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
m:=120;s:=0;
end;
end.
其实,就是每隔一秒中,把edit1中的字符串写入资源文件INI中,程序重新启动时,读出INI中的字符串,替换m和s。要求:ini必须作为资源文件存在,且不能释放出来。
如果直接修改有难度的话,可以考虑其它方式,但窗体不能闪。
myini.ini格式为:
[timer]
m=120;
s=0;
1) 将INI 保存在某一特别(即是非常规)的路径中;
2) 将变量保存在注册表;
3) 将变量保存在数据库;
不过看楼主的要求应该是想避免别人改变或者读取ini文件,其实有很多方法可以实现,把ini加密保存就是比较简单实用的方法,不一定要把它保存在自己体内。
这个东东不就是在资源文件中存的吗.要是你能做上面的,你换一个Memo,visible false的. 内容就是你的ini.