Jump to content

[VB6] Dúvida em código


w00t!

Recommended Posts

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.