Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Pascal
Expertise: Beginner
Jun 15, 1998

Getting Application List

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

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

interface

uses
  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.

DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date