Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB6: Guardar Configurações - INI vs Registry

A maioria das aplicações tem algumas opções que são importantes guardar de modo a serem utilizadas durante e em próximas execuções. Estas configurações ou settings são bastante utilizadas e importantes, sendo os métodos mais usados no Visual Basic 6 a criação de ficheiros INI’s e a utilização do Registry do Windows.

 

Tamanho e/ou localização de uma janela, data do último acesso, impressora utilizada, nome do último login, são apenas alguns exemplos do que é “normal” e necessário guardar. Pode-se obviamente também guardar esta informação numa base de dados, mas se necessitarmos de guardar o endereço da base de dados ou o nome do servidor? É necessário recorrer a outros métodos.

 

Actualmente, e embora também se utilize também no Visual Basic 6, os ficheiros XML estão a liderar os ficheiros de settings fazendo parte de várias classes do Visual Basic.NET o que simplifica bastante este processo. Existe ainda um processo de criação de settings embebido na aplicação.

 

Existem grandes defensores dos ficheiros INI’s e grandes defensores de guardar a informação no Registry do Windows, no entanto, e é a minha opinião pessoal, é que ambos os métodos são válidos e devem ser utilizados para diferentes fins.

 

Ambos têm vantagens e desvantagens, por exemplo: os ficheiros INI’s são fáceis analisar, não necessitam de acesso de administrador para os modificar/criar, mas também são fáceis de modificar não oferecendo por isso nenhuma segurança. Por outro lado a utilização do Registry do Windows necessita de acesso de administrador (o que em muitos sistemas é impensável), é mais delicada a sua utilização pois podem-se apagar/modificar inadvertidamente outras informações importantes no Registry e é mais difícil de analisar a informação sendo necessário recorrer a um editor. No entanto é bastante mais seguro.

 

Podem ser utilizados os dois sistemas, de acordo com a interpretação de cada programador, por exemplo, guardar informações mais importantes (como passwords) no Registry e informações menos importantes/relevantes em ficheiros INI.

 

Ficheiros INI’s

 

Os ficheiros INI’s não são mais do que ficheiros de texto em que se guardam informações devidamente agrupadas o que permitem uma boa organização e fácil acesso através de API’s. A estrutura de um ficheiro é:

 

 [Secção1]

Chave1=Texto1

Chave2=Texto2

 

[Secção2]

Chave1=Texto1

Chave2=Texto2

 

Este é um exemplo simples de utilização:

 

Option Explicit

 

' Declaração de API's

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _

     (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _

      ByVal lpString As Any, ByVal lpFileName As String) As Long

 

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _

     (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _

      ByVal lpDefault As String, ByVal lpReturnedString As String, _

      ByVal nSize As Long, ByVal lpFileName As String) As Long

                       

                       

' Escreve no ficheiro INI através de API ignorando o erro

Public Function INIWrite(sSection As String, sKeyName As String, sNewString As String, sINIFileName As String) As Boolean

 

  Call WritePrivateProfileString(sSection, sKeyName, sNewString, sINIFileName)

  INIWrite = (Err.Number = 0)

 

End Function

 

 

' Lê no ficheiro INI através de API ignorando o erro

Public Function INIRead(sSection As String, sKeyName As String, sINIFileName As String) As String

Dim sRet As String                       

 

  sRet = String(255, Chr(0))

  INIRead = Left(sRet, GetPrivateProfileString(sSection, ByVal sKeyName, "", sRet, Len(sRet), sINIFileName))

 

End Function

 

 

' No evento Form Load

Private Sub Form_Load()

 

    ' Escreve uma informação no ficheiro INI. Caso exista modifica a existente,

    ‘ caso não exista cria uma nova chave e o respectivo texto

    Call INIWrite("GERAL", "utilizador", "jpaulino", App.Path & "\mySettings.ini")

 

End Sub

 

 

' Botão para mostrar o resultado

Private Sub btnRead_Click()

    Dim result As String

   

    ' Lê a chave no ficheiro INI para uma variável e mostra a informação

    result = INIRead("GERAL", "utilizador", App.Path & "\mySettings.ini")

    MsgBox result, vbInformation

   

End Sub

 

 

O resultado no evento Form Load será a criação de um ficheiro ini (mySettings.ini) com a seguinte estrutura:

 

[GERAL]

utilizador=jpaulino

 

 

Windows Registry

 

A utilização do Windows Registry é ainda mais fácil, não sendo necessário a utilização de API’s. A localização onde é guardada a informação é fixa e é a seguinte:

 

HKEY_CURRENT_USER
      \Software
         \VB and VBA Program Settings
            \Applicação
               \ Secção

                  Chave = Texto

 

Este é um exemplo simples de utilização:

 

Option Explicit

 

' Escreve a informação no Registry

Private Sub bntWrite_Click()

 

    SaveSetting "Teste", "GERAL", "Página", "http://vbtuga.blogspot.com/"

   

End Sub

 

 

' Botão para mostrar o resultado

Private Sub btnRead_Click()

 

    Dim result As String

    result = GetSetting("Teste", "GERAL", "Página", "")

   

    MsgBox result, vbInformation

 

End Sub

 

 

Como já referido anteriormente, existem actualmente outros métodos para guardar informação relevante à aplicação, mas estas duas formas são ainda utilizadas. Muitos programadores de Visual Basic 6 que migraram para Visual Basic.Net ainda utilizam estes métodos (embora não aconselhável).

 

Este artigo, embora bastante simples, pretende apenas mostrar algumas alternativas fáceis e eficazes de guardar informações de configuração da aplicação e como as utilizar de uma forma geral.



PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!

2 comentários:

António disse...

Para aplicações portáteis (que ultimamente tenho usado muito) od ficheiros INI são melhores, uma vez que não dependem directamente do windows.

morpheus disse...

se for um .txt não fará a mesma coisa ? ambos não dependem de Bib.

Mensagens Recentes



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico