Registry
Registry
Hallo,
ich weiß es gibt schon viele Themen über die Registry im Forum aber leider haben die meine Frage nicht ganz beantwortet ...
Ich möchte ein Programm schreiben, dass in der Registry unter dem Pfad HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main den Inhalt der Zeichenfolge Window Title ändert, bzw. sogar die Zeichenfolge erstellt falls sie noch nicht vorhanden ist.
Wie ist das möglich?
ich weiß es gibt schon viele Themen über die Registry im Forum aber leider haben die meine Frage nicht ganz beantwortet ...
Ich möchte ein Programm schreiben, dass in der Registry unter dem Pfad HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main den Inhalt der Zeichenfolge Window Title ändert, bzw. sogar die Zeichenfolge erstellt falls sie noch nicht vorhanden ist.
Wie ist das möglich?
v6.00
Auslesen String aus Registry:
Schreiben String in Registry:
falls ....\PureBasic\Include\Registry.PBI nicht installiert ist (steckt in jaPBe, glaub´ ich), brauchste noch folgenden Code:
viel Erfolg...
Siggi
Code: Alles auswählen
Value$ = Reg_GetValue (#hkey_local_machine,<dein RegPfad ohne führendes hkey_localc_machine>, <dein RegKey>)
Schreiben String in Registry:
Code: Alles auswählen
If Reg_CreateKey (#hkey_local_machine, <dein RegPfad>, <dein RegKey>, "")
Reg_SetValue (#hkey_local_machine, <dein RegPfad>, <dein RegKey>, <neuer Wert$>,#REG_SZ, "")
endif
falls ....\PureBasic\Include\Registry.PBI nicht installiert ist (steckt in jaPBe, glaub´ ich), brauchste noch folgenden Code:
Code: Alles auswählen
;Read and change the Registry / FileAssociate
;#PB_Lit2Msg stop
Procedure Reg_SetValue(topKey, sKeyName.s, sValueName.s, vValue.s, lType, ComputerName.s)
lpData.s
If Left(sKeyName, 1) = "\" : sKeyName = Right(sKeyName, Len(sKeyName) - 1) : EndIf
If Right(sKeyName,1)="\" : sKeyName = Left(sKeyName, Len(sKeyName) - 1) : EndIf
If ComputerName = ""
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
GetHandle = RegOpenKeyEx_(lhRemoteRegistry, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
EndIf
If GetHandle = #ERROR_SUCCESS
lpcbData = 255
lpData = Space(255)
Select lType
Case #REG_SZ
GetHandle = RegSetValueEx_(hKey, sValueName, 0, #REG_SZ, @vValue, Len(vValue) + 1)
Case #REG_DWORD
lValue = Val(vValue)
GetHandle = RegSetValueEx_(hKey, sValueName, 0, #REG_DWORD, @lValue, 4)
EndSelect
RegCloseKey_(hKey)
ergebnis = 1
ProcedureReturn ergebnis
Else
MessageRequester("Fehler", "Ein Fehler ist aufgetreten", 0)
RegCloseKey_(hKey)
ergebnis = 0
ProcedureReturn ergebnis
EndIf
EndProcedure
Procedure.s Reg_GetValue(topKey, sKeyName.s, sValueName.s, ComputerName.s)
lpData.s
GetValue.s =""
If Left(sKeyName, 1) = "\" : sKeyName = Right(sKeyName, Len(sKeyName) - 1) : EndIf
If Right(sKeyName,1)="\" : sKeyName = Left(sKeyName, Len(sKeyName) - 1) : EndIf
If ComputerName = ""
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
GetHandle = RegOpenKeyEx_(lhRemoteRegistry, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
EndIf
If GetHandle = #ERROR_SUCCESS
lpcbData = 255
lpData = Space(255)
GetHandle = RegQueryValueEx_(hKey, sValueName, 0, @lType, @lpData, @lpcbData)
If GetHandle = #ERROR_SUCCESS
Select lType
Case #REG_SZ
GetHandle = RegQueryValueEx_(hKey, sValueName, 0, @lType, @lpData, @lpcbData)
If GetHandle = 0
GetValue = Left(lpData, lpcbData - 1)
Else
GetValue = ""
EndIf
Case #REG_DWORD
GetHandle = RegQueryValueEx_(hKey, sValueName, 0, @lpType, @lpDataDWORD, @lpcbData)
If GetHandle = 0
GetValue = Str(lpDataDWORD)
Else
GetValue = "0"
EndIf
EndSelect
Else : Debug "!!! RegError: read <"+sKeyName+"> / <"+sValueName+">"
EndIf
Else : Debug "!!! RegError: open <"+sKeyName+">"
EndIf
RegCloseKey_(hKey)
ProcedureReturn GetValue
EndProcedure
Procedure.s Reg_ListSubKey(topKey, sKeyName.s, Index, ComputerName.s)
lpName.s
lpftLastWriteTime.FILETIME
If Left(sKeyName, 1) = "\" : sKeyName = Right(sKeyName, Len(sKeyName) - 1) :EndIf
If Right(sKeyName,1)="\" : sKeyName = Left(sKeyName, Len(sKeyName) - 1) : EndIf
If ComputerName = ""
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
GetHandle = RegOpenKeyEx_(lhRemoteRegistry, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
EndIf
If GetHandle = #ERROR_SUCCESS
lpcbName = 255
lpName = Space(255)
GetHandle = RegEnumKeyEx_(hKey, Index, @lpName, @lpcbName, 0, 0, 0, @lpftLastWriteTime)
If GetHandle = #ERROR_SUCCESS
ListSubKey.s = Left(lpName, lpcbName)
Else
ListSubKey.s = ""
EndIf
EndIf
RegCloseKey_(hKey)
ProcedureReturn ListSubKey
EndProcedure
Procedure Reg_DeleteValue(topKey, sKeyName.s, sValueName.s, ComputerName.s)
If Left(sKeyName, 1) = "\" : sKeyName = Right(sKeyName, Len(sKeyName) - 1) : EndIf
If Right(sKeyName,1)="\" : sKeyName = Left(sKeyName, Len(sKeyName) - 1) : EndIf
If ComputerName = ""
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
GetHandle = RegOpenKeyEx_(lhRemoteRegistry, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
EndIf
If GetHandle = #ERROR_SUCCESS
GetHandle = RegDeleteValue_(hKey, @sValueName)
If GetHandle = #ERROR_SUCCESS
DeleteValue = #True
Else
DeleteValue = #False
EndIf
EndIf
RegCloseKey_(hKey)
ProcedureReturn DeleteValue
EndProcedure
Procedure Reg_CreateKey(topKey, sKeyName.s, ComputerName.s)
lpSecurityAttributes.SECURITY_ATTRIBUTES
If Left(sKeyName, 1) = "\" : sKeyName = Right(sKeyName, Len(sKeyName) - 1) :EndIf
If Right(sKeyName,1)="\" : sKeyName = Left(sKeyName, Len(sKeyName) - 1) : EndIf
If ComputerName = ""
GetHandle = RegCreateKeyEx_(topKey, sKeyName, 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, @lpSecurityAttributes, @hNewKey, @GetHandle)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
GetHandle = RegCreateKeyEx_(lhRemoteRegistry, sKeyName, 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, @lpSecurityAttributes, @hNewKey, @GetHandle)
EndIf
If GetHandle = #ERROR_SUCCESS
GetHandle = RegCloseKey_(hNewKey)
CreateKey = #True
Else
CreateKey = #False
EndIf
ProcedureReturn CreateKey
EndProcedure
Procedure Reg_DeleteKey(topKey, sKeyName.s, ComputerName.s)
If Left(sKeyName, 1) = "\" : sKeyName = Right(sKeyName, Len(sKeyName) - 1) : EndIf
If Right(sKeyName,1)="\" : sKeyName = Left(sKeyName, Len(sKeyName) - 1) : EndIf
If ComputerName = ""
GetHandle = RegDeleteKey_(topKey, @sKeyName)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
GetHandle = RegDeleteKey_(lhRemoteRegistry, @sKeyName)
EndIf
If GetHandle = #ERROR_SUCCESS
DeleteKey = #True
Else
DeleteKey = #False
EndIf
ProcedureReturn DeleteKey
EndProcedure
Procedure.s Reg_ListSubValue(topKey, sKeyName.s, Index, ComputerName.s)
lpName.s
lpftLastWriteTime.FILETIME
ListSubValue.s
If Left(sKeyName, 1) = "\" : sKeyName = Right(sKeyName, Len(sKeyName) - 1) : EndIf
If Right(sKeyName,1)="\" : sKeyName = Left(sKeyName, Len(sKeyName) - 1) : EndIf
If ComputerName = ""
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
GetHandle = RegOpenKeyEx_(lhRemoteRegistry, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
EndIf
If GetHandle = #ERROR_SUCCESS
lpcbName = 255
lpName = Space(255)
GetHandle = RegEnumValue_(hKey, Index, @lpName, @lpcbName, 0, 0, 0, 0)
If GetHandle = #ERROR_SUCCESS
ListSubValue = Left(lpName, lpcbName)
Else
ListSubValue = ""
EndIf
RegCloseKey_(hKey)
EndIf
ProcedureReturn ListSubValue
EndProcedure
Procedure Reg_KeyExists(topKey, sKeyName.s, ComputerName.s)
If Left(sKeyName, 1) = "\" : sKeyName = Right(sKeyName, Len(sKeyName) - 1) : EndIf
If Right(sKeyName,1)="\" : sKeyName = Left(sKeyName, Len(sKeyName) - 1) : EndIf
If ComputerName = ""
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
GetHandle = RegOpenKeyEx_(lhRemoteRegistry, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
EndIf
If GetHandle = #ERROR_SUCCESS
KeyExists = #True
Else
KeyExists = #False
EndIf
ProcedureReturn KeyExists
EndProcedure
Procedure Reg_DeleteKeyWithAllSub(topKey,sKeyName.s,ComputerName.s)
i=0
a$=""
Repeat
b$=a$
a$=Reg_ListSubKey(topKey,sKeyName,0,"")
If a$<>""
Reg_DeleteKeyWithAllSub(topKey,sKeyName+"\"+a$,"")
EndIf
Until a$=b$
Reg_DeleteKey(topKey, sKeyName, ComputerName)
EndProcedure
Procedure Reg_CreateKeyValue(topKey,sKeyName.s,sValueName.s,vValue.s,lType,ComputerName.s)
Reg_CreateKey(topKey,sKeyName,ComputerName)
ProcedureReturn Reg_SetValue(topKey,sKeyName,sValueName,vValue,lType,ComputerName)
EndProcedure
Procedure AssociateFileEx(AF_Ext$,ext_description$,programm$,icon$,prgkey$,cmd_description$,cmd_key$)
cmd$=Chr(34)+programm$+Chr(34)+" "+Chr(34)+"%1"+Chr(34)
If GetVersion_() & $FF0000 ; Windows NT/XP
Reg_CreateKeyValue(#HKEY_CLASSES_ROOT, "Applications\"+prgkey$+"\shell\"+cmd_description$+"\command","",cmd$,#REG_SZ,"")
If ext_description$
Key$=AF_Ext$+"_auto_file"
Reg_CreateKeyValue(#HKEY_CLASSES_ROOT ,"."+AF_Ext$ ,"",Key$ ,#REG_SZ,"")
Reg_CreateKeyValue(#HKEY_CLASSES_ROOT ,Key$ ,"",ext_description$,#REG_SZ,"")
If icon$
Reg_CreateKeyValue(#HKEY_CLASSES_ROOT,Key$+"\DefaultIcon","",icon$ ,#REG_SZ,"")
EndIf
EndIf
Reg_CreateKeyValue(#HKEY_CURRENT_USER,"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\."+AF_Ext$,"Application",prgkey$,#REG_SZ,"")
Else ;Windows 9x
Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE ,"Software\Classes\."+AF_Ext$ ,"",prgkey$ ,#REG_SZ,"")
If ext_description$
Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE,"Software\Classes\"+prgkey$ ,"",ext_description$,#REG_SZ,"")
EndIf
If icon$
Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE,"Software\Classes\"+prgkey$+"\DefaultIcon" ,"",icon$ ,#REG_SZ,"")
EndIf
If cmd_description$<>cmd_key$
Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE,"Software\Classes\"+prgkey$+"\shell\"+cmd_key$,"",cmd_description$,#REG_SZ,"")
EndIf
Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE ,"Software\Classes\"+prgkey$+"\shell\"+cmd_key$+"\command","",cmd$,#REG_SZ,"")
EndIf
EndProcedure
Procedure Remove_AssociateFile(AF_Ext$,prgkey$)
If GetVersion_() & $FF0000 ; Windows NT/XP
Reg_DeleteKeyWithAllSub(#HKEY_CLASSES_ROOT,"Applications\"+prgkey$,"")
key$=AF_Ext$+"_auto_file"
Reg_DeleteKeyWithAllSub(#HKEY_CLASSES_ROOT,"."+AF_Ext$,"")
Reg_DeleteKeyWithAllSub(#HKEY_CLASSES_ROOT,key$,"")
Reg_DeleteKeyWithAllSub(#HKEY_CURRENT_USER,"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\."+AF_Ext$,"")
Else ;Windows 9x
Reg_DeleteKeyWithAllSub(#HKEY_LOCAL_MACHINE ,"Software\Classes\."+AF_Ext$,"")
Reg_DeleteKeyWithAllSub(#HKEY_LOCAL_MACHINE,"Software\Classes\"+prgkey$,"")
EndIf
EndProcedure
Procedure AssociateFile(AF_Ext$,ext_description$,programm$,icon$)
AssociateFileEx(AF_Ext$,ext_description$,programm$,icon$,GetFilePart(programm$),"open","open")
EndProcedure
;#PB_Lit2Msg start
Siggi
jo ^^
das was du nur brauchst ist:
für dein Fall:
Du musst vllt noch mal die Variablen anpassen ^^
das was du nur brauchst ist:
Code: Alles auswählen
; Liest eine Variable aus der Registrierung aus
; HKEY = #HKEY_LOCAL_MACHINE
; #HKEY_CURRENT_USER
Procedure.s ReadReg(HKEY, Ort$, Var$)
RetVal = RegOpenKeyEx_(HKEY, Ort$, 0, #KEY_ALL_ACCESS, @lhkey)
cch = 255 : sValue$ = Space(255)
lType = #REG_SZ
lrc = RegQueryValueEx_(lhkey, Var$, 0, @lType, @sValue$, @cch)
RegCloseKey_(lhkey)
ProcedureReturn sValue$
EndProcedure
; Schreibt eine Variable in die Registrierung
Procedure WriteReg(HKEY, Ort$, Var$, String$)
RegCreateKeyEx_(HKEY, Ort$, 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo)
RegSetValueEx_(NewKey, Var$, 0, #REG_SZ, String$, Len(String$)+1)
RegCloseKey_(NewKey)
EndProcedure
Code: Alles auswählen
LaberLaber$ = ReadReg(#HKEY_CURRENT_USER, Software\Microsoft\Internet Explorer\Main, WindowTitle)
WriteReg(#HKEY_CURRENT_USER, Software\Microsoft\Internet Explorer\Main, WindowTitle, "Laber Laber")
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
andere nützliche befehle, wie Eiträge auflistem, Einträge ganz löschen, ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Die Registry.pbi ist ganz schön Bugy.
Teilweise falsche Variablen übergeben, keine Überprüfung ob Remote erfolgreich durgeführt wurde, diverse Handle werden nicht wieder freigegeben.
Keine Varablen deklariert, ungenaue Fehlerauswertung.
Summaru: Nicht entfehlenswert
Überarbeite gerade den Ganzen Code
Teilweise falsche Variablen übergeben, keine Überprüfung ob Remote erfolgreich durgeführt wurde, diverse Handle werden nicht wieder freigegeben.
Keine Varablen deklariert, ungenaue Fehlerauswertung.
Summaru: Nicht entfehlenswert
Überarbeite gerade den Ganzen Code
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Code: Alles auswählen
Procedure.s ReadReg(HKEY, Ort$, Var$)
RetVal = RegOpenKeyEx_(HKEY, Ort$, 0, #KEY_ALL_ACCESS, @lhkey)
cch = 255 : sValue$ = Space(255)
lType = #REG_SZ
lrc = RegQueryValueEx_(lhkey, Var$, 0, @lType, @sValue$, @cch)
RegCloseKey_(lhkey)
ProcedureReturn sValue$
EndProcedure
Procedure WriteReg(HKEY, Ort$, Var$, String$)
RegCreateKeyEx_(HKEY, Ort$, 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo)
RegSetValueEx_(NewKey, Var$, 0, #REG_SZ, String$, Len(String$)+1)
RegCloseKey_(NewKey)
EndProcedure
Debug ReadReg(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main", "Window Title")
WriteReg(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main", "Window Title", "Laber Laber")
Debug ReadReg(#HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main", "Window Title")

Wird da auch ein Schlüssel (oder wie man die Dinger nennt) erstellt, wenn er nicht vorhanden ist?
Wie kann ich so nen Schlüssel wieder löschen?
v6.00
ja er wird erstellt wenn er nicht vorhanden ist, das macht diese Konstante:
#KEY_ALL_ACCESS
(glaube ich ^^)
kA ^^ einfach mal testen
#KEY_ALL_ACCESS
(glaube ich ^^)
kA ^^ einfach mal testen
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr