ich hab da eine Funktion die unter WIN32 korrekt funktioniert. Sobald ich aber das ganze unter WinCE/Arm kompilieren will bekommen ich die Meldungen wegen den unterschiedlichen Typen (PChar/PWideChar).
Ich hab versucht nach meinem Verständnis das Ganze auf WideChar umzubauen, aber ohne Erfolg.
Hat da jemand ein Beispiel in der Schublade wie ich mit GetFileVersionInfoSize,GetFileVersionInfo,VerQueryValue die Informationen aus der EXE-Datei auslesen kann unter WinCE/Arm.
Hier noch meine Funkltion für WinXP32
Code: Alles auswählen
// Fileinfo
const
InfoNum = 10;
I_Def = 0;
I_Bez = 1;
I_Value = 2;
I_VersionHand = 1;
I_ProductName = 2;
I_FileVersion = 3;
I_FileDescription = 4;
I_CompanyName = 5;
I_InternalName = 6;
I_LegalCopyright = 7;
I_LegalTradeMarks = 8;
I_OriginalFileName = 9;
I_Comments = 10;
var
InfoStr : array[1..InfoNum] of array[0..2] of string =
(('ProductVersion','Version',''),
('ProductName','Product-Name',''),
('FileVersion','Build-Version',''),
('FileDescription','Description',''),
('CompanyName','Company',''),
('InternalName','Internal-Name',''),
('LegalCopyright','Copyright',''),
('LegalTradeMarks','TradeMarks',''),
('OriginalFileName','Original-Filename',''),
('Comments','Comments',''));
procedure GetDateiInfo(ProgName:string);
var
nInfoSize, Len, i: DWORD;
Buf: PChar;
Value: PChar;
Trans: DWORD;
pTrans: array [0..MAX_PATH] of Char;
s : string;
begin
for i := 1 to InfoNum do
InfoStr[i,I_Value] := '';
nInfoSize := GetFileVersionInfoSize(PChar(ProgName), nInfoSize);
if nInfoSize > 0 then begin
Buf := AllocMem(nInfoSize);
if GetFileVersionInfo(PChar(ProgName), 0, nInfoSize, Buf) then begin
// Erst die Sprache(n) ermitteln und dann abfragen
if VerQueryValue(Buf, '\VarFileInfo\Translation',Pointer(Value), Len) then begin
// erste Sprache holen
Trans := HiWord(PDWORD(Value)^) or (Word(PDWORD(Value)^) shl 16);
wvsprintf(pTrans, '%8.8x', PChar(@Trans));
s := StrPas(pTrans);
end;
for i := 1 to InfoNum do begin
if VerQueryValue(Buf, PChar('\StringFileInfo\'+ s + '\' + InfoStr[i,0]), Pointer(Value), Len) then
InfoStr[i,I_Value] := Value;
end;
end;
FreeMem(Buf, nInfoSize);
end
else InfoStr[I_VersionHand,I_Value] := ('No version information found');
end;