Code: Select all
EnableExplicit
#q$ = Chr(34)
XIncludeFile "Registry.pbi"
UseModule Registry
Procedure.s EscapeRegString(str$)
str$ = ReplaceString(str$, "\", "\\")
str$ = ReplaceString(str$, #q$, "\" + #q$)
ProcedureReturn str$
EndProcedure
Procedure.s RegExport(root, keypath$, *RegData.string)
Protected root$, count, i, param$, VType, ValueStr$
Select root
Case #HKEY_CLASSES_ROOT
root$ ="[HKEY_CLASSES_ROOT\"
Case #HKEY_CURRENT_USER
root$ ="[HKEY_CURRENT_USER\"
Case #HKEY_LOCAL_MACHINE
root$ ="[HKEY_LOCAL_MACHINE\"
Case #HKEY_USERS
root$ ="[HKEY_USERS\"
Case #HKEY_CURRENT_CONFIG
root$ ="[HKEY_CURRENT_CONFIG\"
EndSelect
*RegData\s + #CRLF$ + root$ +keypath$ + "]" + #CRLF$
count = CountSubValues(root, keypath$)
For i = 0 To count - 1
param$ = ListSubValue(root, keypath$, i)
VType = ReadType(root, keypath$, param$)
Select VType
Case #REG_SZ, #REG_EXPAND_SZ, #REG_MULTI_SZ
ValueStr$ = ReadValue(root, keypath$, param$)
param$ = #q$ + param$ + #q$
If param$ = #q$ + #q$
param$ = "@"
EndIf
ValueStr$ = EscapeRegString(ValueStr$)
*RegData\s + param$ + "=" + #q$ + ValueStr$ + #q$ + #CRLF$
; WriteString(0, param$ + "=" + ValueStr$ + #CRLF$, #PB_Unicode)
Case #REG_DWORD
ValueStr$ = ReadValue(root, keypath$, param$)
param$ = #q$ + param$ + #q$
*RegData\s + param$ + "=dword:" + RSet(Hex(Val(ValueStr$), #PB_Quad) , 8 , "0") + #CRLF$
Case #REG_QWORD
ValueStr$ = ReadValue(root, keypath$, param$)
param$ = #q$ + param$ + #q$
*RegData\s + param$ + "=qword:" + RSet(Hex(Val(ValueStr$), #PB_Quad) , 16 , "0") + #CRLF$
; Case #REG_NONE, #REG_BINARY
EndSelect
Next
count = CountSubKeys(root, keypath$)
For i = 0 To count - 1
param$ = ListSubKey(root, keypath$, i)
RegExport(root, keypath$ + "\" + param$, *RegData)
Next
EndProcedure
Define RegData.String, FileName$
RegExport(#HKEY_CLASSES_ROOT, "txtfile", @RegData)
RegExport(#HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.7z", @RegData)
; Debug RegData\s
; SetClipboardText(RegData\s)
; MessageRequester("", RegData\s)
If Len(RegData\s) > 3
FileName$ = SaveFileRequester("Save" , "Export.reg" , "Registry (*.reg)|*.reg", 0)
If Asc(FileName$)
If CreateFile(0, FileName$, #PB_Unicode)
WriteStringFormat(0 , #PB_Unicode) ; BOM (16 LE)
WriteString(0, "Windows Registry Editor Version 5.00" + #CRLF$, #PB_Unicode)
WriteString(0, RegData\s + #CRLF$ + #CRLF$, #PB_Unicode)
CloseFile(0)
RunProgram("explorer.exe", "/Select, " + FileName$, "")
; If MessageRequester("Message","Open File?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
; RunProgram("notepad.exe", #q$ + FileName$ + #q$, "")
; EndIf
EndIf
EndIf
EndIf