Fechar apenas um programa
Bom dia pessoal,
Como faço para fechar apenas um programa, por exemplo, estou com o IE aberto e o meu sistema tem que fechá-lo, como procedo?
Eu gostaria que ao clicar no botão o sistema fechasse o IE automaticamente, já tentei aquela rotina para finalizar processos, mas ele está fechando meu aplicativo também.
Abraços a todos!
Prog
Como faço para fechar apenas um programa, por exemplo, estou com o IE aberto e o meu sistema tem que fechá-lo, como procedo?
Eu gostaria que ao clicar no botão o sistema fechasse o IE automaticamente, já tentei aquela rotina para finalizar processos, mas ele está fechando meu aplicativo também.
Abraços a todos!
Prog
Anonymous
Curtidas 0
Respostas
Navoid
27/02/2003
vixi cara tem algum problema.
como tais usando isso, tem como mandar o teu programa pra eu ver?
eu usei as funções do finalizador de processos e funca normalmente, sem fechar o meu programa, ele fecha só o que eu peço.
até
como tais usando isso, tem como mandar o teu programa pra eu ver?
eu usei as funções do finalizador de processos e funca normalmente, sem fechar o meu programa, ele fecha só o que eu peço.
até
GOSTEI 0
Anonymous
27/02/2003
Para terminar um porcesso corrente você deverá usar, primeiramente, a função OpenProcess e logo após, a função TerminateProcess. Eis suas definições:
[color=red:68b64de7a6][b:68b64de7a6]Observação Importante[/b:68b64de7a6][/color:68b64de7a6]: Com intuito de terminar o processo o parâmetro dwDesiredAccess da função OpenProcess deve ser a constante PROCESS_TERMINATE. É preciso ainda ter em mãos o ID do processo.
E, finalmente, é preciso obter a lista de processos correntes. Isso se faz com a ajuda da Unit TLHelp32.
Há algum tempo, fiz um gerenciador de tarefas em Delphi, composto de um ListBox e alguns botões (´Listar Processos´, ´Terminar´, ´Novo´ etc). Eis alguns trechos que podem ajudar.
Basta ter em seu Form um ListBox e 2 botões, um para listar os processos e outro para terminá-los.
arrebola@host.sk
HANDLE OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId); BOOL TerminateProcess(HANDLE hProcess, UINT uExitCode).
[color=red:68b64de7a6][b:68b64de7a6]Observação Importante[/b:68b64de7a6][/color:68b64de7a6]: Com intuito de terminar o processo o parâmetro dwDesiredAccess da função OpenProcess deve ser a constante PROCESS_TERMINATE. É preciso ainda ter em mãos o ID do processo.
E, finalmente, é preciso obter a lista de processos correntes. Isso se faz com a ajuda da Unit TLHelp32.
Há algum tempo, fiz um gerenciador de tarefas em Delphi, composto de um ListBox e alguns botões (´Listar Processos´, ´Terminar´, ´Novo´ etc). Eis alguns trechos que podem ajudar.
{ As variáveis }
Process_Entry_32 : TProcessEntry32;
Handle_Snap_Shot : THandle;
ProcessHandle : THandle;
{ Iniciar as variáveis }
Procedure IniciarVars();
Begin
Handle_Snap_Shot := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0);
Process_Entry_32.dwSize := SizeOf(TProcessEntry32);
Process32First(Handle_Snap_Shot, Process_Entry_32);
End;
{
Procedure: Listar Processos
Adiciona ao ListBox todas informações pertencentes
à estrutura TProcessEntry32 para cada processo existente
typedef struct tagPROCESSENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
DWORD th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
char szExeFile[MAX_PATH];
} PROCESSENTRY32;
}
Procedure ListarProcessos;
var
i : integer;
Begin
i := 0;
Repeat
With Form1.ListBox1.Items do begin
Add(Format(´¬s´,[ExtractFileName(Process_Entry_32.szExeFile)]));
Add(Format(´Path: ¬s´,[Process_Entry_32.szExeFile]));
Add(Format(´PID: ¬x´, [Process_Entry_32.TH32ProcessID]));
Add(Format(´Parent PID: ¬x´, [Process_Entry_32.TH32ParentProcessID]));
Add(Format(´Size: ¬x´, [Process_Entry_32.dwSize]));
Add(Format(´Usage: ¬d´, [Process_Entry_32.cntUsage]));
Add(Format(´Default Heap: ¬x´, [Process_Entry_32.th32DefaultHeapID]));
Add(Format(´MID: ¬x´, [Process_Entry_32.th32ModuleID]));
Add(Format(´Threads: ¬x´, [Process_Entry_32.cntThreads]));
Add(Format(´PriClassBase: ¬d´, [Process_Entry_32.pcPriClassBase]));
Add(Format(´Flags: ¬x´, [Process_Entry_32.dwFlags]));
Add(´´);
Form1.Label1.Caption:=´Há ´+ IntToStr(i) + ´ processos ativos.´;
i := i + 1;
End;
Until (not Process32Next(Handle_Snap_Shot, Process_Entry_32));
CloseHandle(Handle_Snap_Shot);
End;
{
Terminar Processo
Obtém o HANDLE para o processo em questão através de seu ID
e termina o processo após confirmação do usuário
}
Procedure TerminarProcesso;
Begin
Repeat
If (ExtractFileName(Process_Entry_32.szExeFile) =
Form1.ListBox1.Items[Form1.ListBox1.ItemIndex]) then begin
ProcessHandle := OpenProcess(PROCESS_TERMINATE, TRUE, Process_Entry_32.TH32ProcessID);
If MessageDlg(
PChar(Format(´O processo ¬s, ID ¬x será terminado. Continuar ?´,
[Process_Entry_32.szExeFile, Process_Entry_32.TH32ProcessID])),
mtWarning, [MBOK, MBCANCEL], 0) = IDOK then begin
TerminateProcess(ProcessHandle,0);
End;
CloseHandle(ProcessHandle);
End;
Until (not Process32Next(Handle_Snap_Shot, Process_Entry_32));
CloseHandle(Handle_Snap_Shot);
End;Basta ter em seu Form um ListBox e 2 botões, um para listar os processos e outro para terminá-los.
{ Listar }
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Clear;
IniciarVars();
ListarProcessos();
end;
{ Terminar }
procedure TForm1.Button2Click(Sender: TObject);
begin
IniciarVars();
TerminarProcesso();
end;arrebola@host.sk
GOSTEI 0
Paullsoftware
27/02/2003
não consegui compilar o código acima...
da um erro quando checa nessa linha...
:cry:
da um erro quando checa nessa linha...
var Form1: TForm1; Process_Entry_32 : TProcessEntry32; //não passa daqui Handle_Snap_Shot : THandle; ProcessHandle : THandle;
GOSTEI 0
Dbezerra
27/02/2003
faltou fazer uses a unit TlHelp32...
GOSTEI 0