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
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