Olá galera, vamos a esta este artigo, que tem a função de mostra se um determinado aplicativo esta aberto, esta função é bem legal, e pode ser aproveitada para evitar que seu software seja aberto mais de uma vez, vamos a implementação da mesma. Criamos uma aplicação e nela incluímos um TButton e um TListBox.
Vamos agora precisar dar uses em Tlhelp32. Em seguida vamos declarar a procedure.

type
  TForm1 = class(TForm)
    Button1: TButton; 
    ListBox1: TListBox;  
  Private
      procedure ListarProcessosAbertos;
    { Private declarations }
  public
    { Public declarations }
  end;
Agora vamos usar o famoso CTRL + SHIF + C, em cima da procedure para poder implementar seu código deverá ficar assim.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Tlhelp32;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
      private
    procedure ListarProcessosAbertos;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListarProcessosAbertos;
begin

end;

end.
Agora vamos a implementação da procedure ListarProcessosAbertos. Veja sua implementação.

procedure TForm1.ListarProcessosAbertos;
const
   PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  ListBox1.Clear;
  while Integer(ContinueLoop) <> 0 do
  begin
    ListBox1.Items.Add(FProcessEntry32.szExeFile);
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
  ListBox1.Sorted := True; //Serve para ordenar a lista dos processos por ordem alfabética
end;

Agora para testar a mesma precisamos usar o evento onClick do TButton, e implementar o seguinte código.

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListarProcessosAbertos;
end; 
Veja o resultado da minha lista de processos abertos.


Observe que o ListBox esta com colunas, isso você pode configurar na propriedade Columns, no meu caso eu coloquei 3 colunas. Você pode adicionar em vários outros componentes só para lembrar, Combobox, CheckListBox, Memo, RichEdit, entre outros.

Fico por aqui e até o próximo artigo

Um abraço
Wesley Y
www.lithic.com.br