Solved

How can i pull date from process to delphi

Posted on 2009-07-10
12
250 Views
Last Modified: 2012-05-07
Hi, I can pull the process image names from taskmanger into delphi but I want to also pull in the description of each file.

                                           images name      username     cpu   memory     description
for example i can pull in:     sonicT.exe      
but i want to pull in:             sonicT.exe                                                         1.1.0

If you check your own process window you will see descripton at the far raght, well I need to pull that into delphi.
This is my code to pull in image names:


procedure TForm1.Button1Click(Sender: TObject);

var

MyHandle: THandle;

Struct: TProcessEntry32;

begin

try

MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);

Struct.dwSize:=Sizeof(TProcessEntry32);

if Process32First(MyHandle, Struct) then

ListBox1.Items.Add(Struct.szExeFile);

while Process32Next(MyHandle, Struct) do

ListBox1.Items.Add(Struct.szExeFile);

except on exception do

ShowMessage('Error showing process list');

end

end;

Open in new window

0
Comment
Question by:SonicM3
  • 9
  • 2
12 Comments
 

Author Comment

by:SonicM3
ID: 24826713
i am stuck on this people, sorry i am not patient but i am so far behind i am trying to catch up tonight, all night.  
0
 
LVL 36

Expert Comment

by:Geert Gruwez
ID: 24826840
what is this for ?

that's not the description, that's the file version !



function GetFileVersion(const FileName: TFileName): string;

var

  Major, Minor, Release, Build: word;

  size, len: longword;

  handle: THandle;

  buffer: pchar;

  pinfo: ^VS_FIXEDFILEINFO;

