GARANTIR DESCONTO

Fórum executar aplicativo em delphi toda vez que ligar O PC #257269

04/11/2004

0

Senhores , preciso que , ao ligar o Pc , Um aplicativo seje Executado, e no fim voltar ao Windows..Isto é devido pq preciso de fazer atualizaçoes diárais e Independentes..
Obrigado


Marco Salles

Marco Salles

Responder

Posts

04/11/2004

Gilvanj

Não basta colocar apenas na pasta Inicializar do menu iniciar ?


Responder

Gostei + 0

05/11/2004

Oscar Candido

Esse código eu peguei num daqueles arquivos de dicas, espero que seja útil:
uses registry;
var reg:TRegIniFile;
procedure TForm1.FormCreate(Sender: TObject);
var
s,s2:string;
begin
Reg:=TRegIniFile.Create(´LloydSoft´);
{HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run}
S:=ExtractFileDir(Application.ExeName);
S2:=ExtractFileName(Application.ExeName);
S:=S+´\´+S2;
reg.RootKey:=HKEY_USERS;
reg.Openkey (´\.DEFAULT\Software\Microsoft\Windows\CurrentVersion´,false);
reg.WriteString(´Run´, ´Logo´, s);
button1.click;
end;



Responder

Gostei + 0

05/11/2004

Marco Salles

Quanto ao meu amigo GilvanJ:
Não basta colocar apenas na pasta Inicializar do menu iniciar ?


