• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

w00t!

[VB6] Dúvida em código

12 mensagens neste tópico

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? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não precisavas de pôr o código num module...experimenta por no general declarations da form1...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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..?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Yep, tens razão. Mas continua a dar o mesmo erro.. não encontro o raio do problema.. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ninguem pessoal? :\

Só queria mesmo um código, que verificasse se 'x' chave no registo do Windows existe ou não..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que tu não estás a enviar nenhuma chave do registo... estás só a enviar a pasta...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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..?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sendo assim..

eu tinha um módulo de vb6 que era o que costumava usar para aceder ao registo... mas era grande mais...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois..

Ninguem sabe mesmo um código, que veja se 'x' chave no registo existe..? :\

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando estiver em windows verifico se um módulo que eu tenho faz isso.... mas penso que ele não fazia bem isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora