Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

[Tutorial]ToolHelp32

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Delphi [Tutorial]ToolHelp32

    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;

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls,tlHelp32;
    agora vamos em Public e Vamos criar uma Procedure para
    listar os Processos ficando Assim :
    public
    { Public declarations }
    Procedure ListarProcessos(List : TListBox);
    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 :
    procedure TForm1.ListarProcessos(List: TListBox);
    Var Info : THandle;
    Tamanho : TProcessEntry32;
    begin

    end;
    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 :
    Var Info : THandle;
    Tamanho : TProcessEntry32;
    begin
    Info := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    end;
    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 :
    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;
    Agora entre o Begin e End Após o Else
    Vamos Atribuir a Nossa Variavel Info o Tamanho do
    Registro Ficando Assim :

    Tamanho.dwSize := SizeOf(Tamanho);
    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 :

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

    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;
    List.Items.Add(Tamanho.szExeFile);
    aqui Adicionamos o registro SzexeFile ao ListBox como Vimos
    Logo Acima Esse Registro

    not Process32Next(info,Tamanho);
    Finaliza o Laço Ate que ele Não Encontre mais Nenhum Processo;

    CloseHandle(info);
    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 :

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ListBox1.Clear; //Limpa o Listbox
    ListarProcessos(ListBox1);//Nossa Rotina
    end;
    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
    Last edited by .IndependentResearch.; 18-12-2009, 19:52.
    sigpic

  • Font Size
    #2
    Nice topic , depois vou dar uma olhada com calma , continue assim.

    Comment


    • Font Size
      #3
      Muito bom, almeida.
      Assim que tem que ser tópico, bem explicado.

      E só uma "observaçãozinha" xD
      Evitem usar muito essa API, principalmente funçoes mais complexas dela, os antivirus não gostam dessas funções e ficam "falando" que o seu programa é virus

      Flws =)
      Black-Hat.

      Comment

      X
      Working...
      X