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

NuGuN

[Windows] Criar Nova Extensão de Ficheiros no Windows

31 mensagens neste tópico

Como sabem a grande maioria dos ficheiros tem uma extensão, texto.txt, imagem.jpg, executavel.exe, etc, etc.

Uma das funções das extensões dos ficheiros é ajudar o SO a identificar os vários tipos de ficheiros existentes (são mais que muitos).

Quando abrimos um ficheiro .txt, por exemplo, automaticamente nos é aberta a janela do Notepad com o texto que o ficheiro contém, nas pastas cada tipo de ficheiro tem o icon correspondente ao seu programa. Como é que o SO sabe que uma imagem é aberta com o visualizador de imagens ou que um ficheiro .html é aberto com o IE (caso o IE seja o browser predefinido no SO)?

Para isto o SO tem uma extensa lista com todos os tipos de ficheiros que ele conhece e que os programas criam, dentro do registo do sistema (registry).

Eu vou explicar como se cria uma extensão manualmente com as seguintes características

  • Icon Próprio
  • Ao fazer doubleclick no ficheiro com essa extensão ele abrirá um programa pré-definido

Isso serve para quando fazemos um programa que tem os seus próprios ficheiros e queremos que o windows os reconheça, por exemplo.

A extensão a criar vai ter o nome de test (.test). Primeiro abre-se o registo do sistema (Iniciar-> Executar e escreve-se regedit), depois:

  • abrimos a chave HKEY_CLASSES_ROOT
  • dentro da chave HKEY_CLASSES_ROOT criamos uma nova chave e damos-lhe o nome de .test
  • Seleccionamos a chave .test e do lado direito fazemos doubleclick em cima do valor de cadeia com o nome de (Predefinição) e no campo "Dados de Valor" colocamos TestFile (Atenção porque TestFile é diferente de testfile)
  • Em seguida criamos outra chave dentro da chave HKEY_CLASSES_ROOT e damos-lhe o nome de TestFile
  • Dentro da chave que criamos anteriormente (TestFile) criamos mais 2 chaves, uma com o nome de DefaultIcon e outra com o nome de shell
  • Seleccionamos a chave DefaultIcon e do lado direito no valor de cadeia (Predefinição) colocamos o directório do programa do qual queremos que a nossa extensão tenha o icon seguido de ",0" (sem as ""). Ficaria C:\programa.exe,0
  • Em seguida dentro da chave shell criamos outra chave com o nome open e dentro da chave open outra chave com o nome command
  • Seleccionamos a chave command e do lado direito no valor de cadeia (Predefinição) colocamos o directório com que queremos que os ficheiros com a extensão test sejam aberto mais o nome do ficheiro do programa seguido de um espaço e "%1" (sem as "")

E assim já temos uma nova extensão criada com icon e programa próprio. Para que estes valores entrem em vigor ou reinicia-se o sistema ou então pode-se utilizar um dos programas que vou deixar em anexo.

As extensões não tem só estas propriedades, se quisermos também que ao fazer click com o botão direito no ficheiro com a extensão .test nos apareça a opção "Editar" fazemos o seguinte:

  • Abrimos o registo do sistema
  • Abrimos a chave TestFile e em seguida a chave shell
  • Criamos uma nova chave dentro da chave shell com o nome de "Editar com Programa Teste" (sem as "")
  • E dentro da chave "Editar com Programa Teste" criamos outra chave com o nome de command
  • Seleccionamos a chave command e no lado direito no valor de cadeia (Predefinição) colocamos o mesmo que colocamos na chave command dentro da outra chave command(shell->open->command) caso o programa que queremos seja o mesmo

Vou ficar por aqui, existem mais algumas propriedades, uma delas é a opção print só que para utilizar esta opção o programa já tem de ter essa funcionalidade.

Para verem mais propriedades basta procurarem no regedit as extensões dos outros ficheiros, por exemplo se quiserem ver as propriedades da extensão .jpg basta iram ao regedit e na chave primária "HKEY_CLASSES_ROOT" procurem por .jpg e por jpgfile, seguindo esta lógica encontram ai todas as extensões que o vosso sistema tem guardadas ;)

Se alguém saber mais alguns truques sobre este assunto já sabe... :P

Em relação aos programas, pensei em fazer um programa mas encontrei um programa na net muito completo e bem feito pelo que decidi postar antes o código desse programa em vez de fazer um e deixo também um pequeno programa para fazerem o windows actualizar as modificações feitas para não terem de reiniciar o sistema ;)

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gostei do tópico. Está muito interessante. É mais uma coisa para aprender com o registo do windows.

O programa  actualizar foi feito por ti? E não me queres arranjar o código fonte ;)? Ou então a pasta que tem aquilo das forms, ...?

Quanto ao outro programa ainda vou experimentar porque ainda não pus em prática nada disto.

Depois digo mais alguma coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim senhor, já tinha uma vaga ideia sobre o assunto quando há uns anos explorava o registo para me ajudar nos programas de vb, mas não sabia essa parte da adição de menu's, etc...

Muito bem. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
O programa  actualizar foi feito por ti? E não me queres arranjar o código fonte Tongue?

Foi feito por min, mas limiteime a copiar do outro programa o essencial para fazer a actualização

Aqui fica o código:

Option Explicit

Private Declare Sub SHChangeNotify Lib "shell32.dll" (ByVal wEventId As Long, ByVal uFlags As Long, dwItem1 As Any, dwItem2 As Any)
Private Const SHCNE_ASSOCCHANGED = &H8000000
Private Const SHCNF_IDLIST = &H0&


Private Sub Command1_Click()
SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0
End Sub

Ou então a pasta que tem aquilo das forms, ...?

Ao que te referes???

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo se fosse melhor davas as extensões da pasta do projecto que são criadas quando trabalhas com basic.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epa entao não estas a falar do que eu estava a pensar  ;)

Podeste explicar melhor??

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo tu quando estas a desenvolver uma aplicação em Visual Basic com o Microsoft VB na tua direita tens uma cena que normalmente (predefinido) diz Form1.vb .....sabes? era isso que eu queria! Entendes?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para o programa da actualização --> Form1.frm

Para o outro --> Form1.frm ; associateExtension.bas

Já agora para que queres istu???

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou ver isso outra vez! E depois digo se deu ou n!

Porque eu estou a tentar criar um programa que altere as chaves automaticamente. Tipo tens uma lista e seleccionas o que queres mudar.  E depois punha esse butão do actualizar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se eu puser isto no inicio do código

Option Explicit

Private Declare Sub SHChangeNotify Lib "shell32.dll" (ByVal wEventId As Long, ByVal uFlags As Long, dwItem1 As Any, dwItem2 As Any)
Private Const SHCNE_ASSOCCHANGED = &H8000000
Private Const SHCNF_IDLIST = &H0&

E isto no sitio onde quero aquilo

Private Sub Command1_Click()
SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0
End Sub

Fica a funcionar certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Se eu puser isto no inicio do código

Código

GeSHi (vb):

Option Explicit

Private Declare Sub SHChangeNotify Lib "shell32.dll" (ByVal wEventId As Long, ByVal uFlags As Long, dwItem1 As Any, dwItem2 As Any)

Private Const SHCNE_ASSOCCHANGED = &H8000000

Private Const SHCNF_IDLIST = &H0&

Created by GeSHI 1.0.7.5

Certo

E isto no sitio onde quero aquilo

Código

GeSHi (vb):

Private Sub Command1_Click()

SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0

End Sub

Created by GeSHI 1.0.7.5E

isto no sitio onde quero aquilo

Neste basta copiares a linha SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0

Private Sub Command1_Click()

End Sub

Istu é apenas o evento do botão

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:cheesygrin:

Aplicação pronta  :biggrin:! So falta uns retoques no visual mas já vou lançar a versão 1.2.  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esta fixe, só é pena não ter mais nenhuma utilidade a não ser a de associar ou "desassociar" as extensões .skin

Já agora altera aquela TextBox onde tens o texto:

Skin.
Seleccione a área em baixo para associar
todos os ficheiros .skin a este programa.
Depois sempre que quiser utilizar os ficheiros .skin
este programa vai abri-los.

Esse texto dá para apagar mas, suponho que não era pa dar  :D

Se não sabes como se faz.... basta ires a propriedade Locked ou Lock da TextBox e meteres a True  :)

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que utilidade deveria ter? Tens seugestões?

Tipo a mensagem é para tar mesmo assim :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Senceramente não sei que utilidade podes dar a issu :s

Talvez introduzires issu noutro programa qualquer que seja necessário uma extenção própria

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Senceramente não sei que utilidade podes dar a issu :s

Talvez introduzires issu noutro programa qualquer que seja necessário uma extenção própria

cumps

Talvez fosse uma ideia interessante. Que programa sugeres?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Skin, qual é a diferensa entre a primeira versão e esta nova versão? Não reparei nas diferensas  :wallbash:  :wallbash:

Já agora, que programa utiilzas para criares os Setup's?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tem difrenças a nível dos About menu's.

O instalador é o Inno Setup 5.

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