Solved

How can i pull date from process to delphi

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

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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

So who is this article for? If you are like most of the computer users out there, you probably only realize the meaning of 'System maintenance' after something goes wrong. This article is for you if you care about keeping your system working opti…
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…
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
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…

863 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

23 Experts available now in Live!

Get 1:1 Help Now