Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизКак получить список всех ресурсов программы с их типами ? Найти похожие ветки
← →
Тем (2005-01-02 02:45) [0]Нужно, чтобы при добавлении ещё одного ресурса не нужно было корректировать код. Вроде это можно как-то сделать через энумерацию ресурсов. Но как ? У кого нибудь есть пример кода, как получить в СтрингЛист список всех ресурсов ?
← →
Adder © (2005-01-02 04:05) [1]Есть код, получающий список ресурсов в ListView -) Переделать, думаю, не сложно
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
ListView1: TListView;
Panel1: TPanel;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ListItem:TListItem;
// Declare callback functions.
Function EnumTypesFunc(
hModule:THANDLE;
lpType:LPTSTR;
lParam:LONGINT):LONGBOOL;stdcall;
Function EnumNamesFunc(
hModule:THANDLE;
lpType:LPCTSTR;
lpName:LPTSTR;
lParam:LONGINT ):LONGBOOL;stdcall;
implementation
{$R *.DFM}
Function EnumTypesFunc(
hModule:THANDLE;// module handle
lpType:LPTSTR;// address of resource type
lParam:LONGINT):LONGBOOL;stdcall;
var Name:string;
begin
ListItem :=Form1.ListView1.Items.Add;
if (DWORD(lpType) and $FFFF0000)<>0 then
begin
ListItem.Caption:=lpType;
ListItem.SubItems.Add("")
end
else
begin
ListItem.Caption:=IntToStr(DWORD(lpType));
case DWORD(lpType) of
{RT_NEWRESOURCE}$2000: Name:="RT_NEWRESOURCE";
{RT_ERROR}$7FFF: Name:="RT_ERROR";
{RT_CURSOR}1: Name:="RT_CURSOR";
{RT_BITMAP}2: Name:="RT_BITMAP";
{RT_ICON}3: Name:="RT_ICON";
{RT_MENU}4: Name:="RT_MENU";
{RT_DIALOG}5: Name:="RT_DIALOG";
{RT_STRING}6: Name:="RT_STRING";
{RT_FONTDIR}7: Name:="RT_FONTDIR";
{RT_FONT}8: Name:="RT_FONT";
{RT_ACCELERATORS}9: Name:="RT_ACCELERATORS";
{RT_RCDATA}10: Name:="RT_RCDATA";
{RT_MESSAGETABLE}11: Name:="RT_MESSAGETABLE";
{RT_GROUP_CURSOR}12: Name:="RT_GROUP_CURSOR";
{RT_GROUP_ICON}14: Name:="RT_GROUP_ICON";
{RT_VERSION}16: Name:="RT_VERSION";
{RT_NEWBITMAP}$2002: Name:="RT_NEWBITMAP(RT_BITMAP|RT_NEWRESOURCE)";
{RT_NEWMENU}$2004: Name:="RT_NEWMENU(RT_MENU|RT_NEWRESOURCE)";
{RT_NEWDIALOG}$2005: Name:="RT_NEWDIALOG(RT_DIALOG|RT_NEWRESOURCE)";
else Name:="";
end;
ListItem.SubItems.Add(Name)
end;
EnumResourceNames(hModule,
lpType,
ENUMRESNAMEPROC(@EnumNamesFunc),
0);
Result:=true;
end;
Function EnumNamesFunc(
hModule:THANDLE;
lpType:LPCTSTR;
lpName:LPTSTR;
lParam:LONGINT ):LONGBOOL;stdcall;
begin
ListItem :=Form1.ListView1.Items.Add;
ListItem.SubItems.Add("");
if (DWORD(lpName) and $FFFF0000)<>0 then
begin
ListItem.SubItems.Add(lpName)
end
else
begin
ListItem.SubItems.Add(IntToStr(DWORD(lpName)))
end;
Result:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ModuleHandle:THandle;
begin
try
ModuleHandle := LoadLibraryEx(pchar(Edit1.Text), 0, LOAD_LIBRARY_AS_DATAFILE);
EnumResourceTypes(modulehandle,
ENUMRESTYPEPROC(@EnumTypesFunc), // callback function
0); // extra parameter
finally
FreeLibrary(ModuleHandle);
CloseHandle(ModuleHandle);
end;
end;
end.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c