PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Подскажите путь, как прочитать все параметры ключа в реестре


Подскажите путь, как прочитать все параметры ключа в реестре

Сообщений 1 страница 2 из 2

1

а, все, разобрался. Наконец-то нашел нормальный пример:

Код:
Procedure EnumRegValues(RootHKEY.l, sKey.s) 
  Protected hKey.l
  If RegOpenKeyEx_(RootHKEY, sKey, 0, #KEY_READ, @hKey) = #ERROR_SUCCESS    ; 
   idx.l = 0
   Repeat
     ValueName.s = Space(511):  ValueNameLen.l = Len(ValueName)
     ValueData.s = Space(511):  ValueDataLen.l = Len(ValueData)
     Retval.l = RegEnumValue_(hKey, idx, @ValueName, @ValueNameLen, #Null, @dwType, @ValueData, @ValueDataLen)
     If Retval <> #ERROR_SUCCESS
       Break
     EndIf
     ValueName = Left(ValueName, ValueNameLen)
     Select dwType
       Case #REG_SZ
         ValueData = Left(ValueData, ValueDataLen - 1)
       Default
         ValueData = "<Not REG_SZ>"
     EndSelect
     Debug(ValueName + " = " + ValueData)
     idx = idx + 1
   Until Retval <> #ERROR_SUCCESS
   RegCloseKey_(hKey)
 Else
   Debug("RegOpenKeyEx fail")
 EndIf
EndProcedure

EnumRegValues(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion")

взял  тут
жаль, что в PB нет прямых команд работы с реестром (или я просто не знаю о них?)

Отредактировано Goga (18.09.2021 10:32:41)

0

2

давным давно делал обертку что бы было поудобнее

спец обертка для Win Regestry функций

посмотри - может поможет

последний раз в 2019 использовал вот так (можно еще оптимизировать)

Код:

Procedure SetToRegistry()
	Protected Key$="HKEY_CLASSES_ROOT\.pdf", tmp$
	Protected VName$, VType.String, VData.String
	If Not ssRegGetValue(Key$,"", @VType, @VData) ; значение по умолчанию
    MessageRequester(#ProgName,"Облом при запросе данных из реестра"+#CRLF$+
                                   "ErrorCode="+Str(ssRegErrorCode)+
                                   "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
    ProcedureReturn 0
	EndIf
	Debug VType\s
	Debug VData\s
	Key$="HKEY_CLASSES_ROOT\"+VData\s+"\shell"
	If Not ssRegKeyExist(Key$)
    If Not ssRegCreateKey(Key$)
    	MessageRequester(#ProgName,"Облом при создании ключа реестра ["+Key$+"]"+#CRLF$+
                                   "ErrorCode="+Str(ssRegErrorCode)+
                                   "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
    	ProcedureReturn 0
    EndIf
	Else
    Debug Key$
	EndIf
	Key$+"\Open to ImageExtractor"
	If Not ssRegKeyExist(Key$)
    If Not ssRegCreateKey(Key$)
    	MessageRequester(#ProgName,"Облом при создании ключа реестра ["+Key$+"]"+#CRLF$+
                                   "ErrorCode="+Str(ssRegErrorCode)+
                                   "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
    	ProcedureReturn 0
    EndIf
	Else
    Debug Key$
	EndIf
	If Not ssRegSetValue(Key$, "MUIVerb", "REG_SZ", "Open To ImageExtractor")
    MessageRequester(#ProgName,"Облом при создании значения MUIVerb"+#CRLF$+
                    "в ключе реестра ["+Key$+"]"+#CRLF$+
                                   "ErrorCode="+Str(ssRegErrorCode)+
                                   "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
    ProcedureReturn 0
	EndIf
	If Not ssRegSetValue(Key$, "Position", "REG_SZ", "Bottom")
    MessageRequester(#ProgName,"Облом при создании значения Position"+#CRLF$+
                    "в ключе реестра ["+Key$+"]"+#CRLF$+
                                   "ErrorCode="+Str(ssRegErrorCode)+
                                   "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
    ProcedureReturn 0
	EndIf
	Key$+"\command"
	If Not ssRegKeyExist(Key$)
    If Not ssRegCreateKey(Key$)
    	MessageRequester(#ProgName,"Облом при создании ключа реестра ["+Key$+"]"+#CRLF$+
                                   "ErrorCode="+Str(ssRegErrorCode)+
                                   "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
    	ProcedureReturn 0
    EndIf
	Else
    Debug Key$
	EndIf
	tmp$=ProgramFilename()+~" \"%1\"" 
	If Not ssRegSetValue(Key$, "", "REG_SZ", tmp$)
    MessageRequester(#ProgName,"Облом при создании значения по умолчанию"+#CRLF$+
                    "в ключе реестра ["+Key$+"]"+#CRLF$+
                                   "ErrorCode="+Str(ssRegErrorCode)+
                                   "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
    ProcedureReturn 0
	EndIf
	MessageRequester(#ProgName,"Контекстное меню PDF-файла пополнено ссылкой на ImageExtractor ")
	
EndProcedure
Procedure DeleteFromRegistry()
	Protected Key$="HKEY_CLASSES_ROOT\.pdf", tmp$
	Protected VName$, VType.String, VData.String
	If Not ssRegGetValue(Key$,"", @VType, @VData) ; значение по умолчанию
    MessageRequester(#ProgName,"Облом при запросе данных из реестра"+#CRLF$+
                                   "ErrorCode="+Str(ssRegErrorCode)+
                                   "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
    ProcedureReturn 0
	EndIf
	Debug VType\s
	Debug VData\s
	
	Key$="HKEY_CLASSES_ROOT\"+VData\s+"\shell\Open to ImageExtractor"
	If Not ssRegKeyExist(Key$)
    MessageRequester(#ProgName,"В реестре нет ключа "+#CRLF$+
                                   "["+Key$+"]"+#CRLF$,#PB_MessageRequester_Ok)
    
    ProcedureReturn 0
	Else
    Debug Key$
	EndIf
	If Not ssRegDeleteKey(Key$)
    MessageRequester(#ProgName,"Облом при удалении ключа "+#CRLF$+
                                   "["+Key$+"]"+#CRLF$+#CRLF$+
                                   "ErrorCode="+Str(ssRegErrorCode)+
                                   "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
    ProcedureReturn 0
	EndIf
	MessageRequester(#ProgName,"Контекстное меню PDF-файла очищено ")
    
EndProcedure

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Подскажите путь, как прочитать все параметры ключа в реестре