na guten Abend !
Ich möchte ein kleines tool schreiben, mit dem ich das XP-Manifest nachträglich in compilierte Exe-Files integrieren kann. Also nicht einexternes Manifest namens "Programname.exe.manifest".
Eigentlich klappt das auch schon alles:
Delphi-Quellcode:
function MAKELANGID(const usPrimaryLanguage : WORD;const usSubLanguage : WORD) : WORD;
begin
Result := (usSubLanguage shl 10) or usPrimaryLanguage;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
stream: TFilestream;
hInst: THandle;
ptr: Pointer;
begin
stream := TFileStream.Create('C:\test.manifest', fmOpenRead);
getmem (ptr,Stream.size+1);
try
stream.Seek(soFromBeginning, 0);
stream.read(ptr^, Stream.size);
hInst := BeginUpdateResource('C:\test.exe', false);
if hInst > 0 then begin
UpdateResource(hInst, MakeIntResource(24), '1',
MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL), ptr, Stream.size);
EndUpdateResource(hInst, false);
end;
finally
freemem(ptr, Stream.size+1);
stream.Free;
end;
end;
Das XP-Manifest:
Code:
<?
xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-
com:
asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="
win32"
name="DelphiApplication"
version="1.0.0.0"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="
win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
</assembly>
Zum testen hab ich einfach kurz ein Delphi-Programm mit verschiedenen Controls erstellt, + das gleiche mit eingebundenem XP-Manifest von Delphi. Anschliesend das ohne XP-Manifest mit meinem Programm modifieziert und im
Resource Hacker verglichen, identisch ! Allerdings werden bei dem von mir modifizierten Programm die Controls nicht im XP-Style angezeigt.
Was mach ich falsch ?
gruss