Você está na página 1de 7

Associando arquivos ao seu programa

Escrito por: WebMaster - VBMania webmaster@vbmania.com.br

Publicado em 07/2005

http://www.vbmania.com.br
Pgina 1 de 7

Associar arquivos sua aplicao sem dvida uma demonstrao de que seu conhecimento na programao e nos processos do sistema operacional so bem amplos. Alm disso garante que a automao de seu programa e principalmente a interao entre usurio e sua ferramenta sejam melhorados. Para associar um tipo de arquivo seu programa, basicamente o que voc faz registrar dentro do registro do windows, uma chave de dados que indica qual o tipo de arquivo (extenso), a descrio do arquivo, o programa que vai abri-lo e por fim qual o cone a ser demonstrado no sistema operacional para o seu tipo de arquivo personalizado. O primeiro passo entender que dever ser feita uma associao constante do tipo de arquivo ao seu programa (assim voc assegura que nenhum outro programa vai abrir seu tipo de arquivo). Preferencialmente utilize a tcnica de iniciar seu programa baseado em Sub Main () e no em um formulrio (assim voc gerencia melhor a inicializao do programa uma vez que voc pode ter argumentos invlidos passados para o programa, porm carregou um formulrio desnecessariamente na memria (por exemplo)). Neste exemplo foi criada uma classe para associao de arquivos (assim voc pode portar esta classe para qualquer outro projeto seu). cAssociate.cls
Option Explicit Sample... ' Dim clsAssociate As New CAssociate ' clsAssociate.Title = "A sample extension" ' AKA Description of the file type ' clsAssociate.Class = "A sample extension.NewExt" ' clsAssociate.Extension = ".pra" ' clsAssociate.AppCommand = "C:\Windows\Notepad.exe %1" ' %1 is the file opening ' clsAssociate.DefaultIcon = "C:\Windows\Notepad.exe, 2" ' Use icon 2 in Notepad ' clsAssociate.Associate Public Public Public Public Public Title As String Class As String Extension As String AppCommand As String DefaultIcon As String

Private Declare Function RegCreateKey& Lib "advapi32.DLL" Alias "RegCreateKeyA" (ByVal hKey&, ByVal lpszSubKey$, hKey&) Private Declare Function RegSetValue& Lib "advapi32.DLL" Alias "RegSetValueA" (ByVal hKey&, ByVal lpszSubKey$, ByVal fdwType&, ByVal lpszValue$, ByVal dwLength&) Private Private Private Private Private Private Private Private Private Private Private Private Const Const Const Const Const Const Const Const Const Const Const Const ERROR_SUCCESS = 0& ERROR_BADDB = 1& ERROR_BADKEY = 2& ERROR_CANTOPEN = 3& ERROR_CANTREAD = 4& ERROR_CANTWRITE = 5& ERROR_OUTOFMEMORY = 6& ERROR_INVALID_PARAMETER = 7& ERROR_ACCESS_DENIED = 8& HKEY_CLASSES_ROOT = &H80000000 MAX_PATH = 256& REG_SZ = 1

http://www.vbmania.com.br
Pgina 2 de 7

Public Sub Associate() Dim sKey As String Dim KeyVal As String Dim rc As Long Dim hKey As Long Dim AppTitle As String, AppClass As String, AppCmdLine As String, DefIcon As String AppTitle = Title AppClass = Class AppCmdLine = AppCommand DefIcon = DefaultIcon If AppTitle = "" Then Err.Raise 898 + 24, "Associate Class", "Associate Class - Application title not specified" Exit Sub ElseIf AppClass = "" Then Err.Raise 898 + 28, "Associate Class", "Associate Class - Application Class name not specified" Exit Sub ElseIf AppCmdLine = "" Then Err.Raise 898 + 32, "Associate Class", "Associate Class - Command line of the program not specified" Exit Sub End If sKey = AppClass KeyVal = AppTitle rc& = RegCreateKey&(HKEY_CLASSES_ROOT, sKey, hKey&) rc& = RegSetValue&(hKey&, "", REG_SZ, KeyVal, 0&) KeyVal = AppClass rc& = RegCreateKey&(HKEY_CLASSES_ROOT, Extension, hKey&) rc& = RegSetValue&(hKey&, "", REG_SZ, KeyVal, 0&) KeyVal = AppCmdLine & " %1" rc& = RegCreateKey&(HKEY_CLASSES_ROOT, sKey, hKey&) rc& = RegSetValue&(hKey&, "shell\open\command", REG_SZ, KeyVal, MAX_PATH) rc& = RegSetValue&(hKey&, "DefaultIcon", REG_SZ, DefIcon, Len(DefIcon)) End Sub

