Finalizar processo de um programa

29/10/2004

0

Pessoal, encontrei na internet o seguinte código:
function killtask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
                        OpenProcess(PROCESS_TERMINATE,
                                    BOOL(0),
                                    FProcessEntry32.th32ProcessID),
                                    0));
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   killtask(´notepad.exe´);
end;

Com este código é possível fazer com que, via Delphi, seja finalizado qualquer programa que esteja rodando, exceto Thread.
Rodei um programa que trabalha em background, por meio de Thread, e tentei executar o código acima, mas o programa não é finalizado pela função descrita.

Alguém sabe como fazer [b:f8ed31e80d]via Delphi[/b:f8ed31e80d], para que o processo de um programa desse tipo seja finalizado?

Valeu!
wbb


Responder

Posts

29/10/2004

Cabelo

Colega..

Nesta mesma classe não tem uma função que faça isso..

Qual a classe de ´TProcessEntry32´??


Responder

29/10/2004

Wbb

Não sei...
Procurei algo relacionado, mas não encontrei ou então não percebi a relação.

Independente disso, eu preciso de algo que consiga finalizar qualquer programa que esteja rodando em background e não apenas um programa do Delphi. O MySQL por exemplo, também fica rodando em background. Quando tentei solicitar o término de seu processo, usando a função que mostrei, nada aconteceu.

O que fazer?!

Valeu pela atenção.
wbb


Responder

29/10/2004

Cabelo

Vc conseguiu rodar este aplicativo..

Aqui não consegui pois dá erro aqui ´TProcessEntry32´, diz que é uma classe desconhecida..

o q vc declarou na Uses?? pq aqui não consegui nada..

preciso disso pra poder te ajudar..


Responder

29/10/2004

Wbb

Você não deve esquecer de incluir a unit [color=red:35e9667388][b:35e9667388]TLHelp32[/b:35e9667388][/color:35e9667388] na seção Uses. Provavelmente é por isso que não está funcionando aí.

T+


Responder

21/02/2018

Irineu Junior

para TProcessEntry32 use a TLHelp32
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar