Jump to content

Associar icons a aplicações.


programadorvb6
 Share

Recommended Posts

Olá bom dia.

Segui o exemplo facultado por : Wiki Portugal-a-Programar (https://wiki.portugal-a-programar.pt/dev_net:vb.net:associar_extensoes) onde se pode associar um ficheiro icon a uma aplicação, como mostra este exemplo fornecido :

  Dim CaminhoExe As String = "C:\Programas\A_Minha_Aplicacao\App.exe"
                Dim CaminhoIco As String = "C:\Programas\A_Minha_Aplicacao\App.ico"
                Dim Extensao As String = "WIKI"

                My.Computer.Registry.ClassesRoot.CreateSubKey("." & Extensao).SetValue("", Extensao, Microsoft.Win32.RegistryValueKind.String)
                My.Computer.Registry.ClassesRoot.CreateSubKey(Extensao & "\shell\open\command").SetValue("", CaminhoExe & " ""%l"" ", Microsoft.Win32.RegistryValueKind.String)
                My.Computer.Registry.ClassesRoot.CreateSubKey(Extensao & "\DefaultIcon").SetValue("", CaminhoIco, Microsoft.Win32.RegistryValueKind.ExpandString)

- O que eu pretendia era associar um icon, proveniente do resources , como mostra a imagem em baixo.

http://img17.imageshack.us/img17/4587/imagemglw.png

- Alguém sabe como o fazer a ligação a um icon que esteja no Resource/Ou extrair temporariamente o arquivo para ser usado?

Grato desde já pela vossa atenção.

Programadorvb6

______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Link to comment
Share on other sites

Olá Caça.

Fiz como me indicou, mas devolve erro.

http://img713.imageshack.us/img713/4569/errojp.jpg

Grato desde já pela sua ajuda.

Programadorvb6

______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Link to comment
Share on other sites

Podes extrair o ficheiro, escrevendo-o no disco

My.Computer.FileSystem.WriteAllBytes("Caminho", My.Resources.Nome_do_Icon, False)

Atendendo ao que o @Caça te disse tu só estás a definir a pasta, não estás a definir a pasta + a imagem, e é isso que te falta provavelmente:

Caminho = Application.StartupPath & "\imagem_1.jpg"
Link to comment
Share on other sites

Olá bioshock 

Fiz assim e também deu o mesmo erro , será que tenho que chamar alguma Dll?

My.Computer.FileSystem.WriteAllBytes(MyTempFilePath, My.Resources.MepFile, False)

Grato desde já pela sua ajuda.

Programadorvb6

______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Link to comment
Share on other sites

Bem, eu fui experimentar a solução dada pelo @Caça, e tinhas de converter primeiro o formato Bitmap, como disseste e bem, para Bytes().

Contudo há uma solução mais rápida e também eficaz:

My.Resources.Imagem_1.Save("C:\img_1.jpg", Drawing.Imaging.ImageFormat.Jpeg)
Link to comment
Share on other sites

Olá boa noite bioshock .

Fiz então assim e funcionou:

My.Resources.MepFile.Save(MyTempFilePath, Drawing.Imaging.ImageFormat.Icon)

Ao chegar a casa, exprimentei com no Windows 7 Ultimate

- E obtive este erro :

http://img163.imageshack.us/img163/550/errfi.jpg

É um pouco estranho, porque no Xp, o exemplo dado pela : Wiki Portugal-a-Programar, funciona na perfeição.

Em casa tenho o windows 7 Ultimate e devolve-me este erro.

O que poderá estar mal?

- Deixo o código que fiz para que me possam ajudar :

'================== Nas Classes ==================
Imports System.IO

Public Class Procedimentos
Public Sub Associar_Extensao(ByRef Ficheiro_Modificar As String, ByRef Ficheiro_Icon As String, ByRef Extensao_Tipo As String)
        Dim MyTempFilePath As String = Application.StartupPath & Ficheiro_Icon
        

        My.Resources.MepFile.Save(MyTempFilePath, Drawing.Imaging.ImageFormat.Icon)

        Dim CaminhoExe As String = Application.StartupPath & Ficheiro_Modificar '"\Folha.Mep"
        Dim CaminhoIco As String = MyTempFilePath  '"\MepFile.ico"
        Dim Extensao As String = Extensao_Tipo '"Mep"

        My.Computer.Registry.ClassesRoot.CreateSubKey("." & Extensao).SetValue("", Extensao, Microsoft.Win32.RegistryValueKind.String)
        My.Computer.Registry.ClassesRoot.CreateSubKey(Extensao & "\shell\open\command").SetValue("", CaminhoExe & " ""%l"" ", Microsoft.Win32.RegistryValueKind.String)
        My.Computer.Registry.ClassesRoot.CreateSubKey(Extensao & "\DefaultIcon").SetValue("", CaminhoIco, Microsoft.Win32.RegistryValueKind.ExpandString)
        Application.DoEvents()
        File.Delete(MyTempFilePath)
    End Sub
    Public Sub Extensao_Original(ByRef Extensao_Tipo As String)
        Dim Extensao As String = Extensao_Tipo.ToString '"Mep"

        My.Computer.Registry.ClassesRoot.DeleteSubKey("." & Extensao, False)
        My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao & "\DefaultIcon", False)
        My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao & "\shell\open\command", False)
        My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao & "\shell\open", False)
        My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao & "\shell", False)
        My.Computer.Registry.ClassesRoot.DeleteSubKey(Extensao, False)
    End Sub
End Class

Public Class Funcoes
    Public Function ExisteFicheiro(ByRef Caminho_Ficheiro As String) As Boolean

        If IO.File.Exists(Caminho_Ficheiro) Then
            ExisteFicheiro = True
        Else
            ExisteFicheiro = False
        End If
    End Function
End Class
'================== No Módulo ==================
Module DefGlobais
Public ObjProcedimentos As New Procedimentos
Public ObjFuncoes As New Funcoes
End Module
'================== No Formulário ==================
Public Class RegistoH

Private Sub RegistoH_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If ObjFuncoes.ProcuraExtensao("Mep") = False AndAlso ObjFuncoes.ProcuraExtensao("Mep") = False Then
            ObjProcedimentos.Associar_Extensao("\Folha.Mep", "\MepFile.ico", "Mep")
        End If
        Application.DoEvents()
       
       'Tira o ficheiro do casulo, para que se possa trabalhar.
        If ObjFuncoes.ExisteFicheiro(Application.StartupPath & "\Folha.Mep") = True Then
            Escudo.Desproteger_Ficheiro(Application.StartupPath & "\Folha.Mep", Application.StartupPath & "\Folha.mdb")
        End If
        Application.DoEvents()
        
        MostraTempo.Enabled = True
        Me.lblHorario.Text = FormatDateTime(Date.Now, DateFormat.LongTime) 'Novo Label para mostrar o horário
        AbrirBD()
        Call ObjProcedimentos.LimpaCampos(Me, Procedimentos.Limpa_Controle.Todos)
        Me.PreencherLista()
        Me.Grelha.Select()
        Accoes_Botoes(Me, 2, 2, Ordem.DesLigar)
        ObjProcedimentos.Formas_Cursor(Me.Grelha, Procedimentos.Cursor_Tipo.Cursor_Default)
        ObjProcedimentos.Formas_Cursor(Me.ToolStrip1, Procedimentos.Cursor_Tipo.Cursor_Mao)
    End Sub
End Class

Grato desde já pela vossa arenção.

Atentamente.

Programadorvb6

______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Link to comment
Share on other sites

Olá mais uma vez.

Como descrevi em cima fiquei pendurado com o Win7 e nem sei como sair dela!

Obrigado desde já pela sua participação.

Atentamente

programadorvb6

______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Link to comment
Share on other sites

À primeira vista, tens de alterar a variável MyTempFilePath para:

Dim MyTempFilePath As String = Application.StartupPath & "\" & Ficheiro_Icon

Já agora, o que devolve a variável Ficheiro_Icon? Apenas o nome? Se for só o nome, tens de colocar:

Dim MyTempFilePath As String = Application.StartupPath & "\" & Ficheiro_Icon & ".jpg"

Ou seja, nome + respectiva extensão.

Link to comment
Share on other sites

Olá bioshock

Em cima no código descrito por mim está referênciado no Load as definições

'objecto de procedimento.[Ligar A:] Associar_Extensao([FicheiroEnc+Ext],[FicheiroIcon+Ext],[Nome da ref ao ficheiro na root]
ObjProcedimentos.Associar_Extensao("\Folha.Mep", "\MepFile.ico", "Mep")

Como posso então contornar este problema?

-> Access to the registry key 'HKEY_CLASSES_ROOT\.Mep' is denied.

É estranho porque temos até instruções para os SpecialFolders etc..

Grato desde já pela vossa ajuda.

Atentamente

Programadorvb6

EDIT: GeSHi adicionado, já vais com mais de 750 mensagens e ainda não sabes utilizar o GeSHi?

aqui como utilizar o GeSHi


______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Link to comment
Share on other sites

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
 Share

×
×
  • 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.