加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何获取加载的运行时包列表?

发布时间:2020-12-15 09:32:10 所属栏目:大数据 来源:网络整理
导读:我正在为我的应用程序创建一个“版本信息”对话框;类似于Delphi在“关于”对话框中的内容.我想只显示运行时包(.BPL文件)的版本信息,而不是所有加载的DLL. RTL是否包含获取已加载包列表的函数,或者我必须使用 EnumProcessModules 函数并过滤结果? 提前致谢…
我正在为我的应用程序创建一个“版本信息”对话框;类似于Delphi在“关于”对话框中的内容.我想只显示运行时包(.BPL文件)的版本信息,而不是所有加载的DLL. RTL是否包含获取已加载包列表的函数,或者我必须使用 EnumProcessModules函数并过滤结果?

提前致谢…

解决方法

您可以使用System中的 EnumModules功能.

这是一个非常简单的演示,说明如何使用EnumModules函数并获取所有加载的BPL的名称.它是一个控制台应用程序,但代码可以很容易地在生产应用程序中重用.如果你想测试它,请确保你正在使用包:

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读