salvar informações dentro de um executavel.
- caros colegas, estou montando um projeto que nao utiliza banco de dados.
- bom pra começar, no formulario principal, tenho um ListBox, onde poderei incluir dados, mas gostaria que quando incluisse esses dados no meu ListBox e clicasse no botao ´SALVAR´, o programa entendesse e salvasse essas informações dentro do executável, tipo o programa keySpy faz, para quem conhece ele...
Abraços!!
- bom pra começar, no formulario principal, tenho um ListBox, onde poderei incluir dados, mas gostaria que quando incluisse esses dados no meu ListBox e clicasse no botao ´SALVAR´, o programa entendesse e salvasse essas informações dentro do executável, tipo o programa keySpy faz, para quem conhece ele...
Abraços!!
Mahdak
Curtidas 0
Respostas
Weber
28/07/2004
Não é possivel salvar no executavel, o que você pode fazer é salvar em um arquivo texto ou no próprio registro do windows.
GOSTEI 0
Rogerio_amorim
28/07/2004
caro colega japa, esse negócio de salvar em executável não existe !
Rogerio Amorim
Rogerio Amorim
GOSTEI 0
Otto
28/07/2004
:idea: [color=blue:9943970faa][url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=16976]Saiba como obter resposta rápida..[/url][/color:9943970faa]
:idea: [color=blue:9943970faa]Leia sempre [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta.[/url][/color:9943970faa]
:idea: [color=blue:9943970faa]Use sempre o Link [url=http://delphiforum.icft.com.br/forum/search.php][img:9943970faa]http://delphiforum.icft.com.br/forum/templates/subSilver/images/icon_mini_search.gif[/img:9943970faa] Pesquisar[/url] no topo da Página.[/color:9943970faa]
aproveitando a dica do nosso amigo weber, segue uma unit que trabalha com um listbox que grava os itens em um arquivo txt..
:idea: [color=blue:9943970faa]Leia sempre [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta.[/url][/color:9943970faa]
:idea: [color=blue:9943970faa]Use sempre o Link [url=http://delphiforum.icft.com.br/forum/search.php][img:9943970faa]http://delphiforum.icft.com.br/forum/templates/subSilver/images/icon_mini_search.gif[/img:9943970faa] Pesquisar[/url] no topo da Página.[/color:9943970faa]
aproveitando a dica do nosso amigo weber, segue uma unit que trabalha com um listbox que grava os itens em um arquivo txt..
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Arq : TextFile;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
AssignFile(Arq,´Arq.txt´);
Append(Arq);
WriteLN(Arq,edit1.text);
CloseFile(Arq);
edit1.Clear;
Edit1.SetFocus;
// grava no arquivo txt o texto que ta no edit
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Nome : String;
begin
ListBox1.Clear;
AssignFile(Arq,´Arq.txt´);
Reset(Arq); // abre o arquivo
While Not Eof(Arq) Do
Begin
ReadLN(Arq, Nome);
ListBox1.Items.Add(Nome);
End;
CloseFile(Arq);
// botão que carrega os dados da lista
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
If not(FileExists(Application.GetNamePath+´Arq.txt´)) then // se o arquivos nao exitir
begin
AssignFile(Arq, Application.GetNamePath+´Arq.txt´);
Rewrite(Arq); // re-crie o arquivo.
end;
end;
end.GOSTEI 0
Vinicius2k
28/07/2004
caro colega japa, esse negócio de salvar em executável não existe !
Não é possivel salvar no executavel...
É obvio que existem formas de se salvar resources (Bitmap, Icon, RCData - Texto) em executáveis e DLLs... a única restrição é que o arquivo não pode estar em uso, então um executável não consegue gravar em si próprio...
Isso pode ser feito através da API do Windows com as funções BeginUpdateResource, UpdateResource e EndUpdateResouce... O único problema destas funções é que não funcionam corretamente em Win9x, então o melhor é usar as funções ´clones´ da madRes (www.madshi.net) que funcionam em todas as plataformas Windows...
A questão não é se é possível ou não, mas se o colega deve fazer isso, pois além de bastante trabalhoso é lento comparando com a leitura de um arquivo texto... então sugiro que use a forma orientada pelo oTTo...
T+
GOSTEI 0
Rômulo Barros
28/07/2004
É obvio que existem formas de se salvar resources (Bitmap, Icon, RCData - Texto) em executáveis e DLLs... a única restrição é que o arquivo não pode estar em uso, então um executável não consegue gravar em si próprio...
1 - Eu posso ´infectar´ executáveis(word,excel..)?
2 - Se eu souber dos métodos que o executável possui, eu posso chamar um desses métodos através de uma string? (Como já foi discutido aqui no fórum?)
:?: :?: :?: :?: :?: :?: :?:
GOSTEI 0
Vinicius2k
28/07/2004
U.I,
1 - Creio que sim, mas não utilizando as próprias funções da API que estão limitadas à resources... seria um comportamento parecido com o de um vírus? se for isso, eu não sei e creio que já envolveria edição direta do código ASM do PE...
2 - Isto eu não sei.
T+
1 - Creio que sim, mas não utilizando as próprias funções da API que estão limitadas à resources... seria um comportamento parecido com o de um vírus? se for isso, eu não sei e creio que já envolveria edição direta do código ASM do PE...
2 - Isto eu não sei.
T+
GOSTEI 0
Mahdak
28/07/2004
[quote:0e63a8b194=´rogerio_amorim´]caro colega japa, esse negócio de salvar em executável não existe !
Não é possivel salvar no executavel...
É obvio que existem formas de se salvar resources (Bitmap, Icon, RCData - Texto) em executáveis e DLLs... a única restrição é que o arquivo não pode estar em uso, então um executável não consegue gravar em si próprio...
Isso pode ser feito através da API do Windows com as funções BeginUpdateResource, UpdateResource e EndUpdateResouce... O único problema destas funções é que não funcionam corretamente em Win9x, então o melhor é usar as funções ´clones´ da madRes (www.madshi.net) que funcionam em todas as plataformas Windows...
A questão não é se é possível ou não, mas se o colega deve fazer isso, pois além de bastante trabalhoso é lento comparando com a leitura de um arquivo texto... então sugiro que use a forma orientada pelo oTTo...
T+[/quote:0e63a8b194]
--------------------------------
OK, mas vc poderia me dar um exemplo de como usar essas funções ´clones´ da MadRes, pois minha intenção relamente é deixar que executavel sirva como seu proprio banco de dados...
--------------------------------
abraços!
Japa.
GOSTEI 0
Vinicius2k
28/07/2004
Japa,
Primeiramente, baixe e instale o pacote MadCollection ( www.madshi.net )... exemplifico abaixo o uso das funções lendo e gravando em uma DLL (mesmo procedimento para .EXE)... mas, honestamente, não sei se vc vai conseguir o fazer o que pretende, pois um exe não conseguirá gravar nele próprio e vc apenas grava e le strings como num arquivo .ini, não tendo nenhum recurso adicional como num banco de dados...
T+
Primeiramente, baixe e instale o pacote MadCollection ( www.madshi.net )... exemplifico abaixo o uso das funções lendo e gravando em uma DLL (mesmo procedimento para .EXE)... mas, honestamente, não sei se vc vai conseguir o fazer o que pretende, pois um exe não conseguirá gravar nele próprio e vc apenas grava e le strings como num arquivo .ini, não tendo nenhum recurso adicional como num banco de dados...
uses madRes; procedure LerRecurso; var ResData: HGLOBAL; ResInfo: HRSRC; Recurso: String; hDLLRecurso: THandle; begin hDLLRecurso:= LoadLibrary(´NOME_DA_DLL.DLL´); try ResInfo:= FindResource(hDLLRecurso, ´NOME_DO_RECURSO´, RT_RCDATA); if ResInfo <> 0 then begin ResData:= LoadResource(hDLLRecurso, ResInfo); if ResData <> 0 then try Recurso:= PChar(LockResource(ResData)); UnlockResource(ResData); finally FreeResource(ResData); end; end; finally FreeLibrary(hDLLRecurso); end; // neste ponto a string presente na DLL está armazenada // na variável "Recurso" end; procedure GravarRecurso; var hDLLRecurso: DWord; Recurso: String; begin Recurso:= ´Gravei este texto na DLL´; hDLLRecurso:= BeginUpdateResourceW(´NOME_DA_DLL.DLL´, False); if hDLLRecurso <> 0 then try UpdateResourceW(hDLLRecurso, PWideChar(RT_RCDATA), ´NOME_DO_RECURSO´, 0, Pointer(Recurso), Length(Recurso)); finally EndUpdateResourceW(hDLLRecurso, False); end; // neste ponto o valor atribuido à variável Recurso foi gravado na DLL. end;
T+
GOSTEI 0
Beppe
28/07/2004
[quote:8365403f8e=´Undeclared Identifier´]2 - Se eu souber dos métodos que o executável possui, eu posso chamar um desses métodos através de uma string? (Como já foi discutido aqui no fórum?)[/quote:8365403f8e]
Da mesma forma como uma DLL, desde que vc exporte as funções...mas isto não é uma prática comum, mas perfeitamente possível, entretanto, o Windows não faz distinção.
Da mesma forma como uma DLL, desde que vc exporte as funções...mas isto não é uma prática comum, mas perfeitamente possível, entretanto, o Windows não faz distinção.
GOSTEI 0
Rômulo Barros
28/07/2004
[quote:b9405261a5=´Undeclared Identifier´]2 - Se eu souber dos métodos que o executável possui, eu posso chamar um desses métodos através de uma string? (Como já foi discutido aqui no fórum?)
Da mesma forma como uma DLL, desde que vc exporte as funções...mas isto não é uma prática comum, mas perfeitamente possível, entretanto, o Windows não faz distinção.[/quote:b9405261a5]
Beleza. Valew a todos !!!!
É obvio que existem formas de se salvar resources (Bitmap, Icon, RCData - Texto) em executáveis e DLLs... a única restrição é que o arquivo não pode estar em uso, então um executável não consegue gravar em si próprio...
mahdak, no seu caso, acho q vc poder salvar os dados em um arquivo temporário (.txt ou .ini) e, após o encerramento do seu executável, vc poderá invocar outro executável que irá ler o arquivo temporário e salvar os dados no executável anterior, uma vez q este não irá mais estar ativado.
GOSTEI 0