Registry benutzen [erledigt]

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

ComNik

BeitragMi, Aug 19, 2009 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Sagt mir nicht wie ich es anders mache sonder WIE mit der Registry, danke.


Na wenn man so freundlich bittet. Das ist Offtopic und sollte eigentlich getrahst werden aber das hat mich grad sauer gemacht.

Wenn dir die Antworten nich passen:
http://www.developer.com/net/c...hp/3449721
http://www.tutorials.de/forum/...ragen.html

Ja ich weiss das das C++ ist, aber lies dich ein und bastel dir zusammen was du haben willst, bevor ich hier deine Unzufriedenheit errege.

Bitteschön.
WIP: Vorx.Engine

flona

BeitragFr, Aug 21, 2009 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
viken_emesh: Soweit ich das noch in Erinnerung habe musst du an RegQueryValueEx nicht den Pointer also regkey übergeben, sondern den Inhalt PeekInt(regkey, 0)

Ich hoffe ich konnte helfen
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit

hazumu-kun

BeitragFr, Aug 21, 2009 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab was nettes gefunden und bereits verarbeitet.

Danke für die Hilfe

[Erledigt]

Hier der Code zum Erfolg:
ACHTUNG: Benötigt entsprechende decls für advapi32.dll

BlitzBasic: [AUSKLAPPEN]



;---------------------------------------------------
; REQUIRES ADVAPI32.DECLS
;---------------------------------------------------


; REGISTRY ROOTS
Const HKEY_CLASSES_ROOT = -2147483648
Const HKEY_CURRENT_USER = -2147483647
Const HKEY_LOCAL_MACHINE = -2147483646
Const HKEY_USERS = -2147483645

; RETURN VALUE CONSTANTS
Const ERROR_SUCCESS = 0
Const ERROR_EOF = 259 ; NO MORE ENTRIES IN KEY

; DATA TYPES FOR KEYS
Const REG_SZ = 1 ; DATA STRING
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3 ; BINARY DATA IN ANY FORM.
Const REG_DWORD = 4 ; A 32-BIT NUMBER.
Const REG_MULTI_SZ = 7

; GLOBAL VAR HOLDING LAST ERROR #
Global reg_lasterr = ERROR_SUCCESS


;---------------------------------------------------
; ENUMERATES THE KEYS CONTAINED IN THE PASSED SUBKEY
; AND RETURNS THEM AS A DELIMITED STRING IN THE FORMAT:
; KEY=VALUE|KEY=VALUE|KEY=VALUE
;---------------------------------------------------
Function Reg_EnumValues$(RegKey%,SubKey$,delim$="|",types=False)

Local cRetVal$ = "",key$="",val$=""
Local keybank = CreateBank(100),keybanksize=CreateBank(4),valbank=CreateBank(100),valbanksize=CreateBank(4),typebank=CreateBank(4)
Local char = 0
Local nIdx = 0
Local nType = 0

; OPEN THE KEY
Local hKey = Reg_OpenKey(RegKey,SubKey$)
If hKey<>-1
; READ IN THE VALUES
Repeat
; INIT THE BANKS
PokeInt (typebank,0,0)
PokeInt (valbanksize,0,100)
PokeInt (keybanksize,0,100)

; CLEAR OUT THE TEMP VALUES
key$=""
val$=""

If RegEnumValue(hKey,nIdx,keybank,keybanksize,0,typebank,valbank,valbanksize)<>ERROR_EOF
nType = PeekInt(typebank,0)

; TACK ON THE DELIMITER
If cRetVal$<>""
cRetVal$ = cRetVal$+delim$
EndIf

; BUILD THE KEY NAME
For char = 0 To PeekInt (keybanksize,0)-1
If PeekByte (keybank,char)=0 Then Exit
key$ = key$ + Chr(PeekByte(keybank,char))
Next

Select nType
; READ IN A STRING OR BINARY VALUE
Case REG_SZ, REG_BINARY, REG_EXPAND_SZ
; BUILD THE VALUE
For char = 0 To PeekInt (valbanksize,0)-1
If PeekByte (valbank,char) = 0 Then Exit
val$ = val$ + Chr(PeekByte (valbank,char))
Next
; READ IN AN INTEGER
Case REG_DWORD
val$ = PeekInt(valbank,0)
End Select

If types
cRetVal$ = (cRetVal$+PeekInt(typebank,0)+";"+key$+"="+val$)
Else
cRetVal$ = (cRetVal$+key$+"="+val$)
EndIf
Else
Exit
EndIf

nIdx=nIdx+1
Forever
Reg_CloseKey(hKey)
EndIf

FreeBank typebank
FreeBank valbank
FreeBank valbanksize
FreeBank keybank
FreeBank keybanksize

Return cRetVal$

End Function


;---------------------------------------------------
; ENUMERATES THE KEYS CONTAINED IN THE PASSED SUBKEY
; AND RETURNS THEM AS A DELIMITED STRING IN THE FORMAT:
; KEY|KEY|KEY
;---------------------------------------------------
Function Reg_EnumKeys$(RegKey%,SubKey$,delim$="|")

Local cRetVal$ = ""
Local keybank = CreateBank(100)
Local nIdx = 0

; OPEN THE KEY FIRST
Local hKey=Reg_OpenKey(RegKey,SubKey$)
If hKey <> -1
Repeat
If RegEnumKey(hKey,nIdx,keybank,BankSize(keybank))<>ERROR_EOF
; TACK ON THE DELIMITER
If cRetVal$ <> ""
cRetVal$=cRetVal$+delim$
EndIf

For char = 0 To BankSize (keybank)-1
If PeekByte (keybank,char)=0 Then Exit
cRetVal$ = cRetVal$ + Chr(PeekByte (keybank,char))
Next
Else
Exit
EndIf

nIdx = nIdx + 1
Forever
Reg_CloseKey(hKey)
EndIf

FreeBank keybank
Return cRetVal$

End Function


;---------------------------------------------------
; DELETES A VALUE FROM THE REGISTRY. RETURNS TRUE/FALSE.
;---------------------------------------------------
Function Reg_DeleteValue%(RegKey%,SubKey$,ValueName$)

Local hKey = Reg_OpenKey(RegKey,SubKey$)
Local lRetVal = False
If hKey <> -1
Local nRslt = RegDeleteValue(hKey,ValueName$)
If (nRslt = ERROR_SUCCESS)
lRetVal = True
Else
reg_lasterr = nRslt
EndIf
Reg_CloseKey(hKey)
EndIf
Return lRetVal

End Function


;---------------------------------------------------
; GETS A VALUE FROM THE REGISTRY AND RETURNS IT AS A STRING.
; WILL RETURN THE PASSED DEFAULT IF THE VALUE REQUESTED IS
; NOT FOUND IN THE REGISTRY.
;---------------------------------------------------
Function Reg_GetValue$(RegKey%,SubKey$,ValueName$,Dflt$="",types=False)

Local cRetVal$ = Dflt$
Local hKey = Reg_OpenKey(RegKey,SubKey$)
Local char = 0
Local nType = 0

; OPEN THE KEY
If hKey<>-1
Local valbank = CreateBank(100)
Local valbanksize = CreateBank(4)
Local typebank = CreateBank(4)

; INIT THE BANKS
PokeInt (typebank,0,0)
PokeInt (valbanksize,0,100)

Local nRslt = RegQueryValueEx(hKey,ValueName$,0,typebank,valbank,valbanksize)

If nRslt = ERROR_SUCCESS
cRetVal$ = ""
nType = PeekInt(typebank,0)

; BUILD THE VALUE
Select nType
; READ IN A STRING OR BINARY VALUE
Case REG_SZ, REG_BINARY, REG_EXPAND_SZ
; BUILD THE VALUE
For char = 0 To PeekInt (valbanksize,0)-1
If PeekByte (valbank,char) = 0 Then Exit
cRetVal$ = cRetVal$ + Chr(PeekByte(valbank,char))
Next
; READ IN AN INTEGER
Case REG_DWORD
cRetVal$ = PeekInt(valbank,0)
End Select

; TACK ON THE TYPE IF REQUESTED
If types Then cRetVal$ = nType + ";" + cRetVal$
Else
reg_lasterr = nRslt
EndIf
Reg_CloseKey(hKey)
EndIf

Return cRetVal$

End Function


;---------------------------------------------------
; SETS A VALUE IN THE REGISTRY. DEFAULTS TO TYPE STRING,
; BUT CAN PASS REG_DWORD AND REG_BINARY. RETURNS TRUE/FALSE.
;---------------------------------------------------
Function Reg_SetValue%(RegKey%,SubKey$,ValueName$,Value$,nType=REG_SZ)

Local hKey = Reg_OpenKey(RegKey,SubKey$)
Local lRetVal = False
If hKey <> -1
Local valbank

; CREATE A BANK TO HOLD THE INFO
Select nType
Case REG_SZ, REG_BINARY, REG_EXPAND_SZ
valbank = CreateBank(Len(Value$))
For i = 1 To Len(Value$)
PokeByte(valbank,i-1,Asc(Mid(Value$,i,1)))
Next
Case REG_DWORD
valbank = CreateBank(4)
PokeInt (valbank,0,Int(Value$))
End Select

Local nRslt = RegSetValueEx(hKey,ValueName$,0,nType,valbank,BankSize(valbank))

If nRslt = ERROR_SUCCESS
lRetVal = True
Else
reg_lasterr = nRslt
EndIf

Reg_CloseKey(hKey)
EndIf

Return lRetVal

End Function


;---------------------------------------------------
; DELETES THE PASSED KEY FROM THE REGISTRY. RETURNS TRUE/FALSE.
;---------------------------------------------------
Function Reg_DeleteKey%(RegKey%,KeyName$)
reg_lasterr=ERROR_SUCCESS
Local nRslt=RegDeleteKey(RegKey,KeyName$)

If nRslt<>ERROR_SUCCESS
reg_lasterr=nRslt
EndIf

Return (nRslt=ERROR_SUCCESS)
End Function


;---------------------------------------------------
; RETURNS THE REGISTRY HANDLE OR -1 IF FAILED.
;---------------------------------------------------
Function Reg_CreateKey%(RegKey%,KeyName$)

reg_lasterr = ERROR_SUCCESS
Local regbank = CreateBank(4)
Local hKey = -1

Local nRslt = RegCreateKey (RegKey%,KeyName$,regbank)

If nRslt = ERROR_SUCCESS
hKey = PeekInt(regbank,0)
Else
reg_lasterr = nRslt
EndIf

FreeBank regbank

Return hKey

End Function


;---------------------------------------------------
; RETURNS THE REGISTRY HANDLE OR -1 IF FAILED
;---------------------------------------------------
Function Reg_OpenKey%(RegKey%,KeyName$)

reg_lasterr = ERROR_SUCCESS
Local regbank = CreateBank(4)
Local hKey = -1

Local nRslt = RegOpenKey(RegKey%,KeyName$,regbank)

If nRslt = ERROR_SUCCESS
hKey=PeekInt(regbank,0)
Else
reg_lasterr=nRslt
EndIf

FreeBank regbank

Return hKey

End Function


;---------------------------------------------------
; CLOSES THE REGISTRY KEY. RETURNS TRUE/FALSE.
;---------------------------------------------------
Function Reg_CloseKey%(RegKey%)

reg_lasterr = ERROR_SUCCESS
Local nRslt = RegCloseKey(RegKey)

If nRslt <> ERROR_SUCCESS Then reg_lasterr=nRslt

Return (nRslt = ERROR_SUCCESS)

End Function


;---------------------------------------------------
; RETURNS TRUE IF THE KEY EXISTS
;---------------------------------------------------
Function Reg_IsKey%(RegKey%,KeyName$)

Local hKey = Reg_OpenKey(RegKey,KeyName$)
Local lRetVal = False

If hKey<>-1 Then Reg_CloseKey(hKey) : lRetVal = True

Return lRetVal

End Function



;---------------------------------------------------




