Jump to content

Recommended Posts

Posted

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

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

Posted

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.

Our lives begin to end the day we become silent about things that matter - Martin Luther King

Posted

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

Posted
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

Posted

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

Our lives begin to end the day we become silent about things that matter - Martin Luther King

Posted

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?

Our lives begin to end the day we become silent about things that matter - Martin Luther King

Posted

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.

Our lives begin to end the day we become silent about things that matter - Martin Luther King

Posted

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?

Our lives begin to end the day we become silent about things that matter - Martin Luther King

Posted
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

Posted

😁

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

Our lives begin to end the day we become silent about things that matter - Martin Luther King

Posted

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  😄

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

cumps

Posted

Que utilidade deveria ter? Tens seugestões?

Tipo a mensagem é para tar mesmo assim 🙂

Our lives begin to end the day we become silent about things that matter - Martin Luther King

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.