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.


About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist