w00t! Posted January 29, 2006 at 10:59 PM Report Share #12925 Posted January 29, 2006 at 10:59 PM Boas, estive hoje a procura de uma função para Vb6.0, para ver se 'x' chave no registo existe, e encontrei esta: Public Function KeyExists(ByVal sPath As String) As Boolean hKey = GetKeys(sPath, sKey) 'try to open key If (RegOpenKeyEx(hKey, sKey, 0, KEY_ALL_ACCESS, mainKey) = ERROR_SUCCESS) Then KeyExists = True 'if we open it than it exists ;o) RegCloseKey mainKey 'close key Else KeyExists = False ' noup, the key don't exists End If End Function Meti esse código num Modulo, e criei um form, onde meti este código: Private Sub Command1_Click() Dim KeyExists As Boolean, sPath As String KeyExists ("HKEY_LOCAL_MACHINE\SOFTWARE\Agnitum\") If KeyExists = True Then Label1.Caption = "A chave existe." Else Label1.Caption = "A chave não existe." End If End Sub Mas dá-me este erro: Expected Sub, Function, or Property O que é que está mal? 😉 Link to comment Share on other sites More sharing options...
vbmaster Posted January 29, 2006 at 11:24 PM Report Share #12926 Posted January 29, 2006 at 11:24 PM Não precisavas de pôr o código num module...experimenta por no general declarations da form1... Link to comment Share on other sites More sharing options...
w00t! Posted January 30, 2006 at 01:24 AM Author Report Share #12931 Posted January 30, 2006 at 01:24 AM Dá o mesmo erro... As instruções para uso desta função são estas: ' [7] KeyExists (Function) ' Cheks if key exists. ' KeyExists(sPath) As Boolean ' sPath - string; path to the key to check ' KeyExists("HKCU\Software\ES\Login") ' Function returns: ' True - key exists ' False - key doesn't exists O código que meti no form, estará bem? Inclusivé a declaração das variaveis..? Link to comment Share on other sites More sharing options...
Tiago Salgado Posted January 30, 2006 at 10:21 AM Report Share #12943 Posted January 30, 2006 at 10:21 AM Em 29/01/2006 às 23:59, w00t! disse: Boas, estive hoje a procura de uma função para Vb6.0, para ver se 'x' chave no registo existe, e encontrei esta: Public Function KeyExists(ByVal sPath As String) As Boolean hKey = GetKeys(sPath, sKey) 'try to open key If (RegOpenKeyEx(hKey, sKey, 0, KEY_ALL_ACCESS, mainKey) = ERROR_SUCCESS) Then KeyExists = True 'if we open it than it exists ;o) RegCloseKey mainKey 'close key Else KeyExists = False ' noup, the key don't exists End If End Function Meti esse código num Modulo, e criei um form, onde meti este código: Private Sub Command1_Click() Dim KeyExists As Boolean, sPath As String KeyExists ("HKEY_LOCAL_MACHINE\SOFTWARE\Agnitum\") If KeyExists = True Then Label1.Caption = "A chave existe." Else Label1.Caption = "A chave não existe." End If End Sub Mas dá-me este erro: Expected Sub, Function, or Property O que é que está mal? 😉 Não deverias ter uma variavel a receber o valor retornado pela função ? Tipo isto: KeyExists = KeyExists ("HKEY_LOCAL_MACHINE\SOFTWARE\Agnitum\") E só depois é q vais ver o estado dessa variavel. Link to comment Share on other sites More sharing options...
w00t! Posted January 30, 2006 at 05:57 PM Author Report Share #12966 Posted January 30, 2006 at 05:57 PM Yep, tens razão. Mas continua a dar o mesmo erro.. não encontro o raio do problema.. 😉 Link to comment Share on other sites More sharing options...
w00t! Posted February 1, 2006 at 02:30 AM Author Report Share #13103 Posted February 1, 2006 at 02:30 AM Ninguem pessoal? :\ Só queria mesmo um código, que verificasse se 'x' chave no registo do Windows existe ou não.. Link to comment Share on other sites More sharing options...
vbmaster Posted February 1, 2006 at 01:49 PM Report Share #13119 Posted February 1, 2006 at 01:49 PM Eu acho que tu não estás a enviar nenhuma chave do registo... estás só a enviar a pasta... Link to comment Share on other sites More sharing options...
w00t! Posted February 2, 2006 at 12:12 AM Author Report Share #13157 Posted February 2, 2006 at 12:12 AM Não.. HKEY_LOCAL_MACHINE\SOFTWARE\Agnitum\ isto é uma chave, o que está dentro das chaves (que aparece no lado direito no regedit) são valves.. Portanto, supostamente está bem não..? Link to comment Share on other sites More sharing options...
vbmaster Posted February 2, 2006 at 12:16 AM Report Share #13158 Posted February 2, 2006 at 12:16 AM sendo assim.. eu tinha um módulo de vb6 que era o que costumava usar para aceder ao registo... mas era grande mais... Link to comment Share on other sites More sharing options...
w00t! Posted February 5, 2006 at 09:43 PM Author Report Share #13408 Posted February 5, 2006 at 09:43 PM Pois.. Ninguem sabe mesmo um código, que veja se 'x' chave no registo existe..? :\ Link to comment Share on other sites More sharing options...
vbmaster Posted February 5, 2006 at 11:04 PM Report Share #13419 Posted February 5, 2006 at 11:04 PM Quando estiver em windows verifico se um módulo que eu tenho faz isso.... mas penso que ele não fazia bem isso... Link to comment Share on other sites More sharing options...
teckV Posted February 6, 2006 at 11:33 AM Report Share #13437 Posted February 6, 2006 at 11:33 AM oi ppl... no caso do exemplo que falas e sem conhecer o código arrisco a especular que o problema está na ausencia da função hKey = GetKeys(sPath, sKey) esta função GetKeys está declarada numa zona publica do projecto?? de qualquer forma aqui estão alguns exemplos.... existem várias formas de ler chaves do registry... aqui vão alguns exemplos uma forma simples que uso em scripts vb para administração de sistemas: ----------------------------------------------------------------------------------- Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ strComputer & "\root\default:StdRegProv") strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" strValueName = "AUOptions" oReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue Wscript.Echo "Value Name: " & strValueName & " Value " & dwValue ---------------------------------------------------------------------------------- --------------------------------\\------------------------------------------------ exemplo mais extenso: ---------------------------------------------------------------------------------- 'gerir registry ' zona de declarações Public Enum REGToolRootTypes HK_CLASSES_ROOT = &H80000000 HK_CURRENT_USER = &H80000001 HK_LOCAL_MACHINE = &H80000002 HK_USERS = &H80000003 HK_PERFORMANCE_DATA = &H80000004 HK_CURRENT_CONFIG = &H80000005 HK_DYN_DATA = &H80000006 End Enum Dim strFullPath 'guarda os caminhos completos para as chaves Dim objReg Dim objSubKey, arrSubKeys 'referencia ao computador local 'pode ser modificado para aceder a computadores remotos! Const strComputerName = "." ---------código para o form ou modulo Public Sub WMISaveSetting _ (strRoot As REGToolRootTypes, stSection, _ stKey, stDefault, Optional stAppPath = "Software\Samuels") Dim bAlreadyExists As Boolean 'Esta função cria uma chave: 'strRoot\stAppPath\stSection\stKey 'e depois define o valor da chave como stDefault On Error GoTo HANDLE_ERR bAlreadyExists = False 'Validação (ver em baixo) strFullPath = stAppPath & "\" & stSection 'ver declaração Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ strComputerName & "\root\default:StdRegProv") 'Enumera a existencia de chaves a serem guardadas objReg.EnumKey strRoot, stAppPath, arrSubKeys 'No caso da chave ainda não ter sido criada If IsNull(arrSubKeys) Then GoTo AVOID_ERR: For Each objSubKey In arrSubKeys 'Enumera chaves parentes e filhos If objSubKey = stSection Then bAlreadyExists = True End If Next AVOID_ERR: If bAlreadyExists = False Then objReg.CreateKey strRoot, strFullPath 'Nota que aqui apenas valores String são guradados objReg.SetStringValue strRoot, strFullPath, stKey, stDefault 'Sets value of key Exit Sub HANDLE_ERR: MsgBox Err.Description, vbCritical End Sub Public Function WMIGetSetting _ (stRoot As REGToolRootTypes, stSection, _ stKey, Optional stDefault, Optional stAppPath = "Software\Samuels") On Error GoTo HANDLE_ERR strFullPath = stAppPath & "\" & stSection Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ strComputerName & "\root\default:StdRegProv") 'Nota que aqui apenas são retornados valores String objReg.GetStringValue stRoot, strFullPath, stKey, stDefault WMIGetSetting = stDefault 'Retorna um valor string de uma chave Exit Function HANDLE_ERR: MsgBox Err.Description, vbCritical End Function 'Cuidado com esta, pois apaga chaves Public Sub WMIDeleteSetting _ (strRoot As REGToolRootTypes, Optional stSection, Optional strAppPath = "Software\Samuels") On Error GoTo HANDLE_ERR Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ strComputerName & "\root\default:StdRegProv") strFullPath = strAppPath & "\" & stSection objReg.DeleteKey strRoot, strFullPath 'Apaga a chave parente e todos os filhos Exit Sub HANDLE_ERR: MsgBox Err.Description, vbCritical End Sub Aqui tens uma class desenvolvida para encapsular o acesso ao registry sobre win32 http://www.vbaccelerator.com/home/VB/Code/Libraries/Registry_and_Ini_Files/Complete_Registry_Control/VB6_Registry_Editor_Demonstration.asp win32 API para lidar com o registry (advanced users) http://www.andreavb.com/tip080001.html Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now