;---------------------------------------------------
; FUNCTION: RETURNS OS LANGUAGE
;---------------------------------------------------
Function Reg_GetOSLanguage$()

key$ = "Control Panel\International"

KeyHandle = Reg_OpenKey(HKEY_CURRENT_USER,key$)
If KeyHandle <> -1 Then
;GERMAN = "DEU"
value$ = Reg_GetValue(HKEY_CURRENT_USER,key$,"sLanguage")
Reg_CloseKey(KeyHandle)
Else
; DID NOT FIND - FAIL SILENTLY
value$ = "Unknown"
End If

Return value$

End Function


;---------------------------------------------------
; FUNCTION: RETURNS OS VERSION
;---------------------------------------------------
Function Reg_GetOSVersion$()

key$ = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"

KeyHandle% = Reg_OpenKey(HKEY_LOCAL_MACHINE,key$)
If KeyHandle <> -1 Then
;WIN XP = "Microsoft Windows XP"
value$ = Reg_GetValue(HKEY_LOCAL_MACHINE,key$,"ProductName")
Reg_CloseKey(KeyHandle)
Else
; DID NOT FIND - FAIL SILENTLY
value$ = "Unknown"
EndIf

Return value$

End Function


;---------------------------------------------------
; FUNCTION: REGISTERS A FILE EXTENSION TO THE .EXE
;---------------------------------------------------
Function Reg_RegisterFileType(extension$,exeName$)

If Mid(extension$,1,1) <> "." Then extension$ = "." + extension$

extension$ = Lower(extension$)

typeName$ = Right(extension$,3) + "file"

If Right(exeName$,4) <> ".exe" Then exeName$ = exeName$ + ".exe"

KeyHandle% = Reg_CreateKey (HKEY_CLASSES_ROOT,extension$)
If KeyHandle <> -1 Then
Reg_SetValue (HKEY_CLASSES_ROOT,extension$,"",typeName$,REG_SZ)

Reg_CloseKey(KeyHandle)
End If

KeyHandle% = Reg_CreateKey (HKEY_CLASSES_ROOT,typeName + "\shell\open\command" )
If KeyHandle <> -1 Then
Reg_SetValue (HKEY_CLASSES_ROOT,typeName + "\shell\open\command","",Chr(34) + CurrentDir() + exeName$ + Chr(34) + " %1",REG_SZ)
Reg_CloseKey(KeyHandle)
End If

KeyHandle% = Reg_CreateKey (HKEY_CLASSES_ROOT,typeName + "\DefaultIcon" )
If KeyHandle <> -1 Then
Reg_SetValue (HKEY_CLASSES_ROOT,typeName + "\DefaultIcon","",Chr(34) + CurrentDir() + exeName$ + Chr(34) + ",0",REG_SZ)
Reg_CloseKey(KeyHandle)
End If

End Function


DECLS:
Code: [AUSKLAPPEN]

.lib "Advapi32.dll"

RegOpenKeyEx%(hKeyParent%,SubKey$,reserved,samdesired,phkResult*):"RegOpenKeyExA"
RegOpenKey%(hKeyParent%,SubKey$,phkResult*):"RegOpenKeyA"
RegCloseKey%(hKey%):"RegCloseKey"
RegFlushKey%(hKey%):"RegFlushKey"
RegCreateKey%(hKeyParent%,SubKey$,phkResult*):"RegCreateKeyA"
RegDeleteKey%(hKeyParent%,SubKey$):"RegDeleteKeyA"
RegSetValueEx%(hKey%,ValueName$,Reserved%,nType%,Bytes*,size%):"RegSetValueExA"
RegDeleteValue%(hKey%,ValueName$):"RegDeleteValueA"
RegEnumKey%(hKey%,idx%,Key*,size%):"RegEnumKeyA"
RegEnumValue%(hKey%,idx%,ValueName*,NameSize*,Reserved%,nType*,ValueBytes*,ValueSize*):"RegEnumValueA"
RegQueryValueEx%(hKey%,ValueName$,Reserved%,nType*,ValueBytes*,ValueSize*):"RegQueryValueExA"
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group