Jump to content


Photo

Listando Processos (e Seus Módulos) Em Execução


  • Faça o login para participar
3 replies to this topic

#1 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 29/11/2004, 15:09

Olá pessoal! ;)

Dias desses achei na Net essa função para listar os processos (e seus módulos) em execução, como no CTRL+ALT+DEL dos Windows (mas no Windows só lista os processos, os módulos não...). Como foi difícil de achar esta função, e tamb[em por muitos procurarem, resolvi compartilhá-la aqui..... (:D)...

Aí vai...

PS:
  • Button1 é o botão que lista os processos
  • ListView1 é a listview onde aparecem os processos
  • ListView2 é a listview onde aparecem os módulos ligados ao processo selecionado da ListView1
procedure TForm1.Button1Click(Sender: TObject);
var
  Snapshot: THandle;
  ProcessEntry32: TProcessEntry32;
begin
// limpa a listview
  ListView1.Clear;
// cria uma "fotografia" dos processos em execução
  Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (Snapshot = Cardinal(-1)) then
    exit;
  ProcessEntry32.dwSize := SizeOf(TProcessEntry32);
// pesquisa pela lista de processos
  if (Process32First(Snapshot, ProcessEntry32)) then
  repeat
// enquanto houver processos, adiciona na listview
    with ListView1.Items.Add do begin
      Caption := IntToStr(ProcessEntry32.th32ProcessID);
      SubItems.Add(IntToStr(ProcessEntry32.th32ParentProcessID));
      SubItems.Add(ProcessEntry32.szExeFile);
    end;
  until not Process32Next(Snapshot, ProcessEntry32);
// fecha "fotografia" de processos
  CloseHandle (Snapshot);
end;

procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
  ModuleSnap : THandle;
  ModuleEntry32 : TModuleEntry32;
  ProcessId : Integer;
begin
  ListView2.Clear;
  ProcessId := StrToInt(Item.Caption);
// tira uma "fotografia dos módulos neste processo
  ModuleSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
  if (ModuleSnap = Cardinal(-1)) then
    exit;
  ModuleEntry32.dwSize := SizeOf(TModuleEntry32);
// pesquisa pela lista de módulos do processo
  if (Module32First(ModuleSnap, ModuleEntry32)) then
  repeat
// enquanto tiver módulos, preenche a listview
    with ListView2.Items.Add do begin
      Caption := String(ModuleEntry32.szModule);
      SubItems.Add(String(ModuleEntry32.szExePath));
    end;
  until not Module32Next(ModuleSnap, ModuleEntry32);
// fecha "fotografia"
  CloseHandle(ModuleSnap);
end;

Para facilitar, anexei os fontes aqui..... :lol:

T+V! :DAté Mais :)

Attached Files


Edição feita por: VidaLoka, 29/11/2004, 15:10.


#2 meutiojj

meutiojj

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 26/06/2009, 18:39

Muito útil pra nós administradores...
Usei sua lógica pra gravar os processos num arquivo texto numa pasta da rede..depois posso analisar ele...

#3 cseara

cseara

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Masculino
  • Localidade:curitba

Posted 15/04/2010, 22:37

Olá pessoal! ;)

