I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
procedure RetIReg; var Registry: TRegistry; begin Registry:=TRegistry.Create; Registry.RootKey:=HKEY_LOCAL_MACHINE; If Registry.OpenKey(\'Den nøgle du vil rette i eller oprette\',True) then begin Registry.WriteString(\'Felt/nøgle der skal rettes\',\'ny værdi\'); Registry.Free; end; end;
Du må uddybe spørgsmålet, hvis du skal have mere hjælp :)
hatecaps>> Der er vel basalt ingen grund til at erklære en navngiven variabel, når der ikke er brug for at referer til den ... Ydligere så har dit eksempel den svaghed at hvis der op står en fejl (exception) på halvvejen så har du et potientielt memory leak ... I stedet vil jeg foreslå den het syntax :
uses registry, windows;
procedure TForm1.RetIReg; var reg : TRegistry; section : string; laest_vaerdi : integer; begin With TRegistry.Create do try RootKey := HEY_LOCAL_MACHINE; Section := \'\\SOFTWARE\\Din nøgle\\Din under-nøgle\'; laest_vaerdi := 0; if OpenKey(section,true) then begin ValueExists(\'tæller\') then laest_vaerdi := ReadInteger(\'tæller\'); WriteInteger(\'tæller\',laest_vaerdi+1); CloseKey; end; finally free; end; end;
aasuper, hatecaps siger at hans eks virker under NT og jeg kan yderligere bekræfte at det også virker under W2K. FDet samme gælder også for borrisholts.
Jens, kan du lige forklare yderligere omkring din bemærkning til hatecaps forslag ? Mener du at fordi han sætter reg := treg...create og først efter bruger try.. final..end at der skulle kunne opstå en graverende fejl i mellem de 2 linier ? Det vil sige at du mener en af disse linier ville kunne betyde at der opstod en fejl der gør at try..final..end ikke udføres:
Du må meget undskylde, men jeg kan ikke lige se hvilken, og hvis der er fejl vil det vise sig i design/compile og ikke senere i runtime.
Så selvom dit forslag ser fint ud, og man under alle omstændigheder sparer reg-variablen (som du jo så har glemt at fjerne fra dit forslag), så kan jeg ikke lige få øje på forskellen mellem de 2 forslag.
Forskellen er ens .. I dette tilfælde er den nærmest tænkt. Der jeg var ude efter var brugen af try..finally..enf bloke ... i hele håndteringen af din regisrty ..
jeg har ikke under søgt det men hvad nu hvis du sætter reg.rootkey := 4711;
\"..sætter reg.rootkey := 4711; Rejser det ikke en execption ?\"
jo jo, men først ved openkey og den ligger jo inden for try..end.
og sætter man de 2 øvrige vars lig med andre værdier (string = integer og omvendt eller lign.) bør man jo få fejlen i compile. (og er vel i grunden en dårlig programmør)
Nu er det ikke mit eks, men derimod hatecaps, men årsagen til at jeg kommenterer det er at jeg gør det på nøjagtigt samme måde som hatecaps gør. Jeg mener at huske at det stammer fra Borlands eget eks. tilbage fra D2 og jeg formoder at hatecaps har det samme sted fra, uden jeg selvfølgeligt kan være sikker.
Jeg siger ikke at hatecaps eks. er bedre end dit, eller omvendt, og jeg havde ikke planlagt at starte en diskution omkring det, men ville blot lige vide hvad du mente med de kommentarer du skrev. Dels fordi jeg som nævnt gør det på samme måde som hatecaps og derfor gerne ville vide hvad du mener der kan gøres bedre/skirere, og dels fordi jeg i øvrigt har stor respekt for din \"delhi\"-viden gennem de indlæg du har her på eksperten og fra mit besøg på din hjemmeside.
Så det var ikke for at kritisere dit forslag, blot for at få præciseret at dine kommentarer og sætte det op mod den måde jeg selv gør det på.
I øvrigt vil jeg lige nævne overfor aasuper, at I begge mangler en præcisering af adgangen til registry. Afhængig af hvilken Delphi version der bruges og hvilken user der logger på, samt hvilke keys i registry der skal rettes (i jeres eks. er det kun Local_Machine der er anvendt) vil det være nødvendigt at specificere adgangen med en linie a la
Yderligere skal det nævnes at hvis der brugges D3 vil Borlands Registry unit ikke virke til skrivning (kun læs virker), pga. af en fejl i beregningen af adgangsrettigheder. Det vil være nødvendigt at erstatte den med en anden, f.eks. MyD3Registry (lavet af en franskmand og fundet på Delphi Super Page) alternativt selv rette Borlands unit til.
hmm, HKEY_LOCAL_MACHINE er defineret som DWORD($80000002), så guø ved hvad der sker hvis man sætter rootkey til 4711 (tysk ansigtsvand i øvrigt). Jeg vil mene at der sker præcist det min try..finally..blok går ud på, at reg bliver frigjort når exceptionen opstår under reg.openkey.
Jens, jeg må ærligt sige at jeg er noget skuffet over at du postede dit eksempel som svar. Jeg vidste godt at der er masser af folk som poster en andens svar i modificeret form, men jeg troede egentlig ikke du var en af dem. Essensen i aasupers spørgsmål var hvordan man retter i registreringsdatabasen, hvilket mit svar helt klart gør. At vi så ikke er enige om hvordan try..finally..end bør bruges, retfærdiggører efter min mening ikke at du poster samme teknik en gang til som dit eget svar.
Jeg syntes de fleste folk her på eksperten er gode til at kommenterer andres svar, hvilket som regel starter interesante dialoger, men altid i form af en kommentar. Du må undskylde, men som du har gjort det her, ser det ud som om du prøver at tiltuske dig point, og det tror jeg egentlig ikke du ville.
Det var så afgjort en fejl jeg postede min kommentar som et svar, men jeg har ingen mulighed for at trække det tilbage, udover at bede AASuper om at afvise mit svar, og dermed betragte det som en kommentar ...
Hvad der ses tydeligt har jeg taget udgangs punkt i dit eksempel ... af samme grund.
De 30 oprindelige point er nu uddelt, så nu er der 30 ekstra point til den, der kan svare på følgende spørgsmål:
Jeg har fra jer fået procedurer, som kan tilføje string og integer til registreringsdatabasen (som REG_SZ og REG_DWORD).
I registreringsdatabasen findes der, udover disse to typer, en slags, som er af binær type. Hvis jeg så f.eks. har denne værdi som en string: 0101011100110001, hvordan kan jeg så tilføje den til registreringsdatabasen som en REG_BINARY-værdi?
type TMyRegRecord = record Value : ShortString; end;
procedure TForm1.Button1Click(Sender: TObject); var MyRegRecord : TMyRegRecord; begin with TRegistry.Create do try RootKey := HKEY_CURRENT_USER; OpenKey(\'\\Software\\Hest\', True); MyRegRecord.Value := \'Her er en hest\'; WriteBinaryData(\'HEST\',MyRegRecord,Sizeof(TMyRegRecord)); finally closekey; free; end; end;
procedure TForm1.Button2Click(Sender: TObject); var MyRegRecord : TMyRegRecord; begin with TRegistry.Create do try RootKey := HKEY_CURRENT_USER; OpenKey(\'\\Software\\Hest\', True); ReadBinaryData(\'HEST\',MyRegRecord, Sizeof(TMyRegRecord)); finally closekey; free; end; Caption := MyRegRecord.Value; end;
Det er det, jeg gerne vil have. Når jeg går ind i registreringsdatabasen og kigger, skal det ligge som 0101011100110001.
Det er nok ikke muligt så.
Mit problem består nemlig i, at jeg vil have en bestemt pop3-kode fra Outlook Express ind i registreringsdatabasen på en hel masse computere ved hjælp af et Delphi-program. Outlook Express gemmer koden i Software\\Microsoft\\Internet Account Manager\\Accounts\\00000001 under \"POP3 Password2\". Jeg vil så aflæse den binære værdi direkte fra registreringsdatabasen. Denne værdi skal så tilføjes en nøgle på en anden computer, så der kommer til at stå den nøjagtig samme binære værdi inde i registreringsdatabasen på de 2 computere.
jooee følg anvisningerne fra før .. dog er tricket her at vide hvor stor en mængde data du skal læse. Det er der ikke mig bekendt ikke åbnet en mulighed for.
Anders : Det er en meget flot side du har laver. Der er nogle meget pæne eksempler ...(Din AATimer har jeg en gang i øvrigt lavet reverse engineering på). Jeg synes du skulle åbne din kilde kode .. Du ved lige som alle os andere der ikke har noget at skjule :-)
Jo jeg ved godt hvordan man gør jeg har jo demmonsteret teknikken et par gange ...Din opgave er at fortlle mig størelsen på det der skal læses så skal jeg sq nok klare resten ....
Jeg opretter det som et selvstændigt spørgsmål, så det fanger nogen flere\'s opmærksomhed.
>>AASuper
Synes godt om
Ny brugerNybegynder
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.