Here is a program that uses the Windows API function EnumWindows to find and return all top-level windows or running programs. Calls to EnumWindows take two parameters, a pointer to a callback procedure which is passed the handle of each top-level window and an arbitrary parameter which I use to pass the address of a Tstringlist to hold the results.
I made three versions of the callback procedure called from three different buttons - NextWindow builds a list window titles, NextProgram builds a list running programs, and NextBoth builds a list with both. Callback procedures must be specified with stdcall so that parameters passed by EnumWindows are interpreted correctly.
The code to retrieve the program associated with a window handle is contained in function GetWindowExeName which returns a string representing the executable name. The details of this function are a mystery to me - I lifted it from the Delphi section of experts-exchange.com with a minor correction or two. I filter out duplicate occurrences so that only each program only appears once in the resulting list.
A final button tests the main motivation for this program; an IsRunning function which takes a program name as a parameter and returns true or false depending on whether that program is currently running.
| Created: February 4, 2003 |
Modified: November 07, 2008 |