[D6][Windows 11 64 bits] Modifier une dll
Bonjour à toutes et à tous,
Depuis le Windows\système32 j'aimerai copier le fichier "imageres.dll" pour modifier le son de démarrage qui se trouve dans la ressource "5080 1033".
Je copie bien le fichier dans le dossier de mon application, je le renomme, je dois le modifier au niveau son puis le recopier en lui rendant son nom dans le dossier protégé "C:\Windows\system32".
Cela fonctionne sauf que le son ajouté n'est pas présent dans la ressource (aStream.SaveToFile(PChar(f)) ;).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
var
aStream: TMemoryStream;
FHandle : THandle;
f : TFileStream;
I : integer;
begin
chappli := ExtractFilePath(Application.ExeName);
wd := Path[CSIDL_SYSTEM] ;
S := 'SosDll' ;
//fs := chappli + '\BackgroundDefault.jpg' ;
fileSource := Wd + '\imageres.dll';
fileDest := chappli +'\imageres_Sos.dll';
BdWav.FileName := '';
BdWav.initialdir := chappli ;
BdWav.Filter := 'Fichier Audio (*.wav)|*.wav|' ;
if not BdWav.Execute then exit else
begin
//f := BdWav.filename ; //l'erreur me semble ici
aStream := TMemoryStream.Create;
aStream.SaveToFile(PChar(f)) ;
try
ChangeFSRedirection(true);//!!!!!!!!!!!!
{ if FileExists(wd + '\imageres_Sos.dll') then
deletefile(wd + '\imageres_Sos.dll'); }
{Teste si le fichier existe, le renomme et recopie l'original}
if FileExists(wd + '\imageres.dll') then begin
CopyFile(PChar(fileSource), PChar(fileDest));
Renamefile(chappli + '\imageres.dll', chappli + '\imageres_Sos.dll') ;
end
else
showmessage('Ce fichier n''existe pas');
{Récupère le Handle du fichier qui contient les ressources à modifier}
FHandle := BeginUpdateResource(PAnsiChar(ExtractFilePath(chappli)+ResDLLName), False);// Edit1.Text .. pour moi
if FHandle <=0 then
begin
ShowMessage(SysErrorMessage(GetLastError));
Exit; // on sort mais le bloc "finally" est exécuté !!
end;
{préparation de la modification (rien n'est encore modifié à ce stade)}
//for I := 1 to 13 do
UpdateResource(FHandle, 'WAVE', MakeIntResource(5080), 1033,
aStream.Memory, aStream.Size);
{les données sont écrites ici}
if not EndUpdateResource(FHandle, False) then
ShowMessage(SysErrorMessage(GetLastError));
ChangeFSRedirection(false);
finally
aStream.Free;
end;
end;
end; |
Si quelqu'un avait une petite idée ou alors mieux que ce que j'ai imaginé, merci d'avance.
Sinon avec les procédures habituelles décrites sur le net pour obtenir un son au démarrage depuis Windows 11 cela ne fonctionne pas.
@+,
cincap