2013-02-11 7 views
5

Ich erstelle ein "Version Info" -Dialogfeld für meine Anwendungen; etwas Ähnliches wie das, das Delphi im Dialogfeld "Über" hat. Ich möchte die Versionsinformationen nur für die Laufzeitpakete anzeigen (.BPL Dateien) und nicht alle geladenen DLLs. Enthält die RTL Funktionen, um eine Liste der geladenen Pakete zu erhalten, oder muss ich die EnumProcessModules Funktion verwenden und das Ergebnis filtern?Wie bekomme ich eine Liste von geladenen Laufzeitpaketen?

Vielen Dank im Voraus ...

Antwort

7

können Sie die von SystemEnumModules-Funktion verwenden.

Hier ist eine sehr einfache Demonstration der Verwendung der EnumModules Funktion und die Namen aller geladenen BPL's. Es ist eine Konsolenanwendung, aber der Code kann leicht in einer Produktionsanwendung wiederverwendet werden. Wenn Sie es testen möchten, stellen Sie sicher, dass Sie Pakete verwenden:

program Project17; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils, Classes, Windows; 

function EnumModulesFunc(HInstance: Integer; Data: Pointer): Boolean; 
var Buff:array[0..1023] of char; 
begin 
    if GetModuleFileName(HInstance, @Buff, SizeOf(Buff)) = ERROR_INSUFFICIENT_BUFFER then 
    Buff[High(Buff)] := #0; 
    TStringList(Data).Add(Buff); 
end; 

var L: TStringList; 

begin 
    try 
    L := TStringList.Create; 
    try 
     System.EnumModules(EnumModulesFunc, L); 
     WriteLn(L.Text); 
    finally L.Free; 
    end; 
    Readln; 
    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
end. 
Verwandte Themen