quarta-feira, 4 de março de 2009

Finalizar Processos

Algumas vezes nos deparamos com situações em que não queremos que certo processo esteja executando no computador, durante um processo demorado do sistema por exemplo, você pode querer fechar algum player de áudio, finalizar o messenger entre outras situações. Há diversas formas de realizar e implementar esta rotina, ou seja pelo ID utilizado pelo processo, ou através do próprio nome do executável, "wmplayer.exe" por exemplo.

Criando um novo projeto, altere o Caption do formulário para "Fechar Programas" e arraste para ele um componente Label alterando Caption para "Digite o nome do Processo", um componente Edit (edtProcesso) e um componente Button com Caption "Finalizar Processo". Antes de codificar o evento OnClick do botão, vá ao código e declare na seção Private a seguinte função que receberá por parâmetro o nome do executável:

function Finalizaprocesso(ExeFileName: string): integer;

Na implementação da função, adicione o código a seguite:

function TForm1.Finalizaprocesso(ExeFileName: string): integer;

const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32{declarar Uses Tlhelp32};
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;

A função irá localizar o processo, e quando localizado irá finalizá-lo.

Para executar a função, basta que adicione ao evento OnClick do botão uma chamada ao código, passando para o parâmetro o valor digitado no Edit. Antes de finalizar o processo, ainda solicitamos a confirmação ao usuário.

if Application.MessageBox('Deseja mesmo finalizar este processo?','Finalizar processo',MB_YESNO) = idYes then
Finalizaprocesso(edtProcesso.Text)






Por ora seria isto, abraço e até o próximo post.

Nenhum comentário: