Como crear un formato o extensión propia.

Iniciado por Brian1511, 11 Agosto 2013, 17:54 PM

0 Miembros y 1 Visitante están viendo este tema.

Brian1511

Hola a todos ,

aqui con otra duda para el mejor foro de la internet....

mi duda es simple solo quiero saber como creo una extensión propia para un programa la cual cuando el archivo se crea , se guarda con el icono del programa con un nombre y con un nombre espefifico?

Obtube este codigo en la internet pero aun no se como se llama , porque intente como decia en un ejemplo pero no me funciono, aver si ustedes pueden ayudarme con esto:

Código ( vb) [Seleccionar]



'LLamada a las Api de Windows (advapi32)
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
'Constantes
Const HKEY_CLASSES_ROOT = &H80000000
Const REG_SZ = 1 'Valor de cadena
Public Res As Long

'IconFile -Dirección del icono que va a tener la extensión.
'ExeFile -Dirección del programa con que se va abrir la extensión.
'ProgramName -Nombre con que se idectifica el programa.
'Extension - Extension que se va a registrar Ejemp Jpg (sin el pto)
'ExtensionDescripcion -La descripción del extension que se mostrara
'en el explorador Ejem "Winrar Archive" (Este es el caso de *.rar extesion del Winrar)
Public Sub registrarExtension(ByVal IconFile As String, ByVal ExeFile As String, ByVal ProgramName As String, ByVal Extension As String, ByVal ExtensionDescripcion As String)
On Error GoTo Fin
Dim SubKey As String, I As String, E As String
SubKey = Extension
'Crea la primera clave en el registro,por ejemplo .jpg con valor jpgPaint
I = IconFile
RegCreateKey HKEY_CLASSES_ROOT, "." & SubKey, Res
RegOpenKey HKEY_CLASSES_ROOT, "." & SubKey, Res
RegSetValueEx Res, "", 0, REG_SZ, ByVal SubKey & ProgramName, Len(SubKey & ProgramName)

'Crea la segunda clave en el registro,por ejemplo jpgPaint con valor jpgPaint
RegCreateKey HKEY_CLASSES_ROOT, SubKey & ProgramName, Res
RegOpenKey HKEY_CLASSES_ROOT, SubKey & ProgramName, Res
RegSetValueEx Res, "", 0, REG_SZ, ByVal ExtensionDescripcion, Len(ExtensionDescripcion)

'Crea la primera subclave en el registro llamada DefaultIcon,con la ruta del icono seleccionado D:\RegExt\Cube 2.ico O C:\AS.EXE,1
RegCreateKey HKEY_CLASSES_ROOT, SubKey & ProgramName & "\DefaultIcon", Res
RegOpenKey HKEY_CLASSES_ROOT, SubKey & ProgramName & "\DefaultIcon", Res
RegSetValueEx Res, "", 0, REG_SZ, ByVal I, Len(I)

'Crea la segunda y tercera subclaves en el registro llamadas open\command,con la ruta del programa seleccionado. Ejem: C:\AS.EXE,1
E = ExeFile & " %1"
RegCreateKey HKEY_CLASSES_ROOT, SubKey & ProgramName & "\shell\open\command", Res
RegOpenKey HKEY_CLASSES_ROOT, SubKey & ProgramName & "\shell\open\command", Res
RegSetValueEx Res, "", 0, REG_SZ, ByVal E, Len(E)
Fin:
End Sub







[/sup]



Creador de BrainMind

xustyx

mmm creo que en teoria quien tendria que ponerle icono a tus archivos es el S.O, me refiero que a cuando instales la aplicacion metas un registro en windows que diga que los archivos con tal extension tienen que usar ese programa para abrirse y tal icono.

No se si existe otra manera de que tu app cuando cree el archivo meta como recurso el icono pero NPI, sigo pensando que deberia ser tu app la que se encargase de meter esos registros al instalarse.

noalg

