Avatar billede nca Juniormester
08. februar 2008 - 10:48 Der er 6 kommentarer og
1 løsning

Skrive HEX værdier til registry

Jeg vil gerne fra Delphi skrive nedenstående HEX værdier til registry.
Jeg ved godt hvordan man bruger registry, jeg er bare ikke med på, hvorledes jeg får HEX værdier ind i registry.

Jeg ønsker ikke at importere registryfilen ind vha. af RegEdit.exe /S, da mine brugere ikke har de fornødne rettigheder.

Her er de hex-værdier, jeg gerne vil h' skrevet:

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\WebBrowser]
"{01E04581-4EEE-11D0-BFE9-00AA005B4383}"=hex:81,45,e0,01,ee,4e,d0,11,bf,e9,00,\
  aa,00,5b,43,83,10,00,00,00,00,00,00,00,01,e0,32,f4,01,00,00,00
"{0E5CBF21-D15F-11D0-8301-00AA005B4383}"=hex:21,bf,5c,0e,5f,d1,d0,11,83,01,00,\
aa,00,5b,43,83,22,00,1c,00,08,00,00,00,06,00,00,00,01,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,4c,00,00,00,01,14,02,00,00,00,00,00,c0,00,00,00,00,\
00,00,46,81,00,00,00,10,00,00,00,ef,29,58,d0,2f,3b,c8,01,db,3b,73,19,8d,69,\
c8,01,10,59,ec,19,24,2c,c4,01,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,69,01,14,00,1f,50,e0,4f,d0,20,ea,3a,69,10,a2,d8,\
08,00,2b,30,30,9d,19,00,2f,43,3a,5c,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,5c,00,31,00,00,00,00,00,47,38,e5,66,10,00,44,4f,43,55,4d,\
45,7e,31,00,00,44,00,03,00,04,00,ef,be,94,30,25,70,47,38,e5,66,14,00,00,00,\
44,00,6f,00,63,00,75,00,6d,00,65,00,6e,00,74,00,73,00,20,00,61,00,6e,00,64,\
00,20,00,53,00,65,00,74,00,74,00,69,00,6e,00,67,00,73,00,00,00,18,00,42,00,\
31,00,00,00,00,00,93,37,ed,61,10,00,44,4f,4d,41,49,4e,7e,31,00,00,2a,00,03,\
00,04,00,ef,be,8a,37,e7,6a,47,38,d6,68,14,00,00,00,64,00,6f,00,6d,00,61,00,\
69,00,6e,00,6e,00,63,00,61,00,00,00,18,00,58,00,31,00,00,00,00,00,8a,37,ee,\
6a,11,00,46,4f,52,45,54,52,7e,31,00,00,40,00,03,00,04,00,ef,be,8a,37,e7,6a,\
47,38,6c,66,14,00,2a,00,46,00,6f,00,72,00,65,00,74,00,72,00,75,00,6b,00,6e,\
00,65,00,00,00,40,73,68,65,6c,6c,33,32,2e,64,6c,6c,2c,2d,31,32,36,39,33,00,\
18,00,44,00,31,00,00,00,00,00,9b,30,76,36,10,00,48,59,50,45,52,4c,7e,31,00,\
00,2c,00,03,00,04,00,ef,be,8a,37,e7,6a,47,38,6c,66,14,00,00,00,48,00,79,00,\
70,00,65,00,72,00,6c,00,69,00,6e,00,6b,00,73,00,00,00,18,00,00,00,60,00,00,\
00,03,00,00,a0,58,00,00,00,00,00,00,00,63,37,30,30,31,36,00,00,00,00,00,00,\
00,00,00,00,56,2b,c9,84,ad,a8,0c,42,a8,71,eb,1f,5c,c3,87,ed,94,9a,35,e6,ca,\
a7,dc,11,93,2a,00,01,6c,8f,72,ee,56,2b,c9,84,ad,a8,0c,42,a8,71,eb,1f,5c,c3,\
87,ed,94,9a,35,e6,ca,a7,dc,11,93,2a,00,01,6c,8f,72,ee,00,00,00,00
"ITBarLayout"=hex:11,00,00,00,4c,00,00,00,00,00,00,00,34,00,00,00,1f,00,01,00,\
6d,00,00,00,01,00,00,00,a0,06,00,00,a0,0f,00,00,05,00,00,00,62,04,00,00,26,\
00,00,00,02,00,00,00,a1,06,00,00,a0,0f,00,00,04,00,00,00,a1,00,00,00,a0,0f,\
00,00,03,00,00,00,a0,02,00,00,00,00,00,00,06,00,00,00,e0,04,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,01,29,75,47,54,f5,90,43,99,96,22,c6,7a,b7,64,f1,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Avatar billede pidgeot Nybegynder
08. februar 2008 - 15:18 #1
Opbyg en string med de egentlige bytes (ikke i den der kodede form), og brug TRegistry.WriteBinaryData til at skrive det. Jeg kan ikke lige huske om du kan bruge stringen direkte, eller om den skal castes til en PChar, men compileren burde brokke sig hvis det er.
Avatar billede nca Juniormester
08. februar 2008 - 18:14 #2
Jeg har bygget en streg op af #$hexværdi1#$Hexværdi2 osv.
Den færdige procedure ser således ud:

procedure TForm1.Button1Click(Sender: TObject);
var RegValue: String;
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
  Reg.RootKey := HKEY_CURRENT_USER;
  if Reg.OpenKey('Software\Microsoft\Internet Explorer\Toolbar\WebBrowser', True) then begin
    RegValue := #$81#$45#$e0#$01#$ee#$4e#$d0#$11#$bf#$e9#$00#$aa#$00#$5b#$43#$83#$10#$00#$00#$00#$00#$00#$00#$00#$01#$e0#$32#$f4#$01#$00#$00#$00;
    Reg.WriteBinaryData('{01E04581-4EEE-11D0-BFE9-00AA005B4383}', RegValue[1], Length(RegValue));
    Reg.CloseKey;
  end;
finally
  Reg.Free;
end;
end;

Det virker fint, men bliver helt uoverskueligt ved de store mængder data, jeg skal ha' lagt ind, så jeg skal nok finde en helt anden metode :-(
Avatar billede pidgeot Nybegynder
08. februar 2008 - 18:52 #3
Skriv/find en parser til .reg-filer, og indlæs i stedet din .reg-fil (der er forskellige metoder du kan bruge for ikke at skulle levere både din .exe og din .reg, eks. ved at inkludere .reg-filen som en ressource. Det andet bliver, som du selv siger, noget rod.
Avatar billede hrc Mester
11. februar 2008 - 21:56 #4
nca's løsning med WriteBinaryData er lige ud ad landevejen. Bruger samme fremgangsmåde (med en stream og dens memory-property i stedet for strengen). Den og hvis de binære værdier gemmes i exe-filen, som en ressource, er det da en homogen løsning.
Avatar billede nca Juniormester
12. februar 2008 - 08:25 #5
Jeg har droppet projektet, da det ikke var den rigtige løsning på problemet, men jeg lige spørgsmålet stå åbent lidt endnu, da jeg jo aldrig ved, hvornår jeg igen får brug for at kunne skrive binære værsier i registry.
Smid et svar, hvis I vil ha' nogle af pointene. Ellers bliver jeg jo nødt til at ta' dem selv ;-)
Avatar billede hrc Mester
13. februar 2008 - 14:50 #6
Jeg bruger det meget idet jeg gemmer skærmens dimensioner og position. På den måde slipper jeg for 4 værdier men læser bare én klump data direkte ned i en record.

I øvrigt gemmer jeg ikke formens left, top, width og height, men dens relative position og størrelse i forhold til skærmopløsningen hvorpå den vises. Nogle gange gemmer jeg disse oplysninger i en database hvorved de følger en brugers login - og så fungerer det uanset skærmopløsningen på maskinen hvorpå han logger ind.
Avatar billede nca Juniormester
10. april 2008 - 20:10 #7
Jeg lukker spørgsmålet.
Tak til dem, der deltog i debatten.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester