Chr0n0 Postado Dezembro 24, 2006 Denunciar Share Postado Dezembro 24, 2006 Olá para todos os membros do forum, a um tempo venho aconpanhando o site do scriptbrasil e realmente é muito bom.Hoje estou com uma tremenda duvida, para alguns pode ser muito facil... mas estou quebrando a cara tentando e tentando sem sucesso.O problema é o seguinte... eu já criei um programinha para fechar processos que o windows esta execultando...Só que agora não sei o codigo para fechar esses processos.Segue a imagem..http://img407.imageshack.us/img407/3199/fotoov6.jpgOlhem os processos rodando.. eu estou atras de um codigo que faça feixar ele(s).Este é meu primeiro post no forum, ficaria muito grato se alguém consseguir me ajudar..Valeu pra todos.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 25, 2006 Denunciar Share Postado Dezembro 25, 2006 Ch0n0, veja se isto lhe ajuda. O código não é meu, mas vou postar aqui para o caso de mais alguém precisar no futuro.Fonte: DelphiTricks.com// ************************************************** // For Windows 9x/ME/2000/XP // ************************************************** uses Tlhelp32; 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.Button1Click(Sender: TObject); begin KillTask('notepad.exe'); end; // ************************************************** // For Windows NT/2000/XP // ************************************************** procedure KillProcess(hWindowHandle: HWND); var hprocessID: INTEGER; processHandle: THandle; DWResult: DWORD; begin SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult); if isWindow(hWindowHandle) then begin { Get the process identifier for the window} GetWindowThreadProcessID(hWindowHandle, @hprocessID); if hprocessID <> 0 then begin { Get the process handle } processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, False, hprocessID); if processHandle <> 0 then begin { Terminate the process } TerminateProcess(processHandle, 0); CloseHandle(ProcessHandle); end; end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin KillProcess(FindWindow('notepad',nil)); end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Chr0n0 Postado Dezembro 25, 2006 Autor Denunciar Share Postado Dezembro 25, 2006 Muito obrigado por vome me responder Micheus, mas infelizmente não conssegui.Não sei se foi erro meu ou o code, mas dava diverssos erros... estou comecando agora com delphi, não sei muito bem...Vou tentar dar uma outra esplicada para ver se alguém conssegue me entender.Eu estou criando um programa para finalizar processos do Windows, deem uma olhada na foto do programa com a janela dos processos do Windows aberta para entenderem melhor o que estou tentando fazer.Foto do programaEstou precisando que quando clique na 1 janela, finaliza o firefox... que esta rodando.quando clico na 2, finaliza o antivirus nod32... e assim por diante.Eu já peguei um pronto, não lembro aonde, que voce clica em processos, aparece todos os processos rodadando, ai voce seleciona o desejado e clica em fexar, ele fexa...Mas estou mesmo precisando fazer assim como falei la em cima, clico no botão, fexo...Se alguém consseguir me ajudar ficarei muito grato de verdade, porque estou impacado... já tentei de tudo, em muitos foruns sobre delphi e ninguém sabe, ou não querem falar..É isso ai, se mais alguém consseguir me dar uma luz. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 25, 2006 Denunciar Share Postado Dezembro 25, 2006 Não sei se foi erro meu ou o code, mas dava diverssos erros... Que tipo de erros? Talvez porque você copiou tudo o que coloquei no post anterior, dentro do seu programa. (veja a seguir)Eu estou criando um programa para finalizar processos do Windows, deem uma olhada na foto do programa com a janela dos processos do Windows aberta para entenderem melhor o que estou tentando fazer.Foto do programaEstou precisando que quando clique na 1 janela, finaliza o firefox... que esta rodando.quando clico na 2, finaliza o antivirus nod32... e assim por diante.Bom, o código que postei, em teoria (e na prática também, já que testei e funcionou) deveria fazer justamente isto. Observe que há duas opções (versões) dentro do mesmo código - talvez isso possa tê-lo confundido.Mas vou colocar só a que eu testei, e que conforme o comentário, serve para "todas" as versões do Windows. É um form com um botão apenas: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms; type TForm1 = class(TForm) ... end; ... var Form1: TForm1; implementation uses Tlhelp32; // ************************************************** // For Windows 9x/ME/2000/XP // ************************************************** 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; // ** Aqui está a forma de chamar o procedimento. No exemplo estamos passando, fixo, o nome do programa que queremos "matar" - neste caso NOTEPAD.EXE. // Na sua figura, você mostra botões com o nome dos processos a matar. Bom, acho que são estes // nomes que você vai ter que passar. procedure TForm1.Button1Click(Sender: TObject); begin KillTask('notepad.exe'); end;[]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Chr0n0 Postado Dezembro 25, 2006 Autor Denunciar Share Postado Dezembro 25, 2006 Olha so, me corrija se eu estiver errado. Estou fazendo isso e esta dando erradoEsse codigo aqui eu coloco dentro do form. (apago tudo que já está dentro do form e colo esse aqui)unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;type TForm1 = class(TForm) ... end;...var Form1: TForm1;implementationuses Tlhelp32;// **************************************************// For Windows 9x/ME/2000/XP// **************************************************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;E esse aqui coloco dentro do botão.procedure TForm1.Button1Click(Sender: TObject);begin KillTask('notepad.exe');end;Estou fazendo isso que descrevi ai em cima...E agora esta dando erro no procedure TForm1.Button1Click(Sender: TObject);Dizendo : [Error] Unit1.pas(50); Statement expected but 'PROCEDURE' foundRe-analize e veja se estou fazendo algo errado, muito obrigado mais uma vez por tentar me ajudar. :) Valeu!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Dezembro 25, 2006 Denunciar Share Postado Dezembro 25, 2006 opaaqui funcionou certinho o exemplo do Miches...faz download do source... Delphi 6http://rapidshare.com/files/8947602/killtask.zipabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Chr0n0 Postado Dezembro 25, 2006 Autor Denunciar Share Postado Dezembro 25, 2006 Pow mano, muito obrigado mesmo, voce me ajudou bastante.Valeu pro Micheus tambem. A vocês 2 que me ajudaram.Deu certinho aqui, não sei o que tava fazendo de errado... mas vou ficar comparando o codigo e estuda-lo para ver onde estava errando.Abraços!! :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 26, 2006 Denunciar Share Postado Dezembro 26, 2006 Chr0n0, um pouco de atenção :excl: você não pode simplesmente substituir o código pelo que eu coloquei, simplesmente porque ele está incompleto! Observe as reticências (...).Faça o seguinte, você precisa é no seu projeto (parece-me já estar adiantado) colocar apenas o código da procedure KillTask, adicionar na cláusula uses a unit Tlhelp32 e no evento OnClick dos seus botões (a imagem que você postou tem 6 botões cada um com o nome do programa a encerrar) colocar a chamada ao procedimento. Por exemplo:procedure TForm1.Button1Click(Sender: TObject); begin KillTask('firefox.exe'); end; procedure TForm1.Button2Click(Sender: TObject); begin KillTask('node32kui.exe'); end; ... procedure TForm1.Button6Click(Sender: TObject); begin KillTask('iexplorer.exe'); end;Eu usei o "..." denovo heim?![]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Chr0n0 Postado Dezembro 26, 2006 Autor Denunciar Share Postado Dezembro 26, 2006 Vlw mano, não é que eu esteja distraido... é que comecei a estudar delphi a 1 semana, sem ajuda de ninguém... sou bem novato na area.Somente com tutoriais da net e por ai vai.Mas vou estudar bastante o que você esta explicando.Valeu!! vou prestar mais atenção no código do programa Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Chr0n0
Olá para todos os membros do forum, a um tempo venho aconpanhando o site do scriptbrasil e realmente é muito bom.
Hoje estou com uma tremenda duvida, para alguns pode ser muito facil... mas estou quebrando a cara tentando e tentando sem sucesso.
O problema é o seguinte... eu já criei um programinha para fechar processos que o windows esta execultando...
Só que agora não sei o codigo para fechar esses processos.
Segue a imagem..
http://img407.imageshack.us/img407/3199/fotoov6.jpg
Olhem os processos rodando.. eu estou atras de um codigo que faça feixar ele(s).
Este é meu primeiro post no forum, ficaria muito grato se alguém consseguir me ajudar..
Valeu pra todos..
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
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.