2013-02-11 19 views
5

私のアプリケーション用の「バージョン情報」ダイアログボックスを作成しています。 Delphiの[バージョン情報]ダイアログボックスにあるものと同様のものです。私はランタイムパッケージ(.BPLファイル)のバージョン情報だけを表示したいのですが、ロードされたDLLのすべてではありません。 RTLにはロードされたパッケージのリストを取得する関数が含まれているか、またはEnumProcessModules関数を使用して結果をフィルタリングする必要がありますか?あなたはSystemからEnumModules機能を使用することができ、事前にロードされた実行時パッケージのリストを取得する方法は?

おかげで...

答えて

7

ここでは、EnumModules関数を使用して読み込まれたすべての名前を取得する方法の非常に簡単なデモンストレーションです。BPL'sこれはコンソールアプリケーションですが、コードは運用アプリケーションで簡単に再利用できます。テストする場合は、パッケージを使用していることを確認してください。

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. 
関連する問題