CHAVE DE REGISTRO WINDOWS

WBUZZO 24/01/2016 19:11:39
#456464
Olá amigos!
Como faço para manipular uma chave de registro do windows usando a classe [Ô]Registry[Ô] do VB6:
1-Incluir uma chave de registo;
2-Ler o valor de uma chave de registro;
3-Excluir uma chave de registro;

FABRICIOWEB 24/01/2016 22:34:46
#456472
[ô]Enumerações
Public Enum tClass
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000003
HKEY_CURRENT_CONFIG = &H80000005
End Enum



[ô]Constantes
Public Const REG_DWORD = 4 [ô]Tipo de chave
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_SET_VALUE = &H2
Public Const KEY_CREATE_SUB_KEY = &H4 [ô]Permite criar subchaves
Public Const KEY_ENUMERATE_SUB_KEYS = &H8 [ô]Permite enumerar subchaves
Public Const KEY_NOTIFY = &H10 [ô]Autorização para alterar a notificação.
Public Const READ_CONTROL = &H20000
Public Const SYNCHRONIZE = &H100000
Public Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Public Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Public Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) [ô] Permissões para a leitura da chave
Public Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) [ô] [ô]Permissões para a escrita da chave




Funções API
Public Declare Function RegCloseKey Lib [Ô]advapi32.dll[Ô] (ByVal hKey As Long) As Long
Public Declare Function RegCreateKey Lib [Ô]advapi32.dll[Ô] Alias [Ô]RegCreateKeyA[Ô] (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegDeleteValue Lib [Ô]advapi32.dll[Ô] Alias [Ô]RegDeleteValueA[Ô] (ByVal hKey As Long, ByVal lpValueName As String) As Long
Public Declare Function RegOpenKeyEx Lib [Ô]advapi32.dll[Ô] Alias [Ô]RegOpenKeyExA[Ô] (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Public Declare Function RegQueryValueExA Lib [Ô]advapi32.dll[Ô] (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByRef lpData As Long, lpcbData As Long) As Long
Public Declare Function RegSetValueEx Lib [Ô]advapi32.dll[Ô] Alias [Ô]RegSetValueExA[Ô] (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long


[ô]Cria e edita uma chave de registo
Public Function CriarChave(hotKey As tClass, strPath As String, strValue As String, strData As Long)
Dim Ret [ô]Variável de resultados
[ô]Criar a chave de registo
RegCreateKey hotKey, strPath, Ret
[ô]Define o valor do registo que se pretende
RegSetValueEx Ret, strValue, 0, REG_DWORD, strData, 4
[ô]Fecha o acesso á chave de registo
RegCloseKey Ret
End Function

[ô]Lê uma chave de registo
Public Function LerChave(hotKey As tClass, strPath As String, strValueName As String)
Dim Ret, lData [ô]Variáveis de resultado
[ô]Abertura da chave de registo
RegOpenKeyEx hotKey, strPath, 0, KEY_READ, Ret
[ô]Consulta ao valor da chave de registo especificada
RegQueryValueExA Ret, strValueName, 0, REG_DWORD, lData, 4
[ô]Fecha o acesso á chave de registo
RegCloseKey Ret
[ô]Atribui á função o valor da chave consultada
LerChave = lData
End Function

[ô]Elimina uma chave de registo
Public Function EliminarChave(hotKey As tClass, strPath As String, strValue As String)
Dim Ret [ô]Variável de resultado
[ô]Abertura do registo para edição
RegCreateKey hotKey, strPath, Ret
[ô]Elimina a chave de registo especificada
RegDeleteValue Ret, strValue
[ô]Fecha o acesso á chave de registo
RegCloseKey Ret
End Function


Private Sub Command1_Click()
If LerChave(HKEY_CURRENT_USER, [Ô]SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem[Ô], [Ô]disableTaskmgr[Ô]) = 1 Then
Command1.Caption = [Ô]Bloquear[Ô]
CriarChave HKEY_CURRENT_USER, [Ô]SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem[Ô], [Ô]disableTaskmgr[Ô], [Ô]0[Ô]
ElseIf LerChave(HKEY_CURRENT_USER, [Ô]SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem[Ô], [Ô]disableTaskmgr[Ô]) = 0 Then
Command1.Caption = [Ô]Desbloquear[Ô]
CriarChave HKEY_CURRENT_USER, [Ô]SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem[Ô], [Ô]disableTaskmgr[Ô], [Ô]1[Ô]
End If
End Sub

Private Sub Form_Load()
If LerChave(HKEY_CURRENT_USER, [Ô]SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem[Ô], [Ô]disableTaskmgr[Ô]) = 1 Then
Command1.Caption = [Ô]Desbloquear[Ô]
ElseIf LerChave(HKEY_CURRENT_USER, [Ô]SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem[Ô], [Ô]disableTaskmgr[Ô]) = 0 Then
Command1.Caption = [Ô]Bloquear[Ô]
End If
End Sub
WBUZZO 25/01/2016 21:00:08
#456526
Funcionou perfeitamente.
Muito Obrigado.
WBUZZO 30/01/2016 15:43:31
#456720
O que tenho que mudar para criar a chave abaixo?
CriarChave HKEY_CURRENT_USER, [Ô]SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem[Ô], [Ô]disableTaskmgr[Ô], [Ô]Eu adoro VB6[Ô]

O que tenho que mudar para ler a chave abaixo?
If LerChave(HKEY_CURRENT_USER, [Ô]SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem[Ô], [Ô]disableTaskmgr[Ô]) = [Ô]Eu adoro VB6[Ô] Then
KERPLUNK 31/01/2016 00:44:26
#456758
Hmmm, e você sabe o que são essas chaves de registro que está querendo mudar?
WBUZZO 31/01/2016 13:14:01
#456769
Na verdade eu quero criar/gravar/ler/excluir/alterar uma chave onde seu conteúdo seja composto por letras, números e se possível caractere especial. O modelo que o FABRICIOWEB me passou é ótimo, mas, só aceita números e eu não consigo adapta-lo para aceitar letras e números,
FABRICIOWEB 31/01/2016 22:58:03
#456810
para editar em texto tambem nao conseguir achar

criei o comando abaixo para editar e criar dessa forma aceita texto se nao me engano os espaços em branco tambem da problema

Dim dados As String
dados = [Ô]C:\Windows\System32\link da minha dll que eu mudo [Ô]
Open [Ô]arquivo.bat[Ô] For Output As #1
Print #1, [Ô]reg add HKCR\CLSID\{D3E94D21-E601-4f76-B6DA-5899E47637DF}\InprocServer32 /d [Ô] & dados & [Ô] /t reg_sz /f[Ô]
Close #1
Shell [Ô]arquivo.bat[Ô], vbNormalFocus
KERPLUNK 31/01/2016 23:36:21
#456811
Aí é que entra o que sempre digo, conhecer o que está fazendo. Uma simples observada nas chamadas API que criam as chaves e no modo como foi feita a sub, você já entenderia o porquê de não conseguir usar valores que não sejam numéricos. é essa uma das razões que não gosto de simplesmente postar código, porque não estou ajudando de fato quem tem a dúvida. Porque a grande maioria, inegavelmente, simples copia e cola o código que vê aqui e quer que tudo funcione sem precisar mexer um dedo e nem queimar um único neurônio. Prefiro muito mais explicar o que fazer, mas explicações soam vazias, monótonas e sem efeito prático, isso pra quem quer simplesmente copiar e colar...
WBUZZO 07/02/2016 10:58:04
#457278
Tentei o comando abaixo e não funcionou, onde estou errando?
Dim dados As String
Open [Ô]arquivo.bat[Ô] For Output As #1
Print #1, [Ô]reg add HKCU\EncryptaUsers /v Dininha /t REG_SZ /d teste[Ô]
Close #1
Shell [Ô]arquivo.bat[Ô], vbNormalFocus

O nome da chave é [Ô]EncryptaUsers[Ô] e a subchave é [Ô]Dininha[Ô] e o valor é [Ô]Teste[Ô]
EDSON.PEREIRA 07/02/2016 11:13:30
#457280
Resposta escolhida
ver ser ajuda você.
Tópico encerrado , respostas não são mais permitidas