Falcao
|
DIADEMA SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 27/08/2008 16:25 hs
Boa tarde,
Como faço para listar as chaves que o caminho HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall possui?
Eu estava tentando ler os conteudos da chave através do comando reg.RegRead, mas o problema é que necessito saber o valor correto de cada chave lá dentro. Então gostaria de criar um loop para que ele me liste todo esse conteúdo.
Alguém poderia me ajudar?
|
|
|
|
|
Postada em 28/08/2008 22:20 hs
Option Explicit
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftMaxWriteTime As Any) As Long Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Const ERROR_NO_MORE_ITEMS = 259& Const HKEY_CURRENT_CONFIG = &H80000005 Const HKEY_LOCAL_MACHINE = &H80000002
Private Sub Form_Load() Dim hKey As Long, Cnt As Long Dim sName As String Dim sData As String Dim Ret As Long Dim RetData As Long Dim sSubKey As String Dim sKey As String Dim sValue As String Const BUFFER_SIZE As Long = 255 Ret = BUFFER_SIZE sSubKey = "SOFTWAREMicrosoftWindowsCurrentVersionRun" 'Abre a chave do registro If RegOpenKey(HKEY_LOCAL_MACHINE, sSubKey, hKey) = 0 Then sName = Space(BUFFER_SIZE) sData = Space(BUFFER_SIZE) Ret = BUFFER_SIZE RetData = BUFFER_SIZE 'Enumera os valores While RegEnumValue(hKey, Cnt, sName, Ret, 0, ByVal 0&, ByVal sData, RetData) <> ERROR_NO_MORE_ITEMS If RetData > 0 Then sKey = Left$(sName, Ret) sValue = Left$(sData, RetData - 1) MsgBox sKey & "=" & sValue End If
Cnt = Cnt + 1 sName = Space(BUFFER_SIZE) sData = Space(BUFFER_SIZE) Ret = BUFFER_SIZE RetData = BUFFER_SIZE Wend RegCloseKey hKey Else 'Erro ao enumerar chaves do registro End If End Sub
Excelent Code
|
|
|
Falcao
|
DIADEMA SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 29/08/2008 00:05 hs
Boa noite coder_expert.
Obrigado pelo interesse em me ajudar.
Eu acabei de testar seus códigos e é quase isso que quero.
O que reparei é que tenho que colocar na variável sSubkey o caminho que pretendo pesquisar. Meu interesse é pesquisar o conteúdo da sub-chave "SOFTWAREMicrosoftWindowsCurrentVersionUninstall"
Eu gostaria que o programa me mostrasse todas as sub-pastas existentes nesse caminho. Pelo teste que fiz verifiquei o programa está exibindo os valores apenas quando eu indico uma chave especifica como por exemplo sSubKey = "SOFTWAREMicrosoftWindowsCurrentVersionUninstallWebshots".
Dentro de Uninstall eu possuo pelo menos 10 chaves diferentes e é isso que eu gostaria que o programa fizesse automático me informando o conteúdo de cada chave, sem que eu precisa saber os nomes delas.
Você acha que é possível dessa maneira?
Mais uma vez fico agradecido pela sua atenção
|
|
|
|
Postada em 29/08/2008 01:09 hs
Boa noite, eis o código para Enumerar Chaves (Sub-Pastas)
Option Explicit
Const ERROR_NO_MORE_ITEMS = 259& Const HKEY_CURRENT_CONFIG = &H80000005 Const HKEY_LOCAL_MACHINE = &H80000002
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftMaxWriteTime As Any) As Long
Private Sub Form_Load() Dim hKey As Long, Cnt As Long, sName As String, sData As String, Ret As Long, RetData As Long Const BUFFER_SIZE As Long = 255 Dim sFKey As String Dim sSubKey As String sSubKey = "SOFTWARE" If RegOpenKey(HKEY_LOCAL_MACHINE, sSubKey, hKey) = 0 Then sName = Space(BUFFER_SIZE)
While RegEnumKeyEx(hKey, Cnt, sName, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS sFKey = Left$(sName, Ret) MsgBox sFKey Cnt = Cnt + 1 sName = Space(BUFFER_SIZE) Ret = BUFFER_SIZE Wend RegCloseKey hKey Else 'Erro ao invocar RegOpenKey End If End Sub
Excelent Code
|
|
|
Falcao
|
DIADEMA SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 04/09/2008 08:52 hs
coder_Expert,
Obrigado pelas dicas. Agora está funcionando do jeito que eu queria.
Abraços,
|
|
|
Moisés
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 22/07/2011 11:46 hs
Bom dia CODER_EXPERT! Eu gostaria de saber se tem alguma forma de criar no REGEDIT de criamos um LOOP depois de uma determinada data, somente alterando alguma(s) chaves nele contido?
grato
|
|
|
|