2013-02-11 10 views
5

Tworzę okno dialogowe "Informacje o wersji" dla moich aplikacji; coś podobnego do tego, które ma Delphi w oknie dialogowym "O programie". Chciałbym wyświetlić informacje o wersji tylko dla pakietów uruchomieniowych (pliki .BPL), a nie wszystkie załadowane biblioteki DLL. Czy RTL zawiera funkcje, aby uzyskać listę załadowanych pakietów, czy też muszę użyć funkcji EnumProcessModules i odfiltrować wynik?Jak uzyskać listę załadowanych pakietów uruchomieniowych?

góry dzięki ...

Odpowiedz

7

Można użyć funkcji EnumModules z System.

Oto bardzo prosta demonstracja, jak korzystać z funkcji EnumModules i uzyskać nazwy wszystkich załadowanych BPL's. Jest to aplikacja konsolowa, ale kod można łatwo ponownie wykorzystać w aplikacji produkcyjnej. Jeśli chcesz przetestować, upewnij się, że używasz pakietów:

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. 
Powiązane problemy