Sim, isto resolveria o problema :lol: ..É que me expressei mau :( ..Na verdade, eu nao necessito que todo o aplicativo seje executado, mas sim , um [b:4bcf76eb66]fragmento de código desse aplicativo[/b:4bcf76eb66]....E Um código que atualiza diariamente as informações de um banco de horas ou toda vez que o micro , for ligado, ...Mas isto e so [b:4bcf76eb66]uma parte do código [/b:4bcf76eb66]do aplicativo ...Pensei como saida escrever este fragmento de código em um outro aplicativo e coloca-lo no mesmo diretório, do aplicatido principal....So nao sei se esta e a melhor saída...Entendeu :?: :?:

Quanto ao meu amigo Oscar Candido:
Esse código eu peguei num daqueles arquivos de dicas, [b:4bcf76eb66]espero que seja útil:[/b:4bcf76eb66]

Toda informaçõa e muito util a meu ver..So por gentileza me responda..Aonde a gente coloca este código :?: :?: ..e como a gente o executa :?: :?: Tem Reversão :?: :?: Infelismente , para mim , ficou meio no ar esta sugestão :cry: :cry: ..Mas teria enorme prazer de entende-la

Obrigado


Responder

Gostei + 0

05/11/2004

Gilvanj

Marco, vc poderia fazer com que seu programa reconheça a entrada de parâmetros via linha de comando e desta forma executar alguma rotina específica. Por exemplo:

c:\> meuprog


Executaria o seu programa normalmente. Já:

c:\> meuprog at 


Neste caso, a presença de ´at´ na linha de comando indicaria pra vc executar algum código específico. Dessa forma, vc poderia editar o atalho do windows, adicionando este parâmetro.
Para tratar este tipo de funcionamento (fazer a leitura de parâmetros), verifique os comandos ParamCount e ParamStr.

Ah, e sobre a sugestão do Oscar... este trecho de código configuraria seu programa para ser executado logo após entrar no Windows..


Responder

Gostei + 0

06/11/2004

Marco Salles

Gilvan Escreveu:
Neste caso, a presença de ´at´ na linha de comando indicaria pra vc executar algum código específico. Dessa forma, vc poderia editar o atalho do windows, adicionando este parâmetro. Para tratar este tipo de funcionamento (fazer a leitura de parâmetros), verifique os comandos ParamCount e ParamStr.


Isto :D . Joia.. :D Fui no Helphi do Delphi..Apesar de nao saber nada em ingles :oops: , fui ao menos tentar :!: ..Mas nao saber ingles realmente as coisas ficam difíceis :oops: ... E Alem do mais nen Executar o exemplo do Help Consegui <[b:2b54dad1cd] Da Erro , Nen Compila[/b:2b54dad1cd] :cry: >
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  for i := 0 to ParamCount – 1 do
  begin
    if LowerCase(ParamStr(i)) = ´beep´ then
      Beep(10000,1000)
    else if (LowerCase(ParamStr(i)) = ´exit´ then
      Application.Terminate;
  end;
end;


Então amigo Gilvan se importaria em aprofundar um pouco mais na sua Dica:::Por exemplo, suponha que o Fragmento do código que eu quero executar Toda vez que eu ligar o Micro Seje:
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(´Obrigado Amigo´);
end;

Como Faria :oops: :?: :?: :?:


Responder

Gostei + 0

06/11/2004

Gilvanj

Olá Marco.

Veja o arquivo de projeto abaixo. Antes de criar a form principal do projeto é verificado se há algum parâmetro foi informado na linha de comando. Isto é feito com a instrução ´if ParamCount > 0´. Se vc chamar seu programa informando um ou mais parâmetros, ParamCount retornará a quantidade de parâmetros informados.

program Project1;

uses
  Forms, Dialogs, SysUtils,
  unit1 in ´unit1.pas´ ;

{$R *.res}

begin
  Application.Initialize;
  if ParamCount > 0 then
  begin
    if UpperCase(ParamStr(1))=´AT´ then
    begin
      ShowMessage(´Olá amigo´);
    end;
  end
  else
  begin
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.


Em seguida é feito o teste:
if UpperCase(ParamStr(1))=´AT´ then...

Este comando verificará se o primeiro parâmetro que foi informado é ´AT´. Em caso afirmativo, é executado um procedimento específico, no caso, mostrar apenas uma mensagem na tela. Em seguida o programa é finalizado. No caso do parâmetro não ter sido informado, o fluxo normal do programa é executado.

No seu exemplo, vc sugeriu chamar o código de programa do método Button1Click de TForm1.
O procedimento mantém-se o mesmo que exposto acima, a diferença é que será necessário criar uma instancia de TForm1, visto que o método é desta classe.


Responder

Gostei + 0

06/11/2004

Gilvanj

(Complementando...)

Na verdade, o teste:

if UpperCase(ParamStr(1))=´AT´ then 


Nem precisaria ser executado, isto é, vc poderia assumir de que, seja lá qual for o parâmetro informado, vc executará um procedimento especial. Caso não seja passado parâmetro algum, o programa segue o fluxo normal.


Responder

Gostei + 0

06/11/2004

Marco Salles

Beleza..Tive alguns contatempos mas consegui resolve-los..Tive que Incluir na claususa [b:c29812e3f3]Uses[/b:c29812e3f3] do Projetos algumas [b:c29812e3f3]Units[/b:c29812e3f3]..Para que reconheça a [b:c29812e3f3]mensagem e a procedure UpperCase[/b:c29812e3f3]..Tambem tive que ir No [b:c29812e3f3]Atalho[/b:c29812e3f3] localizado na Pasta do Menu Inicializar e dar um click nele, escolher [b:c29812e3f3]propriedades[/b:c29812e3f3] , e na [b:c29812e3f3]guia[/b:c29812e3f3] Atalho Na Propriedade [b:c29812e3f3]Destino[/b:c29812e3f3] Onde Estava Marcado[b:c29812e3f3] C:\PApagarUrgente.exe [/b:c29812e3f3]:arrow: [b:c29812e3f3]Alterei[/b:c29812e3f3] para [b:c29812e3f3]C:\PApagarUrgente.exe at...[/b:c29812e3f3]

Acho que é isso mesmo...[b:c29812e3f3]Mas para Ficar Dez[/b:c29812e3f3], o Fragmento de código que eu quero Executar e como voce mesmo Disse, esta num Botao do [b:c29812e3f3]Form[/b:c29812e3f3]... Nada que pareça mostruoso , mas o procedimento é grande e a gente nao gosta de ficar repetindo códigos ao londo do aplicativo..Não por preguiça(Pq e so colar e copiar),mas por questao de legibilidade evitamos a duplicidade.....Voce tocou nun ponto chave quando disse:::

No seu exemplo, vc sugeriu chamar o código de programa do método Button1Click de TForm1. O procedimento mantém-se o mesmo que exposto acima, a diferença é que [b:c29812e3f3]será necessário criar uma instancia de TForm1, visto que o método é desta classe. [/b:c29812e3f3]


[b:c29812e3f3]será necessário criar uma instancia de TForm1, visto que o método é desta classe. [/b:c29812e3f3]..Mas como podemos fazer isto de maneira eficaz ja que o form nen foi criado ainda :?: :?: :oops: :oops: :oops:

Acho que agora so ta faltando Isto :lol: ..Eta :P :P

Desde ja meus agradecimentos...


Responder

Gostei + 0

06/11/2004

Gilvanj

Olá Marco,

Eis um exemplo:

    if UpperCase(ParamStr(1))=´AT´ then
    begin
      Form1 := TForm1.Create(Application);
      try
        // Agora sim é possível chamar Button1Click
        Form1.Button1Click(Nil);
      finally
        Form1.Free;
      end;
      // ShowMessage(´Oi´);
    end;


Observe que uma instacia de TForm1 é carregada porém não é exibida para o usuário, visto que nem Show ou ShowModal estão sendo chamados. Após executar o procedimento desejado (Button1Click) a instância de TForm1 (Form1) é liberada (Free). Se vc tiver procedimentos de carga de dados na tela, como por exemplo, no FormShow, vc também poderá chamá-lo explicitamente antes de Button1Click, para alimentar a tela com os dados. Não esquecer de que como a form não é apresentada para o usuário, nenhum comando de posicionamento em tela (como por exemplo, SetFocus) poderá ser executado.


Responder

Gostei + 0

08/11/2004

Marco Salles

Minha Unit Do Form Esta Assim:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(´Foi´);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
showMessage(´Executou o procedimento´);
end;


Meu Projeto Esta Assim:
begin
  Application.Initialize;
    if ParamCount > 0 then
  begin
    if UpperCase(ParamStr(1))=´AT´ then
    begin
      Form1 := TForm1.Create(Application);
      try
        // Agora sim é possível chamar Button1Click
        Form1.Button2Click(Nil);
      finally
        Form1.Free;
      end;
    end;
  end
  else
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Com Voce Pode Perceber , é para Executar o Evento[b:cb854296cc] OnClick Do Botão 2[/b:cb854296cc], Mas ao Iniciar o Meu Computaor Aparece a Mensagem Do [b:cb854296cc]Botão1[/b:cb854296cc]..O Que Será Que Eu Estou Fazendo De Errado :oops: :oops: :oops:


Responder

Gostei + 0

09/11/2004

Gilvanj

Oi. Fiz um teste aqui no meu computador e o Delphi realmente executou o código do botão 2.
Tente depurar o programa para ver onde pára o programa ao dar um F7 em Button2Click.


Responder

Gostei + 0

09/11/2004

Marco Salles

Amigo Gilvan..Devido a simplicidade do código . nao tenho muito que fazer... Porem o que eu fiz:::
[b:6868e44725]codigo inicial:[/b:6868e44725]
begin 
  Application.Initialize; 
    if ParamCount > 0 then 
  begin 
    if UpperCase(ParamStr(1))=´AT´ then 
    begin 
      Form1 := TForm1.Create(Application); 
      try 
        // Agora sim é possível chamar Button1Click 
        Form1.Button2Click(Nil); 
      finally 
        Form1.Free; 
      end; 
    end; 
  end 
  else 
  Application.CreateForm(TForm1, Form1); 
  Application.Run; 
end.


Seguindo sua sugestão: (Complementando...) Na verdade, o teste: Código: if UpperCase(ParamStr(1))=´AT´ then Nem precisaria ser executado, isto é, vc poderia assumir de que, seja lá qual for o parâmetro informado, vc executará um procedimento especial. Caso não seja passado parâmetro algum, o programa segue o fluxo normal.


Então retirei este cógido ... Ficando assim::
begin 
  Application.Initialize; 
    if ParamCount > 0 then 
  begin 
      Form1 := TForm1.Create(Application); 
      try 
        // Agora sim é possível chamar Button1Click 
        Form1.Button2Click(Nil); 
      finally 
        Form1.Free; 
      end;  
  end 
  else 
  Application.CreateForm(TForm1, Form1); 
  Application.Run; 
end.


E Agora deu certo :cry: :cry: .. So para embananar ainda mais o, voltei novamente como o código do If e tambem deu certo.... Xiiiiiiiiiiiiiiiiiiiiiii
Vai entender :!: :!: :!:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar