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, apenas para testar a função.
Vamos agora precisar dar uses em Tlhelp32. Em seguida vamos declarar a function.

type
  TForm1 = class(TForm)
    Button1: TButton;   
  private
    function ValidarSoftwareAberto(ExeFileName: String): Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;
Agora vamos usar o famoso CTRL + SHIF + C, em cima da function 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;
      private
    function ValidarSoftwareAberto(ExeFileName: String): Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.ValidarSoftwareAberto(ExeFileName: String): Boolean;
begin

end;

end.
Agora vamos a implementação da Function ValidarSoftwareAberto. Observe que a mesma retorna um Boolean, ou seja, se ela retornar TRUE é por que o software esta aberto, caso contrário o mesmo não esta aberto. Veja sua implementação.

function TForm1.ValidarSoftwareAberto(ExeFileName: String): Boolean;
const
   PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := False;

  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase
        (ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase
        (ExeFileName))) then
    begin
      Result := True;
      Exit;
    end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

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

procedure TForm1.Button1Click(Sender: TObject);
Var
  xExeFileName: String;
begin
  xExeFileName := 'chrome.exe';
  if ValidarSoftwareAberto(xExeFileName) then
  begin
    ShowMessage(xExeFileName + ' esta Aberto !!!');
  end
  else
  begin
    ShowMessage(xExeFileName + ' não esta Aberto !!!');
  end;
end; 
Desta maneira caso o xExeFileName não esteja aberto você verá a mensagem ‘chrome.exe não esta Aberto !!!’ e para ver a outra mensagem basta abrir algum programa e olhar no gerenciador de tarefas o seu nome na lista de processos.

Fico por aqui e até o próximo artigo
Um abraço
Wesley Y
www.lithic.com.br