Source Listando Processos , Módulos e Threads - Delphi 7

NeeD

Membro
Registrado
Setembro 24, 2017
Mensagens
12
Pontos de reações
13
Idade
25
declare nas USES : tlHelp32 , ComCtrls e Math
Listando processos :

adicione 1 list view
nas propriedades do list view altere :
- ViewStyle para vsReport
- SortType para stText
- Read Only e Row Select para true
vá em Columns e adicione 2 colunas
na primeira coloque o "caption" como "Process Name" e na segunda "PID"
apos ter feito isso , adicione um button e segue o código :

Código:
procedure tForm1.GetProcess;
var
ContinueLoop: BOOL;
ProcessSnap: THandle;
ProcessEntry: TProcessEntry32;
PID : Integer;
Item: TListItem;
begin
// tira uma "print" dos processos abertos :
ProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
ProcessEntry.dwSize := SizeOf(ProcessEntry);
ContinueLoop := Process32First(ProcessSnap, ProcessEntry);
Form1.ListView1.Clear; // limpa a listview antes de adicionar os processos
// loop para listar os processos :
while Integer(ContinueLoop) <> 0 do begin
PID := ProcessEntry.th32ProcessID;
Item := Form1.ListView1.Items.Add;
// Lista os processos pelo nome do executavel :
Item.Caption := (ProcessEntry.szExeFile) ;
// lista os "PIDs" do processos
Item.SubItems.Add (IntToStr(PID));
ContinueLoop := Process32Next(ProcessSnap, ProcessEntry);
end;
CloseHandle(ProcessSnap);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
GetProcess;
except
end;
end;
pronto , com isso você vai listar todos os processos em execução
Listando modulos :


adicione outro listview e configure do igual o anterior ... e adicione as seguintes colunas :
coluna 0 : Module Name
coluna 1 : Base Address
coluna 2 : Size
apos ter "preparado" o novo listview , adicione um button e segue o código :

Código:
procedure TForm1.GetModules;
var
ContinueLoop: BOOL;
ModuleSnap: THandle;
ModuleEntry: TModuleEntry32;
Process: Cardinal;
MAddress: Integer;
X, Y: Real;
PID: String;
Item: TListItem;
begin
// o processo alvo sera o item selecionado da listview1 :
PID := ListView1.ItemFocused.SubItems[0];
// converte a string do item seleciona para integer
Process := (StrToInt(PID));
// cria uma "print" dos modulos
ModuleSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, Process);
ModuleEntry.dwSize := SizeOf(TModuleEntry32);
ContinueLoop := Module32First(ModuleSnap, ModuleEntry);
ListView2.Clear; // limpa a listview antes de adicionar os modulos
// loop para listar os modulos :
y := 0;
while Integer(ContinueLoop) <> 0 do begin
Item := ListView2.Items.Add;

// Nome do modulo:
Item.Caption := (ModuleEntry.szModule);

// adiciona a base address dos modulos :
MAddress := Cardinal(ModuleEntry.modBaseAddr);
Item.SubItems.Add(IntToHex(StrToInt(IntToStr(MAddress)), 8));

// tamanho do modulo(bytes) dividido por 1024 :
X := ModuleEntry.modBaseSize / 1024; // "converte" bytes para kbytes
if X > 1024 then begin // se o tamanho do modulo for superior a 1024 kbytes (1 megabyte) :
Y := X / 1024; // "converte" kbytes para megabytes
// adiciona os modulos como "MB" :
Item.SubItems.add(FloatToStr(SimpleRoundTo(Y, -2))+ ' MB');
end;
// adiciona os modulos com tamanho inferior a 1024kb (menores que 1 mb)
Item.SubItems.add(FloatToStr(Y)+ ' KB');

ContinueLoop := Module32Next(ModuleSnap, ModuleEntry); // lista todos os modulos do processo
end;
CloseHandle(ModuleSnap);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
try
// se a list view 1 tiver algum item selecionado :
if ListView1.ItemIndex >= 0 then
GetModules
else // se a list view 1 não tiver nenhum item selecionado :
MessageBox(0,'Selecione um processo !','Erro',0); // mensagem de erro
except
end;
end;

Pronto , com isso ai você vai conseguir listas os módulos do processo selecionado
Listando threads :


adione outro listview e configure igual aos anteriores e nas colunas adicione apenas uma :
coluna 0 : Thread id
apos ter "preparado" a nova list view , adicione um novo button e :

Código:
procedure tForm1.GetThreads;
var
ContinueLoop: BOOL;
ThreadSnap: THandle;
ThreadEntry: TThreadEntry32;
Process: Cardinal;
PID : String;
TID : integer;
Item: TListItem;
begin
try
// o processo alvo sera o item selecionado da listview1 :
PID := ListView1.ItemFocused.SubItems[0];
// converte a string do item seleciona para integer
Process := (StrToInt(PID));
// tira um print das threads do processo :
ThreadSnap := CreateToolhelp32Snapshot (TH32CS_SNAPTHREAD, Process);
ThreadEntry.dwSize := SizeOf (TThreadEntry32);
ContinueLoop := Thread32First(ThreadSnap, ThreadEntry);
Listview3.Clear; // limpa a listview antes de adicionar os modulos
// loop para listar as threads :
while Integer(ContinueLoop) <> 0 do begin
if Process = ThreadEntry.th32OwnerProcessID then begin // exibe as threads do processo selecionado
TID := (ThreadEntry.th32ThreadID);
Item := Listview3.Items.Add;
// lista as threads pelo TID :
Item.Caption := (IntToStr(TID));
end;
ContinueLoop := Thread32Next(ThreadSnap, ThreadEntry);
end;
CloseHandle(ThreadSnap);
except
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
try
// se a list view 1 tiver algum item selecionado :
if ListView1.ItemIndex >= 0 then
GetThreads
else // se a list view 1 não tiver nenhum item selecionado :
MessageBox(0,'Selecione um processo !','Erro',0); // mensagem de erro
except
end;
end;
end.

SOURCE - DOWNLOAD
nando noob
SOURCE - SCAN

Espero ter ajudado , qualquer duvida , utilize os comentários :)

Ed
 

Kroz

Ex-Staff
Registrado
Julho 19, 2017
Mensagens
133
Pontos de reações
150
Localização
Manaus, AM
Ed... Ed? NeeD... NeeD.. Piercing Blow? Piercing?..
 

Membros que estão visualizando este tópico (Total: 1, membros: 0, visitantes: 1)

Topo