Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/05/2011, 13:44
Avatar de servantsoftware
servantsoftware
 
Fecha de Ingreso: abril-2011
Ubicación: 1 Pedro 4.11
Mensajes: 94
Antigüedad: 13 años, 8 meses
Puntos: 3
De acuerdo Respuesta: Aplicación al registro

Ya conseguí como, lo publicare para que les sirva de aporte:

En un modulo .Bas:

Código:
Option Explicit
  
'Declaración de constantes
'****************************
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
  
Public Const REG_SZ As Long = 1
Public Const REG_DWORD As Long = 4
  
Private Const KEY_ALL_ACCESS = &H3F
Private Const REG_OPTION_NON_VOLATILE = 0
  
  
'Declaración de las funciones api para el registro
'*************************************************
  
' Cierra la clave abierta
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  
'Abre una clave
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _
       (ByVal hKey As Long, _
        ByVal lpSubKey As String, _
        ByVal ulOptions As Long, _
        ByVal samDesired As Long, _
        phkResult As Long) As Long
  
'Establece un valor de tipo cadena
Private Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" _
        (ByVal hKey As Long, _
         ByVal lpValueName As String, _
         ByVal Reserved As Long, _
         ByVal dwType As Long, _
         ByVal lpValue As String, _
         ByVal cbData As Long) As Long
  
'Establece un valor de tipo entero
Private Declare Function RegSetValueExLong Lib "advapi32.dll" Alias _
         "RegSetValueExA" (ByVal hKey As Long, _
         ByVal lpValueName As String, _
         ByVal Reserved As Long, _
         ByVal dwType As Long, _
         lpValue As Long, _
         ByVal cbData As Long) As Long
  
'Elimina una clave
Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" _
        (ByVal hKey As Long, _
         ByVal lpSubKey As String)
  
'Elimina un valor del registro
Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" _
        (ByVal hKey As Long, _
         ByVal lpValueName As String)
  
  
  
  
  
' Función que elimina una clave especifica utilizando el Api RegDeleteKey
  
Function EliminarClave(clave As Long, Nombre_clave As String)
      
    Dim Ret As Long
    ' Eliminar
    Ret = RegDeleteKey(clave, Nombre_clave)
      
End Function
  
' Función que elimina un dato utilizando el Api RegDeleteValue
  
Function EliminarValor(clave As Long, _
                              Nombre_clave As String, _
                              Nombre_valor As String) As Boolean
  
  
       Dim Ret As Long
       Dim Handle_clave As Long
         
       ' Abre la clave del registro indicada
       Ret = RegOpenKeyEx(clave, Nombre_clave, 0, KEY_ALL_ACCESS, Handle_clave)
         
       'si el valor de retorno es distinto de 0 es por que hubo un error
       If Ret <> 0 Then
          EliminarValor = False
          Exit Function
       End If
         
       'Elimina el valor del registro
       Ret = RegDeleteValue(Handle_clave, Nombre_valor)
         
       If Ret <> 0 Then
          EliminarValor = False
          Exit Function
       End If
         
       'Cierra la vlave del registro abierta
       RegCloseKey (Handle_clave)
         
       ' OK
       EliminarValor = True
         
End Function
  
  
  
' Función que establece un nuevo valor mediante el Api SetValueEx
  
Function EstablecerValor(clave As Long, _
                                Nombre_clave As String, _
                                Nombre_valor As String, _
                                el_Valor As Variant, _
                                Tipo_Valor As Long) As Boolean
  
  
       Dim Ret As Long
       Dim Handle_clave As Long
  
       'Abre la clave del registro indicada
       Ret = RegOpenKeyEx(clave, Nombre_clave, 0, KEY_ALL_ACCESS, Handle_clave)
         
       'si el valor de retorno es distinto de 0 es por que hubo un error
       If Ret <> 0 Then
          EstablecerValor = False
          Exit Function
       End If
         
       'Establece el nuevo dato
       Ret = SetValueEx(Handle_clave, Nombre_valor, Tipo_Valor, el_Valor)
         
       If Ret <> 0 Then
          EstablecerValor = False
          Exit Function
       End If
         
       'cierra la clave abierta
       RegCloseKey (Handle_clave)
         
       'Ok
       EstablecerValor = True
         
         
End Function
  
' Función que establece y graba la entrada _
  en el registro ( para datos de cadena y Dword)
  
Private Function SetValueEx(ByVal Handle_clave As Long, _
                            Nombre_valor As String, _
                            Tipo As Long, _
                            el_Valor As Variant) As Long
      
    Dim Ret As Long
    Dim sValue As String
  
    Select Case Tipo
          
        ' Valor de tipo cadena
        Case REG_SZ
              
            sValue = el_Valor
            SetValueEx = RegSetValueExString(Handle_clave, _
                                             Nombre_valor, 0&, _
                                             Tipo, sValue, Len(sValue))
          
        'Valor Entero
        Case REG_DWORD
            Ret = el_Valor
            SetValueEx = RegSetValueExLong(Handle_clave, Nombre_valor, _
                                           0&, Tipo, Ret, 4)
        End Select
  
End Function
Botón para agregar la aplicación:

Código:
Dim Path_Programa As String
Dim Titulo_Programa As String
Dim Ret As Boolean
  
Path_Programa = App.Path & "\" & App.EXEName & ".exe"
Titulo_Programa = App.Title
  
  
Ret = EstablecerValor(HKEY_LOCAL_MACHINE, _
                     RAMA_RUN_WINDOWS, _
                     Titulo_Programa, _
                     Path_Programa, REG_SZ)
  
'si retorna True es por que creó el dato correctamente
If Ret Then
    MsgBox "En el próximo reinicio el programa iniciará con Windows.", vbInformation
      
      Close #1
Else
    MsgBox "Hubo un error, el programa no puede iniciar con Windows.", vbCritical
End If


Para quitarlo del registro:

Código:
MsgBox ("El programa ya no iniciará con Windows."), vbInformation

Dim Titulo_Programa As String
  
Titulo_Programa = App.Title
  
Call EliminarValor(HKEY_LOCAL_MACHINE, _
                   RAMA_RUN_WINDOWS, _
                   Titulo_Programa)