Solved

How can i pull date from process to delphi

Posted on 2009-07-10
12
259 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 37

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
Back Up Your Microsoft Windows Server®

Back up 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.

 

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
 
LVL 37

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

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say 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
How to open a new windows chrome resized and disabled the toolbar? 3 153
Can’t delete a file 14 179
Dynamically Created Query 3 62
Windows Mail question 15 76
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
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…
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…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…

837 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