Solved

Listing the running applications with memory & processor usage

Posted on 2004-04-01
11
231 Views
Last Modified: 2010-04-05

Hi Experts,

I have a good one ;)

I'd like a procedure that will return the list of running applications  and the amount of memory and processor used by each, at a particular moment. The idea is to monitor the system's behaviour for various reasons so I'll be calling this procedure very often.

I hope I'm being clear enough, thank you,

Esopo.
0
Comment
Question by:Esopo
  • 7
  • 4
11 Comments
 
LVL 11

Accepted Solution

by:
shaneholmes earned 320 total points
ID: 10738185
Hmmmm, this will give you the list of running applications (Processes)

uses TLHelp32
var
  hSnapshot : THandle;
  ProcessEntry : TProcessEntry32;
  done : BOOL;
begin
  try
    hSnapshot := CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
    ProcessEntry.dwSize := sizeof( TProcessEntry32 );
    done := Process32First( hSnapshot, ProcessEntry );
    while ( done = true ) do begin
      ////////////////////////////////////  ListBox1.Items.Add((ProcessEntry.szExeFile));
      done := Process32Next( hSnapshot, ProcessEntry );
    end;
  finally
    CloseHandle( hSnapshot );
  end;
end;


Let me see what I can come up for the CPU useage of each....

I believe there is a function in the API which resembles something like

GetProcessTime(.....................................);

Shane
0
 
LVL 11

Expert Comment

by:shaneholmes
ID: 10738217
Something like

  PH : THandle;
  hProcess : THandle;

  lpCreationTime,
  lpExitTime,
  lpKernelTime,
  lpUserTime : TFileTime;


  hProcess:= GetProcessId(?);

  PH := OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, hProcess);

  if PH <> 0 then
  GetProcessTimes(PH, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime);

 Shane
0
 
LVL 14

Author Comment

by:Esopo
ID: 10745529
Shane,

Your process listing codes works very well. The GetProcessTimes I don't understand. I tried to place it somewhere in the middle and it started by asking for a declaration for GetProcessId.

I played around with the ProcessEntry information and realized most of the process had parent processes (ProcessEntry.th32ParentProcessID). Although its excellent to have the process list (and its processor usage eventually ;) I would also need the user friendly names of this process or a list of the running applications so the user know what  IEXPLORER.EXE is, something like "Hotmal.com - Microsoft Internet Explorer" insted of the exe name.

Basically what I want is to provide the user (and my application) with a list similar to the task administrator in Win2000, with a list of the current applications, a list of the process with CPU usage + memory usage and my own performance algorithms.

I'll be doing my own research about this, but any help here will be very useful.

Thanks,

Esopo.
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 14

Author Comment

by:Esopo
ID: 10771191
I think the answer for the processor usage is in this link (thanks shane for the google groups idea, I wasn't aware google had news groups ;)

http://groups.google.com/groups?hl=es&lr=&ie=UTF-8&oe=UTF-8&threadm=3ec24268%241%40newsgroups.borland.com&rnum=8&prev=/groups%3Fq%3DDelphi%2B%2B%2BlpCreationTime%26hl%3Des%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3D3ec24268%25241%2540newsgroups.borland.com%26rnum%3D8

Can you help me make sense of this?
0
 
LVL 14

Author Comment

by:Esopo
ID: 10771201
0
 
LVL 11

Expert Comment

by:shaneholmes
ID: 10771228
Yeah, don't you love google groups!

<SMILE>

You dont need all that, cause you have that code already

Basically, to get the CPU useage time, you take the Now time and minus the lpCreationTime

Remember to use the FileTimeToDateTime function i posted in the other post, to convert lpCreationTime to a TDateTime

Also, when you subtract these, you are going to get the number of days between those, which you will have to multiple by 24 to get the number of hours.

There are lots of Function on Google groups to get what you are looking for - i.e. diff between dates
0
 
LVL 14

Author Comment

by:Esopo
ID: 10771248
> Yeah, don't you love google groups!
I think I'm about to!

I guess what we have up until here is about all I need for the CPU part.

Now, two things:
First I guess the easiest one is the list of the running applications. You gave me the process, although I appreciate that, I need the applications as well cause my users won't get what those small names will stand for.

Then there's the memory usage, you think you can help me with that?
0
 
LVL 11

Expert Comment

by:shaneholmes
ID: 10771293
Let me see what i can come up with

Shane
0
 
LVL 14

Author Comment

by:Esopo
ID: 10982201
Hey Shane, sorry to leave this Q unattended for so long.
I'm still missing the memory usage thing, but will see into it this week, maybe we'll have a solution by friday.

Thank you for your constant help!
0
 
LVL 14

Author Comment

by:Esopo
ID: 11642162
Hey Shane!

I'm back. I know I deserve a name-calling session for leaving this Q out in the open for so long, but I had some issues that parted me from the net for a while.

Anyway, I'm back, got my hands on this project again and plan to see it through very soon. I'll be burning my brain with the code, hopefully we can come up with a function that will serve the delphi community for many years to come... (I feel I owe, you know?)

I'll be back with my findings very soon.

Esopo.
0
 
LVL 14

Author Comment

by:Esopo
ID: 11964981
This has been open too long. I am one step away from getting my code to work but can't find the time to finish it, as soon as I get it right I'll post it here for future reference, thanks for you help.

Also, this is supported by the information here:
http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20945822.html
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Delphi: how to send PJL commands to printer 3 109
Tviruailstringtree sort multi columns on header click 1 76
DBGrid or StringGrid ? 6 105
update joined tables 2 55
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question