begin

    Major := 0;

    Minor := 0;

    Release := 0;

    Build := 0;

    size := GetFileVersionInfoSize(Pointer(FileName), handle);

    if size > 0 then

    begin

      GetMem(buffer, size);

      if GetFileVersionInfo(Pointer(FileName), 0, size, buffer)

      then

        if VerQueryValue(buffer, '\', pointer(pinfo), len) then

        begin

          Major   := HiWord(pinfo.dwFileVersionMS);

          Minor   := LoWord(pinfo.dwFileVersionMS);

          Release := HiWord(pinfo.dwFileVersionLS);

          Build   := LoWord(pinfo.dwFileVersionLS);

        end;

      FreeMem(buffer);

    end;

    result := Format('%d.%d.%d.%d',[Major, Minor, Release, Build]);

end;

Open in new window

0
 

Author Comment

by:SonicM3
ID: 24828286
yer i know i said i want the file description.
ignore the 1.1.0 my program shows the version inside description that was just example.
0
 

Author Comment

by:SonicM3
ID: 24828297
just going to check the code now buddy
0
 

Author Comment

by:SonicM3
ID: 24828304
when i paste this code in its just a blank screen    any ideas?
0
 

Author Comment

by:SonicM3
ID: 24828864
i need to know how to oupput results pls into a listbox via a button.
0
Backup Your Microsoft Windows Server®

Backup all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 
LVL 36

Expert Comment

by:Geert Gruwez
ID: 24829067
do you have anything else working in your "project"
besides this listing of running programs ?
0
 

Author Comment

by:SonicM3
ID: 24829885
my project is massive..but i want to get this working in a blank project first so it outputs into a listbox when button1 is pressed.
0
 

Author Comment

by:SonicM3
ID: 24829950
uses TLHelp32

procedure TForm1.Button1Click(Sender: TObject);
var
MyHandle: THandle;
Struct: TProcessEntry32;
begin
try
MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
Struct.dwSize:=Sizeof(TProcessEntry32);
if Process32First(MyHandle, Struct) then
ListBox1.Items.Add(Struct.szExeFile);
while Process32Next(MyHandle, Struct) do
ListBox1.Items.Add(Struct.szExeFile);
except on exception do
ShowMessage('Error showing process list');
end
end;



this is the code im using VB, it works tho. Can that code be fitted into this code to see fileversion. ?
0
 

Author Comment

by:SonicM3
ID: 24829972
im not using vb, i mean its VB code but works perfect in delphi too.
0
 
LVL 11

Accepted Solution

by:
dougaug earned 500 total points
ID: 24852883
Hi SonicM3,

I've made the following code. See if it's what you are looking for.

Regards,
function GetFileDescription(FileName: string): string;

var

  FileVersionInfo: Pointer;

  FileVersionInfoSize: Cardinal;

  handle, FileInformationSize: Cardinal;

  TranslationTable: Pointer;

  FileDescription: PChar;

begin

  try

    FileVersionInfoSize := GetFileVersionInfoSize(PChar(FileName), handle);
 

    if FileVersionInfoSize = 0 then

      RaiseLastOSError;
 

    GetMem(FileVersionInfo, FileVersionInfoSize);
 

    if GetFileVersionInfo(Pchar(FileName), 0, FileVersionInfoSize, FileVersionInfo) then

    begin

       if not VerQueryValue(FileVersionInfo, '\VarFileInfo\Translation', TranslationTable, FileInformationSize) then

         RaiseLastOSError;
 

       if not VerQueryValue(FileVersionInfo,

                            PChar('StringFileInfo\' +

                            Format ('%0.4x%0.4x', [LoWord(PInt(TranslationTable)^),

                                                   HiWord(PInt(TranslationTable)^)]) +

                            '\FileDescription'),

                            Pointer(FileDescription), FileInformationSize) then

         RaiseLastOSError;
 

       Setstring(Result, FileDescription, StrLen(FileDescription));

    end;

  except

    Result := '';

  end;

end;
 

procedure TForm1.Button1Click(Sender: TObject);

var

  ProcessSnapshotHandle, ProcessModuleSnapshotHandle: THandle;

  Struct: TProcessEntry32;

  Module: TModuleEntry32;

  FilePath: String;

begin

  ListBox1.Clear;

  try

    ProcessSnapshotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);

    Struct.dwSize := Sizeof(TProcessEntry32);
 

    if Process32First(ProcessSnapshotHandle, Struct) then

    begin

      if Struct.th32ProcessID <> 0 then

      begin

        ProcessModuleSnapshotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, Struct.th32ProcessID);

        FilePath := Struct.szExeFile;
 

        if ProcessModuleSnapshotHandle <> Cardinal(-1) then

        begin

          Module.dwSize := Sizeof(TModuleEntry32);
 

          if Module32First(ProcessModuleSnapshotHandle, Module) then

            FilePath := Module.szExePath;

        end;
 

        ListBox1.Items.Add(String(Struct.szExeFile) + '   ' + GetFileDescription(FilePath));

      end

      else

        ListBox1.Items.Add(Struct.szExeFile);

    end;
 

    while Process32Next(ProcessSnapshotHandle, Struct) do

    begin

      if Struct.th32ProcessID <> 0 then

      begin

        ProcessModuleSnapshotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, Struct.th32ProcessID);

        FilePath := Struct.szExeFile;
 

        if ProcessModuleSnapshotHandle <> Cardinal(-1) then

        begin

          Module.dwSize := Sizeof(TModuleEntry32);
 

          if Module32First(ProcessModuleSnapshotHandle, Module) then

            FilePath := Module.szExePath;

        end;
 

        ListBox1.Items.Add(String(Struct.szExeFile) + '   ' + GetFileDescription(FilePath));

      end

      else

        ListBox1.Items.Add(Struct.szExeFile);

    end;
 

  except

    ShowMessage('Error showing process list');

  end;

end;

Open in new window

0
 

Author Closing Comment

by:SonicM3
ID: 31602219
great
0

Featured Post

Get up to 2TB FREE CLOUD per backup license!

An exclusive Black Friday offer just for Expert Exchange audience! Buy any of our top-rated backup solutions & get up to 2TB free cloud per system! Perform local & cloud backup in the same step, and restore instantly—anytime, anywhere. Grab this deal now before it disappears!

Join & Write a Comment

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
I'm a big fan of Windows' offline folder caching and have used it on my laptops for over a decade.  One thing I don't like about it, however, is how difficult Microsoft has made it for the cache to be moved out of the Windows folder.  Here's how to …
The Task Scheduler is a powerful tool that is built into Windows. It allows you to schedule tasks (actions) on a recurring basis, such as hourly, daily, weekly, monthly, at log on, at startup, on idle, etc. This video Micro Tutorial is a brief intro…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

705 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now