Desses Dias achei nd Net ESSA Função Parágrafo OS Processos listar (e módulos SEUS) EXECUÇÃO EM, Como no CTRL + ALT + DEL dos Windows (mas não do sistema operacional Windows parágrafo Lista de Processos, OS módulos Não ...). Como foi Difícil de Achar ESTA Função, e Tamb [em procurarem Por Para muitos, resolvi compartilhá-la aqui ..... (: D) ...

Aí vai ...

PS: [list]
[*] Button1 É o Botão Que Os Lista Processos
[*] ListView1 e Processos NUMA Lista aparecem Onde OS
[*] É UM listview ListView2 Onde aparecem OS módulos Ligados AO selecionado Processo da ListView1
[/ List] [code=auto:0] procedure TForm1.Button1Click (Sender: TObject);
var
Snapshot: THandle;
PROCESSENTRY32: TProcessEntry32;
Começar
/ Limpa / um listview
ListView1.Clear;
/ CRIA UMA fotografia / "dos Processos em EXECUÇÃO
Snapshot: = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
if (= Cardeal Snapshot (-1)), então
saida;
ProcessEntry32.dwSize: = sizeof (TProcessEntry32);
/ / Pela pesquisa Lista de Processos
se (Process32First (Snapshot, PROCESSENTRY32)) então
repetir
/ / Enquanto Houver Processos listview adiciona, nd
Começam com ListView1.Items.Add
Caption: = IntToStr (ProcessEntry32.th32ProcessID);
SubItems.Add (IntToStr (ProcessEntry32.th32ParentProcessID));
SubItems.Add (ProcessEntry32.szExeFile);
Efeito;
Até Não Process32Next (Snapshot, PROCESSENTRY32);
/ / Fecha fotografia "de Processos
CloseHandle (Instantaneo);
Efeito;

Procedimento TForm1.ListView1SelectItem (Sender: TObject; Item: TListItem;
Selecionado: Boolean);
var
ModuleSnap: THandle;
ModuleEntry32: TModuleEntry32;
ProcessId: Integer;
Começar
ListView2.Clear;
ProcessId: = StrToInt (Item.Caption);
/ Uma tira / "fotografia dos módulos Neste processo
ModuleSnap: = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, ProcessId);
if (= ModuleSnap Cardinal (-1)), então
saida;
ModuleEntry32.dwSize: = sizeof (TModuleEntry32);
/ / Pela pesquisa Lista de módulos do Processo
if (Module32First (ModuleSnap, ModuleEntry32)) então
repetir
/ / Enquanto Fígado módulos, listview UM preenche
Começam com ListView2.Items.Add
Caption: = String (ModuleEntry32.szModule);
SubItems.Add (String (ModuleEntry32.szExePath));
Efeito;
Até Não Module32Next (ModuleSnap, ModuleEntry32);
/ / Fecha fotografia "
CloseHandle (ModuleSnap);
end; [/ code]

Para facilitar, anexei OS fontes aqui ..... : Lol:

T + V! : Minhas Respostas DGosta de?




Ai o esta dica e fria total

Edição feita por: Cristiano Galdino, 04/05/2010, 20:18.


#4 delphi7ent

delphi7ent

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 21/04/2011, 19:22

Tah dando erro aki poderia me ajudar?
Posted Image

tenho que colocar alguma coisa na clausa USES?

Consegui! so declarar na user, TlHelp32!
agora alguem sabe como faço um botão para fechar o processo!

so sei que tem que declarar na user PsAPI, !

e a função:


function TerminarProcesso(sFile: String): Boolean;
var
verSystem: TOSVersionInfo;
hdlSnap,hdlProcess: THandle;
bPath,bLoop: Bool;
peEntry: TProcessEntry32;
arrPid: Array [0..1023] of DWORD;
iC: DWord;
k,iCount: Integer;
arrModul: Array [0..299] of Char;
hdlModul: HMODULE;
begin
Result := False;
if ExtractFileName(sFile)=sFile then
bPath:=false
else
bPath:=true;
verSystem.dwOSVersionInfoSize:=SizeOf(TOSVersionInfo);
GetVersionEx(verSystem);
if verSystem.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS then
begin
hdlSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
peEntry.dwSize:=Sizeof(peEntry);
bLoop:=Process32First(hdlSnap,peEntry);
while integer(bLoop)<>0 do
begin
if bPath then
begin
if CompareText(peEntry.szExeFile,sFile) = 0 then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID), 0);
Result := True;
end;
end
else
begin
if CompareText(ExtractFileName(peEntry.szExeFile),sFile) = 0 then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID), 0);
Result := True;
end;
end;
bLoop := Process32Next(hdlSnap,peEntry);
end;
CloseHandle(hdlSnap);
end
else
if verSystem.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
EnumProcesses(@arrPid,SizeOf(arrPid),iC);
iCount := iC div SizeOf(DWORD);
for k := 0 to Pred(iCount) do
begin
hdlProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,false,arrPid [k]);
if (hdlProcess<>0) then
begin
EnumProcessModules(hdlProcess,@hdlModul,SizeOf(hdlModul),iC);
GetModuleFilenameEx(hdlProcess,hdlModul,arrModul,SizeOf(arrModul));
if bPath then
begin
if CompareText(arrModul,sFile) = 0 then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid [k]), 0);
Result := True;
end;
end
else
begin
if CompareText(ExtractFileName(arrModul),sFile) = 0 then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid [k]), 0);
Result := True;
end;
end;
CloseHandle(hdlProcess);
end;
end;
end;
end;


mais naum sei colocar o botão em que vai fechar o processo celecionado! alguem pode me ajudar?




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq