2009-07-11 14 views
2

Wie es aussieht, kann ich die aktuelle Liste der Prozesse in meine Delphi-Anwendung und den Image-Namen ziehen. Ich muss auch die Dateibeschreibung finden und einlesen. Zum Beispiel kann ich dies tun:Frage zum Einziehen von Prozess Info Delphi?

 
Image name       Description 
myfile.exe    

i kann nicht scheinen, dies zu tun:

 
Image name       Description 
myfile.exe       cool text about my file 

Wie kann ich in der Beschreibung auch ziehen?

+0

Ihre Frage ist schlecht formatiert (werfen Sie einen Blick auf die Bearbeitungs-Tools, die SO bietet), aber ich erhalte aus Ihrer "Ich kann tun" -Anweisung, dass Sie die Dateibeschreibung erhalten können. Am Ende fragt man, wie man die Beschreibung "eintippt", die "cooler Text über meine Datei" enthält. Könnten Sie Begriffe etwas genauer verwenden? In welchem ​​Bereich suchen Sie? – Argalatyr

Antwort

4

Der folgende Code könnte das sein, wonach Sie suchen. Es verwendet GetFileVersionInfoSize und GetFileVersionInfo. Es gibt eine TStringList mit den verschiedenen Bits der Versionsinformationen zurück. Sie müssen wahrscheinlich den FileDescription Eintrag wünschen. Es basiert auf einem Code from the Delphi section of 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; 

in der vollständigen Dateinamen übergeben Sie einfach und eine TStringList auf die obige Funktion, dann können Sie die Beschreibung nur bekomme folgendes:

Result := ListOut.Values[viFileDescription]; 

bearbeiten - den Code Liebe Formatierung im Hauptbeispiel dort, glaube nicht, dass es die \ 'gefallen hat.

+0

ListOut sollte ein TStrings sein und sollte nach Wert, nicht nach Referenz übergeben werden. Bitte fangen Sie keine Ausnahmen ein, wenn Sie nicht wirklich damit umgehen wollen. Verwenden Sie einen try-finally-Block, um den zugewiesenen Puffer zu schützen. –

+0

Du bist ein harter Bursche, bitte, ich habe entsprechend gezwängt. Ist das besser? – Pauk

+0

Auch ich bin dankbar für Ihren Rat. Vielen Dank! – Pauk