Tutorial ToolHelp32
Ola Pessoal esse é meu primeiro tutorial para o Fórum, e Venho
Falar um Pouco da API do Windows ToolHelp32 ,Mais Conhecida como
Tlhelp32,essa Api é responsável pela Informações de Todos os Processos
Ocorrendo No Sistema ,Processos em execução , o Foco desse Tutorial
é Apenas Listar os Processos em Execução ,
Mostrando os em um Componente ListBox,bom Galera Vamos
Iniciar um Novo Projeto no Delphi Adicione 2 Componentes :
1 - Button
1 - ListBox
Dando continuidade P/ Trabalhar Com a TlHelp32 em Delphi
Precisamos declarar na Clausula Uses :
TlHelp32;
agora vamos em Public e Vamos criar uma Procedure para
listar os Processos ficando Assim :
agora Apertamos CTRL + SHIFT + C para Entrarmos no Escopo de
Nossa Procedure ,Agora Declaramos 2 Variaveis Parar Obtermos informações Sobre os Processos Ficando Assim :
A Primeira Variavel Ficara Responsável por Aramezenar Informações
dos Processo e a Segunda Ficara Responsável por Armzenar o tamanho
do Registro galera Agora Temos que Armazenar as Informações dos
Processos na Variavel Utilizando a Função function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; stdcall;
Essa Função ela cria uma "Foto" de Todos os Processos em execução
Ficando Assim :
Galera Passamos o Primeiro Parâmetro dwflags TH32CS_SNAPPROCCESS
ela é Reponsavel de Adicionar todos os Módulos de dos Processos
do Windows Especificado.
Ja o Segundo Parâmetro th32ProcessID é reponsavel de Identificar o Processo que Desejamos Obter Informações ,passamos o parâmetro
0 para Indicarmos o Processo Atual.
A função CreateToolHelp32 um Handle, Para "Foto" Caso Haja Algum
Erro ela retorna -1 Vejam :
Agora entre o Begin e End Após o Else
Vamos Atribuir a Nossa Variavel Info o Tamanho do
Registro Ficando Assim :
Nossa Variavel Tamanho é um type TProcessEntry32 Onde esse Type
Tem Um registro com o Campo DWSIZE,o Campo szExeFile,etc.
O campo dwSize contém o tamanho do registro TProcessEntry32. Esse deve ser inicializado como
SizeOf(TProcessEntry32) antes de usar o registro.
ja o Campo szExeFile
O campo szExeFile é uma string terminada em nulo que contém o nome do caminho e o nome de
arquivo referente ao arquivo EXE ou ao driver associado ao processo.
Agora Chegamos a Parte de Percorrer todos os Processos e Adicionar
ao Nosso Componente ListBox ,Utilizando as Funções
function Process32First(hSnapshot: THandle;
var lppe: TProcessEntry32)
function Process32Next(hSnapshot: THandle;
var lppe: TProcessEntry32): BOOL; stdcall;
Agora utilizaremos uma Condição Para realizar Nossa tarefa de Listar
os Processos Ficando Assim :
A função Process32First Tem 2 Parâmetros hSnapshot: THandle
que Passamos Nossa Primeira Variavel Como refêrencia
e o segundo Parâmetro var lppe: TProcessEntry32
que é um Registro do Type TProcessEntry32 que Passamos
Nossa Variavel que Contem esse registro.
Agora Nosso Próximo Passo Será Adicionar os Processos Encontrados
ao Nosso ListBox vamos utilizar o laço Repeat Until,mas Pode Ser Também o While ficando Assim :
aqui Adicionamos o registro SzexeFile ao ListBox como Vimos
Logo Acima Esse Registro
Finaliza o Laço Ate que ele Não Encontre mais Nenhum Processo;
e Por último Fechamos Nosso Handle
Para Utilizar Simplesmente Chame o Procedimento Pelo Evento
Onclick Passando como Parâmetro o ListBox que quer adicionar os
Processos Assim :
Galera é Issu Espero que tenham Gostado do tutorial Fiquei
uma Semana Estudando Sobre essa Api mais issu é o Básico Sobre
Ela ela Tem Inumeras Funções ,Sobre os Modulos dos Processo,Pid,Etc.
Abraços Almeida
Ola Pessoal esse é meu primeiro tutorial para o Fórum, e Venho
Falar um Pouco da API do Windows ToolHelp32 ,Mais Conhecida como
Tlhelp32,essa Api é responsável pela Informações de Todos os Processos
Ocorrendo No Sistema ,Processos em execução , o Foco desse Tutorial
é Apenas Listar os Processos em Execução ,
Mostrando os em um Componente ListBox,bom Galera Vamos
Iniciar um Novo Projeto no Delphi Adicione 2 Componentes :
1 - Button
1 - ListBox
Dando continuidade P/ Trabalhar Com a TlHelp32 em Delphi
Precisamos declarar na Clausula Uses :
TlHelp32;
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,tlHelp32;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,tlHelp32;
listar os Processos ficando Assim :
public
{ Public declarations }
Procedure ListarProcessos(List : TListBox);
{ Public declarations }
Procedure ListarProcessos(List : TListBox);
Nossa Procedure ,Agora Declaramos 2 Variaveis Parar Obtermos informações Sobre os Processos Ficando Assim :
procedure TForm1.ListarProcessos(List: TListBox);
Var Info : THandle;
Tamanho : TProcessEntry32;
begin
end;
Var Info : THandle;
Tamanho : TProcessEntry32;
begin
end;
dos Processo e a Segunda Ficara Responsável por Armzenar o tamanho
do Registro galera Agora Temos que Armazenar as Informações dos
Processos na Variavel Utilizando a Função function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; stdcall;
Essa Função ela cria uma "Foto" de Todos os Processos em execução
Ficando Assim :
Var Info : THandle;
Tamanho : TProcessEntry32;
begin
Info := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
end;
Tamanho : TProcessEntry32;
begin
Info := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
end;
ela é Reponsavel de Adicionar todos os Módulos de dos Processos
do Windows Especificado.
Ja o Segundo Parâmetro th32ProcessID é reponsavel de Identificar o Processo que Desejamos Obter Informações ,passamos o parâmetro
0 para Indicarmos o Processo Atual.
A função CreateToolHelp32 um Handle, Para "Foto" Caso Haja Algum
Erro ela retorna -1 Vejam :
Var Info : THandle;
Tamanho : TProcessEntry32;
begin
Info := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if info = -1 then
begin
MessageBox(handle,Pchar('Erro'),Pchar('By Almeida'),0);
exit;
end else
begin
end;
Tamanho : TProcessEntry32;
begin
Info := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if info = -1 then
begin
MessageBox(handle,Pchar('Erro'),Pchar('By Almeida'),0);
exit;
end else
begin
end;
Vamos Atribuir a Nossa Variavel Info o Tamanho do
Registro Ficando Assim :
Tamanho.dwSize := SizeOf(Tamanho);
Tem Um registro com o Campo DWSIZE,o Campo szExeFile,etc.
O campo dwSize contém o tamanho do registro TProcessEntry32. Esse deve ser inicializado como
SizeOf(TProcessEntry32) antes de usar o registro.
ja o Campo szExeFile
O campo szExeFile é uma string terminada em nulo que contém o nome do caminho e o nome de
arquivo referente ao arquivo EXE ou ao driver associado ao processo.
Agora Chegamos a Parte de Percorrer todos os Processos e Adicionar
ao Nosso Componente ListBox ,Utilizando as Funções
function Process32First(hSnapshot: THandle;
var lppe: TProcessEntry32)
function Process32Next(hSnapshot: THandle;
var lppe: TProcessEntry32): BOOL; stdcall;
Agora utilizaremos uma Condição Para realizar Nossa tarefa de Listar
os Processos Ficando Assim :
Var Info : THandle;
Tamanho : TProcessEntry32;
begin
Info := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if info = -1 then
begin
MessageBox(handle,Pchar('Erro'),Pchar('By Almeida'),0);
exit;
end else
begin
Tamanho.dwSize := SizeOf(Tamanho);
if Process32First(info,Tamanho) then
begin
end;
Tamanho : TProcessEntry32;
begin
Info := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if info = -1 then
begin
MessageBox(handle,Pchar('Erro'),Pchar('By Almeida'),0);
exit;
end else
begin
Tamanho.dwSize := SizeOf(Tamanho);
if Process32First(info,Tamanho) then
begin
end;
que Passamos Nossa Primeira Variavel Como refêrencia
e o segundo Parâmetro var lppe: TProcessEntry32
que é um Registro do Type TProcessEntry32 que Passamos
Nossa Variavel que Contem esse registro.
Agora Nosso Próximo Passo Será Adicionar os Processos Encontrados
ao Nosso ListBox vamos utilizar o laço Repeat Until,mas Pode Ser Também o While ficando Assim :
Var Info : THandle;
Tamanho : TProcessEntry32;
begin
Info := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if info = -1 then
begin
MessageBox(handle,Pchar('Erro'),Pchar('By Almeida CHMOD'),0);
exit;
end else
begin
Tamanho.dwSize := SizeOf(Tamanho);
if Process32First(info,Tamanho) = true then
begin
repeat
List.Items.Add(Tamanho.szExeFile);
until
not Process32Next(info,Tamanho);
CloseHandle(info);
end;
end;
end;
Tamanho : TProcessEntry32;
begin
Info := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if info = -1 then
begin
MessageBox(handle,Pchar('Erro'),Pchar('By Almeida CHMOD'),0);
exit;
end else
begin
Tamanho.dwSize := SizeOf(Tamanho);
if Process32First(info,Tamanho) = true then
begin
repeat
List.Items.Add(Tamanho.szExeFile);
until
not Process32Next(info,Tamanho);
CloseHandle(info);
end;
end;
end;
List.Items.Add(Tamanho.szExeFile);
Logo Acima Esse Registro
not Process32Next(info,Tamanho);
CloseHandle(info);
Para Utilizar Simplesmente Chame o Procedimento Pelo Evento
Onclick Passando como Parâmetro o ListBox que quer adicionar os
Processos Assim :
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Clear; //Limpa o Listbox
ListarProcessos(ListBox1);//Nossa Rotina
end;
begin
ListBox1.Clear; //Limpa o Listbox
ListarProcessos(ListBox1);//Nossa Rotina
end;
uma Semana Estudando Sobre essa Api mais issu é o Básico Sobre
Ela ela Tem Inumeras Funções ,Sobre os Modulos dos Processo,Pid,Etc.
Abraços Almeida
Comment