[DUG] Getting command lines of all open programs

Jeremy Coulter jscoulter at gmail.com
Fri Feb 13 11:25:07 NZDT 2009


I think some of the stuff at www.madshi.net might also be of some help.

Jeremy

-----Original Message-----
From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz] On
Behalf Of Conor Boyd
Sent: 13 February 2009 08:20
To: NZ Borland Developers Group - Delphi List
Subject: Re: [DUG] Getting command lines of all open programs

John,

Rather than enumerating windows, for this I think you'll want to enumerate
processes instead.

With a quick google for "enumerate windows processes" I found some leads you
could pursue (including this one:
http://www.codeproject.com/KB/threads/enumprocnt5.aspx)

It's definitely relatively easy to get a list of running process ids (PIDs),
and after that I presume there will be some function you can call to tell
you all you need to know about a specific process.

I presume what you want to do is possible since, for example, Sysinternals'
Process Explorer displays the commandline for each process.

Cheers,

Conor

-----Original Message-----
From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz]
On Behalf Of John Bird

Is there a way to make a list of command lines of all open program windows?

I have a utility that already captures the title bar of all open program
windows - I use it when I suspend my laptop in case Windows won't resume
(which it often doesn't) so I can know what windows were open.

The next neat addition would be to have the command lines, so I can then
have an option to reopen the programs that were open last time....now that
would be neat eh?

I remember seeing once a Delphi demo example of a task-manager like program
which probably had stuff like this, but haven't been able to find it...

FYI here is the essentials of how I find the open program windows, in case
someone can see how to extend it a little....the ideal would be to make a
second string list of the matching command lines.  (It gets the titles of
all open windows and writes them into a memo and a disk file).

//http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_
21550337.html
procedure TfrmATMore.ATMakeWindowList;
var
 TopWindow   : HWND;
 WinName     : array[0..Max_Path] of Char;
 x           : Integer;

  function GetAllWindows(Handle: HWND; NotUsed: Pointer): Boolean; stdcall;
  var
   temp,
   pt     : hwnd;
  begin
    Result := True;

    //Get parent of the window
    Temp:=Handle;
    repeat
     pt:=Temp;
     Temp:=GetParent( Temp );
    until (Temp=0);

    if IsWindowVisible(pt) then begin
      //Just add without duplicates
      if frmATMore.WindowList1.IndexOf(Pointer(pt))=-1 then
frmATMore.WindowList1.Add(Pointer(pt));
    end;
  end;

begin
  TopWindow   := Handle;
  WindowList1 := TList.Create;
  Memo1.Lines.Clear;
  memo1.Lines.Add(xfAdate+spc+xfaTime+' Windows open are:');

  try
    If NOT EnumWindows(@GetAllWindows,Longint(@TopWindow)) then
RaiseLastOsError;

    for x := 0 to WindowList1.Count - 1 do
    begin

      GetWindowText(HWND(WindowList1[x]),
                    WinName,
                    SizeOf(WinName) - 1);

      if WinName<>'' then memo1.Lines.add(WinName);
    end;
  finally
    WindowList1.Free;
  end;
  memo1.Lines.add('______________________');

 ......
  memo1.lines.SaveToFile(ATSaveWindowsNamesFile);
end;

_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi at delphi.org.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject:
unsubscribe




More information about the Delphi mailing list