So, ich habe mal ein wenig rumgespielt. Hier ist jetzt die Lösung.
Delphi-Quellcode:
procedure GetCPLCaptions(CPLFileName: String; Strings: TStrings);
var
DLLHandle: Cardinal;
I: Integer;
P: Pointer;
CPLInfo: TCPLInfo;
ResStringRec: TResStringRec;
begin
DLLHandle := LoadLibrary(PChar(CPLFileName));
if DLLHandle <> INVALID_HANDLE_VALUE then
try
P := GetProcAddress(DLLHandle, 'CPlApplet');
if P <> nil then
begin
for I := 0 to Pred(TCPLApplet(P)(HInstance, CPL_GETCOUNT, 0, 0)) do
begin
TCPLApplet(P)(HInstance, CPL_INQUIRE, I, Integer(@CPLInfo));
ResStringRec.Module := @DLLHandle;
ResStringRec.Identifier := CPLInfo.idName;
Strings.Add(LoadResString(@ResStringRec));
end;
end;
finally
FreeLibrary(DLLHandle);
end;
end;
Beispiel für den Aufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
GetCPLCaptions('
C:\WINNT\system32\hdwwiz.cpl', Memo1.Lines);
end;
Viel Spass. Ich werde das ganze jetzt mal noch dokumentieren und dann in die CodeLibrary werfen
...
...
P.S.: Die
Unit CPL muss in die USES-Klausel aufgenommen werden.