registry

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
pede
Beiträge: 90
Registriert: 08.07.2007 20:37
Wohnort: brixen / Italien

registry

Beitrag von pede »

Hy

ich versuch grad einen neuen Registry Eintrag mit der WinApi zu machen, gelingt mir aber überhaupt net =(

Code: Alles auswählen

; Erstellt einen registry Eintrag
Text$ = "Testwert"
SubAdresse$ = "Software\Easy_Termin\"


If RegCreateKey_(HKEY_CURRENT_USER, SubAdresse$, myRegKey) = #ERROR_SUCCESS
    RegSetValue_(HKEY_CURRENT_USER, SubAdresse$, REG_SZ, Text$, SizeOf(Text$))
    RegCloseKey_(myRegKey)
Else
    Debug "Fehler"

EndIf
Und gleich noch ne Frage:
(EDIT: der Code ist aus dem WinApi Guide kopiert)

Code: Alles auswählen

Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
was bedeutet denn ByVal und phkResult?
Zuletzt geändert von pede am 01.08.2007 18:06, insgesamt 1-mal geändert.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Code: Alles auswählen

If RegCreateKey_(#HKEY_LOCAL_MACHINE,SubAdresse$,@myRegKey)=0
    RegSetValueEx_(myRegKey,"Dein Eintrag",0,#REG_SZ,"Dein Wert",Len("Dein Wert")+SieOf(character))
    RegCloseKey_(ukey)
EndIf
Oder benutz eine Lib, zum Beispiel die Registry UserLib für PB 4.xx
Zuletzt geändert von a14xerus am 01.08.2007 15:44, insgesamt 1-mal geändert.
pede
Beiträge: 90
Registriert: 08.07.2007 20:37
Wohnort: brixen / Italien

Beitrag von pede »

Danke für die Antwort a14xerus

Warum nimmst du RegSetValueEx und nicht RegSetValue?
wieso das @ vor myRegKey? soll das nicht ein LONG sein?
warum noch + SizeOf(character)?
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

>Warum nimmst du RegSetValueEx und nicht RegSetValue?
Weil ich das schon so in einem Meiner Programme benutze, und mir jetzt nicht noch die RegSetValue Funktion anguckt habe.. die sollte aber eigentlich so ähnlich aussehen.
>wieso das @ vor myRegKey? soll das nicht ein LONG sein?
es ist (auf 32bit Systemen) auch ein Long, aber ein Pointer
Win32.hlp hat geschrieben:// address of handle of open key
Dann bekommt die Variable myRegKey als Wert das Handle zum offenen Key
>warum noch + SizeOf(character)?
Kp ob man das auch weglassen kann, aber eigentlich ist das das 0 Byte am Ende (Bei Unicode eben 2 Null Bytes)
pede
Beiträge: 90
Registriert: 08.07.2007 20:37
Wohnort: brixen / Italien

Beitrag von pede »

aha

ist nicht das "*" das Zeichen für einen Pointer?
was ist der Unterschied zwischen @ und * ?

PS: grat probiert, obs auch ohne +SizeOf(Character) funzt: ja tut es!
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Code: Alles auswählen

mem.l ; < eine Long Variable mit dem Namen "mem"
*mem ; < Eine Variable mit dem Namen "*mem" (* kennzeichnet das Format was für andles benutzt wird (je nach System eine 16, 32, 64 bit variable.. aber eigentlich egal, da PB nur 32 bit optimiert...))
@mem ; < Ein Pointer auf die variable mem. kennzeichnet die Position im Speicher

mem = 50
*mem = 50
debug mem
debug *mem
debug @mem
pede
Beiträge: 90
Registriert: 08.07.2007 20:37
Wohnort: brixen / Italien

Beitrag von pede »

okey verstanden.

Danke für die schnellen Antworten.

eine letzte Frage bleibt noch, dann bin ich glücklich für heute:
was ist ByVal und was phkResult?
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Re: registry

Beitrag von a14xerus »

pede hat geschrieben:

Code: Alles auswählen

Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
was bedeutet denn ByVal und phkResult?
Sieht nicht grade nach PB Code aus.
Dieser Code deklariert eine Funktion aus der DLL advapi32 mit dem Namen RegCreateKey und den Übergabewerten hkey.l, *lpSubKey, phkResult

phkResult bedeutet das ein Pointer zu einer Variablen angeben werden sol, die dann das Ergebnis (result) enthält
*lpSubKey Erwartet einen Pointer zu einem String (kannst auch alternativ direkt den String übergeben, macht PB automatisch)
hkey ist der normale HKEY_......

ByVal steht für eine direkte Variable-üebrtragung
Zuletzt geändert von a14xerus am 01.08.2007 15:43, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

pede hat geschrieben:okey verstanden.

Danke für die schnellen Antworten.

eine letzte Frage bleibt noch, dann bin ich glücklich für heute:
was ist ByVal und was phkResult?
ByVal wird direkt der Wert übergeben und nicht der Pointer.
phkResult ist ein Pointer zu einem angelegtem Speicher. Also in PB:
Declare hkResult.l
und übergeben dann @hkResult
Debug hkResult enthält das Ergebnis
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
pede
Beiträge: 90
Registriert: 08.07.2007 20:37
Wohnort: brixen / Italien

Beitrag von pede »

:allright:

super
danke euch beiden!
Antworten