Seite 1 von 2
registry
Verfasst: 01.08.2007 15:03
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?
Verfasst: 01.08.2007 15:07
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
Verfasst: 01.08.2007 15:14
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)?
Verfasst: 01.08.2007 15:18
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)
Verfasst: 01.08.2007 15:25
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!
Verfasst: 01.08.2007 15:32
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
Verfasst: 01.08.2007 15:37
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?
Re: registry
Verfasst: 01.08.2007 15:42
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
Verfasst: 01.08.2007 15:42
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
Verfasst: 01.08.2007 17:55
von pede
super
danke euch beiden!