Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Finalizar Programas


LuizAraujo

Pergunta

6 respostass a esta questão

Posts Recomendados

  • 0

Neste link(http://www.swissdelphicenter.ch/torry/showcode.php?id=266) tem duas rotinas para finalizar processos. Talvez uma lhe sirva, já que você utiliza WinExec.

Porém, o help do Delphi diz o seguinte sobre WinExec: This function is provided for compatibility with earlier versions of Windows. For Win32-based applications, use the CreateProcess function.

Acho esta opção particularmente interessante porque, se for um processo iniciado por sua aplicação, você terá como terminar especificamente ela.

No exemplo abaixo, utilizei um form com um botão para iniciar o processo(programa) e outro para encerrá-lo. Funcionou legal, porém, não sei se é a solução ideal em virtude de algumas possíveis restrições colocadas pelo uso de TerminateProcess (vide help). Talvez algum colega possa fazer alguma colocação a respeito. Também fiquei intrigado pelo fato de não funcionar ao utilizar, na função CreateProcess, o parâmetro nome do módulo(com o programa) e linha de comando(com o arquivo texto) - inicia o notepad mas não abre o arquivo, obrigando a utilizar apenas linha de comando.

var
  ProcessInformation :TProcessInformation;

procedure TForm1.btnStartClick(Sender: TObject);
var
  StartupInfo :TStartupInfo;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), 0);
  FillChar(ProcessInformation, SizeOf(ProcessInformation), 0);
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_SHOWNORMAL;

  btnStop.Enabled := CreateProcess(nil,    // Nome do módulo executável
                   'c:\windows\notepad.exe c:\temp\teste.txt',    // Linha de comando
                   nil,                    // Atributos do processo (SECURITY_ATTRIBUTES)
                   nil,                    // Atributos da thread (SECURITY_ATTRIBUTES)
                   False,                  // Herdar handles do processo chamador
                   CREATE_NEW_CONSOLE or   // Flags de criação e
                   NORMAL_PRIORITY_CLASS,  // de prioridade
                   nil,                    // Variáveis de ambientes para o processo
                   nil,                    // Diretório corrente do processo
                   StartupInfo,            // Determina como a janela do processo deve aparecer
                   ProcessInformation);    // Informações sobre o processo criado
  btnStart.Enabled := not btnStop.Enabled;
end;

procedure TForm1.btnStopClick(Sender: TObject);
begin
  btnStop.Enabled := False;
  btnStart.Enabled := not btnStop.Enabled;
  if not TerminateProcess(ProcessInformation.hProcess, 0) then
    ShowMessage('O processo já foi encerrado pelo usuário!');
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu pelas informações

anotei todas e sei que aproveitarei estas dicas

um abraço Luiz

complementando

alo micheus deu certo com as dicas, e encerrei varios programas abertos ao mesmo tempo,

tanto usei sua procedure juntamente com a função KillTask

e tambem usando KillTask com winexec, os dois em win98.

Valeu! pelas dicas Um abraço Luizaraujo

Link para o comentário
Compartilhar em outros sites

  • 0

Alo micheus

coloquei um arquivo( Teste.doc )na pasta do executável (C:\LanHouse\Micro1) e coloquei na linha

BtnStop.Enabled:=CreatProcess(nil, 'C:\Arquivos de programas\Microsoft Office\Office\WINWORD.EXE Teste.Doc', nil...

abriu sem precisar indicar o caminho.

Valeu luizaraujo

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Alexandre Martinez

As dicas são excelentes.

Eu utilizei sem informar o caminho completo e funcionou direitinho.

BtnStop.Enabled:=CreatProcess(nil, 'WINWORD.EXE Teste.Doc', nil...

Acontece que se o programa (WINWORD.EXE) e o arquivo (Teste.Doc) estiverem na mesma pasta que o executável e/ou em um dos path's do windows, vai funcionar sem precisar informar o caminho.

Vlw mesmo.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...