Solo debes llamar la funcion para que te registre el tipo archivo a tu programa
Ejemplo:
Código (vb) [Seleccionar]
registrarExtension("c:\mi_icono.ico", "c:\exe_de_mi_programa.exe", "nombre de mi programa", "extension(sin el punto)", "tipo de archivo que es la extension")
::¿*¿---//&$#\\---▶{}◀---//#$&\\---?*?::


¡¡¡NO PINCHES AQUI SI NO QUIERES INFECTARTE CON UN VIRUS!!!

xustyx

Soy tan vago que no me había ni leido el codigo XDDDD.

Brian1511

Gracias por comentar , ese que puse me funcionaba pero no hacia todo, no me ponia el icono.

Ya lo he resuelto!!

Esto es  lo que use , lo pongo por si alguien tiene la misma duda o el mismo problema:


Este codigo va en el Form Load

tambien se puede poner en un Command o donde sea...


Código (vb) [Seleccionar]


     
    'Variables para los datos que asociará una extención con un programa
    Dim Descripcion As String
    Dim Ruta_Programa As String
    Dim Ruta_Icono As String
    Dim Extension As String
     
    'Descripción del Programa
    Descripcion = "Aqui pones la descripcion de tu archivo creado."
   
    'Path de la aplicación
    Ruta_Programa = App.Path & "\" & App.EXEName

    ' La extensión a asociar
    Extension = ".tu extensión"
     
    'Ruta del Archivo de ícono ( opcional )
    Ruta_Icono = App.Path & "\Icono.ico"
     
     
    'Llama a la función Asociar_Extension_Programa
    Call Asociar_Extension_Programa(Descripcion, _
                                    Ruta_Programa, _
                                    Extension, _
                                    Ruta_Icono)
     






Y este es el modulo:
No cambies nada de aqui solo del primer codigo!
Código (vb) [Seleccionar]




    Option Explicit
     
    'Declaraciones del Api y constantes
    '#####################################
    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 Const HKEY_CLASSES_ROOT = &H80000000
    Private Const MAX_PATH = 256&
    Private Const REG_SZ = 1
     
     
    'Subrutina que asocia la extensión del programa
    '###############################################
     
    Public Sub Asociar_Extension_Programa(Descripcion As String, _
                                          Programa As String, _
                                          Extension As String, _
                                          Optional Icono As String)
     
     
    Dim Clave As String
    Dim Valor_Clave As String
    Dim rc As Long
    Dim Handle_Clave As Long
    Dim ret As Long
     
     
         
        If Descripcion = "" Then
            MsgBox " No se especificó la descripción del programa", vbCritical
            Exit Sub
        End If
        If Programa = "" Then
            MsgBox "  No se ha especificado la ruta del programa", vbCritical
            Exit Sub
        End If
        If Extension = "" Then
            MsgBox "  No se ha especificado la extension del programa", vbCritical
            Exit Sub
        End If
         
         
         
        Clave = "clase"
        Valor_Clave = Descripcion
        ret = RegCreateKey&(HKEY_CLASSES_ROOT, Clave, Handle_Clave&)
        ret = RegSetValue&(Handle_Clave&, "", REG_SZ, Valor_Clave, 0&)
         
        ' Graba la extension
        Valor_Clave = "clase"
        ret = RegCreateKey&(HKEY_CLASSES_ROOT, Extension, Handle_Clave&)
        ret = RegSetValue&(Handle_Clave&, "", REG_SZ, Valor_Clave, 0&)
         
         'Graba la ruta del ejecutable y el comando Shell\open\command
        Valor_Clave = Programa & " %1"
        ret = RegCreateKey&(&H80000000, Clave, Handle_Clave&)
        ret = RegSetValue&(Handle_Clave&, "shell\open\command", 1, Valor_Clave, 256&)
         
        ' Graba la ruta del ícono que se asociará al ejecutable
        ret = RegSetValue&(Handle_Clave&, "DefaultIcon", 1, Icono, Len(Icono))
    End Sub






Creador de BrainMind