Como voc pode ver, esta classe realiza todo o gerenciamento de associao, sendo bem prtica e simples de ser utilizada. O prximo passo criar a rotina principal do programa (Sub Main) que vai por sua vez executar a associao do tipo de arquivo ao programa, identificar se um arquivo vlido e finalmente executar uma ao padro baseada no arquivo que foi passada (neste exemplo simplesmente carrega o contedo de um arquivo de texto para dentro de uma textbox). Aps criar um mdulo em seu projeto, basta inserir o cdigo abaixo: Module1.bas
Option Explicit Sub Main() Dim clsAssociate As New CAssociate Dim L As Long Dim S As String Dim F As Form1 Dim A As String With clsAssociate .Title = "Arquivo anotado"

http://www.vbmania.com.br
Pgina 3 de 7

.Class = "Anotado.File" .Extension = ".aan" .AppCommand = App.Path & IIf(Right(App.Path, 1) <> "\", "\", "") & App.EXEName & ".exe %1" .DefaultIcon = App.Path & IIf(Right(App.Path, 1) <> "\", "\", "") & App.EXEName & ".exe, 2" .Associate End With If (Trim(Command) = "") Then End End If A = Split(Command, " ")(0) If Dir(A) = "" Then MsgBox "Arquivo " & A & " no existe !", 16 End Else A = Split(Command, " ")(0) MsgBox A L = FreeFile Set F = New Form1 F.Caption = A Open A For Input As #L Do While Not EOF(L) Line Input #L, S F.Text1 = F.Text1 & S & vbCrLf Loop Close #L F.Show End If End Sub

Neste exemplo so feitas verificaes bsicas (por exemplo se o arquivo existe) e em seguida criada a associao ao programa atual. O formulrio utilizado (Form1.Frm) contm somente uma textbox (com multiline = True) e mais nada. Form1.Frm
Option Explicit Private Sub Form_Resize() On Error Resume Next Text1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight End Sub Private Sub Form_Unload(Cancel As Integer) End End Sub

Propriedades avanadas de tratamento Adicionado mais cones como opo para o Windows. Dentro do Visual Basic possumos a opo de utilizar arquivos de recurso, estes arquivos suportam vrios tipos de dados, entre eles arquivos de cone. Inserindo arquivo de cone no seu projeto, automaticamente voc permite ao Windows reconhecer que existem novos

http://www.vbmania.com.br
Pgina 4 de 7

tipos de cones para o arquivo associado. Neste exemplo criei dois novos cones em um arquivo de recursos, e compilei o programa. Figura 1 Adicionando Recursos ao Projeto

http://www.vbmania.com.br
Pgina 5 de 7

Aps compilar o programa e executar o arquivo associado, quando o Windows Explorer for chamado e a opo de Tipos de Arquivo Associados for chamada, automaticamente uma lista de novos cones pode ser encontrada na opo avanada, veja

Vejam que no caso acima, o cone padro do arquivo o cone do formulrio do Visual Basic , eu alterei o cone para o segundo item da lista de cones disponveis e verifiquei em seguida no Windows Explorer como ficou o resultado, veja:

http://www.vbmania.com.br
Pgina 6 de 7

Por fim aqui est o Form1.Frm em execuo, ele simplesmente demonstra os valores do arquivo de texto, j que seu carregamento (do arquivo texto em questo) foi feito na rotina principal (Sub Main), cabendo ele somente fazer o resize da textbox.

http://www.vbmania.com.br
Pgina 7 de 7