2 Stimmen

Frage zum Einziehen von Prozessinformationen in Delphi?

So wie es aussieht, kann ich die aktuelle Liste der Prozesse in meine Delphi-Anwendung und den Bildnamen ziehen. Ich muss auch die Dateibeschreibung finden und einlesen. Zum Beispiel kann ich dies tun:

Image name                           Description
myfile.exe              

Ich scheine das nicht zu können:

Image name                           Description
myfile.exe                           cool text about my file

Wie kann ich die Beschreibung mit einbeziehen?

4voto

Pauk Punkte 2593

Der folgende Code könnte das Richtige für Sie sein. Er verwendet GetFileVersionInfoSize et GetFileVersionInfo . Sie gibt eine TStringList mit den verschiedenen Bits der Versionsinformationen zurück. Sie werden wahrscheinlich die FileDescription Eintrag. Er basiert auf einem Code aus dem Delphi-Bereich von About.com .

const
  // Version Info sections as stored in Exe
  viCompanyName           = 'CompanyName';
  viFileDescription       = 'FileDescription';
  viFileVersion           = 'FileVersion';
  viInternalName          = 'InternalName';
  viLegalCopyRight        = 'LegalCopyright';
  viLegalTradeMarks       = 'LegalTradeMarks';
  viOriginalFilename      = 'OriginalFilename';
  viProductName           = 'ProductName';
  viProductVersion        = 'ProductVersion';
  viComments              = 'Comments';
  viAuthor                = 'Author';

  VersionInfoNum = 11;
  VersionInfoStr : array [1..VersionInfoNum] of String =
                  (viCompanyName,
                   viFileDescription,
                   viFileVersion,
                   viInternalName,
                   viLegalCopyRight,
                   viLegalTradeMarks,
                   viOriginalFilename,
                   viProductName,
                   viProductVersion,
                   viComments,
                   viAuthor
                   );

function GetFileVersionInformation(FileName : string; ListOut : TStrings) : boolean;
// Code based on the following from About.com / Delphi:
// http://delphi.about.com/cs/adptips2001/a/bltip0701_4.htm
//
// Related: http://www.delphidabbler.com/articles?article=20&printable=1    
var
  n, Len : DWord;
  j : Integer;
  Buf : PChar;
  Value : PChar;
begin
  Result := false;    
  ListOut.Clear;      
  n := GetFileVersionInfoSize(PChar(FileName), n);
  if n > 0 Then
  begin
    Buf := AllocMem(n);
    try
      ListOut.Add('Size='+IntToStr(n));
      GetFileVersionInfo(PChar(FileName),0,n,Buf);
      for j:=1 To VersionInfoNum Do
      begin
        // this was originally working out the Locale ID for United States ($0409)
        // where as we want United Kingdom ($0809)
        // See notes for Chapter 22, page 978 - http://www.marcocantu.com/md4/md4update.htm
        //if VerQueryValue(Buf,PChar('StringFileInfo\040904E4\'+
        //                 InfoStr[j]),Pointer(Value),Len) then
        if VerQueryValue(Buf, PChar('StringFileInfo\080904E4\' + VersionInfoStr[j]), Pointer(Value), Len) then
        begin
          if Length(Value) > 0 Then
          begin
            ListOut.Add(VersionInfoStr[j] + '=' + Value);
          end;
        end;
      end;
    finally
      FreeMem(Buf,n);
      Result := True;
    end;
  end;
end;

Übergeben Sie einfach den vollständigen Dateinamen und eine TStringList an die obige Funktion, dann können Sie einfach das Folgende tun, um die Beschreibung zu erhalten:

Result := ListOut.Values[viFileDescription];

bearbeiten - Die Formatierung des Codes im Hauptbeispiel gefällt mir sehr gut, aber ich glaube nicht, dass es das \' mochte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X