Getting Application List

Getting Application List

How can I get a list of currently running applications and, more importantly, handles to their windows?

For that you have to use the Windows API call, EnumWindows. This uses a user-defined callback function that performs some actions as each window is found. Below is some code that will load a list box of all window titles.

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls;type  TForm1 = class(TForm)    Button1: TButton;    ListBox1: TListBox;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  Form1: TForm1;implementation{$R *.DFM}function EnumWinProc(Wnd : HWND; frm : TForm1) : Boolean; Export; {$IFDEF Win32}StdCall;{$ENDIF}var  WinText : Array[0..255] of Char;begin  GetWindowText(Wnd, WinText, 255);  Result := True;  if (StrPas(WinText)  '') then  frm.ListBox1.Items.Add(StrPas(WinText));end;procedure TForm1.Button1Click(Sender: TObject);begin  EnumWindows(@EnumWinProc, LongInt(Self));end;end.

Notice that the second parameter of EnumWindows passes the form’s handle to the EnumWinProc callback. This enables us to load the list box.

Also, the declaration for EnumWinProc has a compiler directive. For Win32, you need to include the stdcall directive. It’s not necessary for Win16.


Share the Post: