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)) .
Si quelqu'un avait une petite idée ou alors mieux que ce que j'ai imaginé, merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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
Partager