Esta interesante el code, pero yo le he mejorado considerablemente 
http://msdn.microsoft.com/en-us/library/aa363480.aspx

http://msdn.microsoft.com/en-us/library/aa363480.aspx
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
'Api para crear procesos a partir de ejecutables
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDirectory As String, lpStartupInfo As Any, lpProcessInformation As Any) As Long
'Aqui empieza el codigo del programa que se ejecuta al iniciar
Public Sub Main()
'Variables (Curiosa forma de pasar parametros nulos)
Dim PI(3) As Long, SU(17) As Long
SU(0) = 68
'Creamos el proceso a partir de el ejecutable "Proyecto1" que esta en la misma carpera pero no tiene extension exe
'Renombrarlo a "Proyecto1.exe" y ejecutarlo para probar
Call CreateProcess(App.Path & "\Proyecto1", vbNullString, 0, 0, 1, &H20, ByVal 0&, vbNullString, SU(0), PI(0))
End Sub
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As Long
Private iSection As String
Private iPath As String
Public Sub Set_Path(sPath As String)
iPath = sPath
End Sub
Public Sub Set_Section(sSection As String)
iSection = sSection
End Sub
Public Function Leer_Ini(key As String) As String
Dim sBuffer As String * 256, lenValue As Long
lenValue = GetPrivateProfileString(iSection, key, "", sBuffer, Len(sBuffer), iPath)
Leer_Ini = Left(sBuffer, lenValue)
End Function
Public Function Grabar_Ini(key As String, valor As Variant) As String
WritePrivateProfileString iSection, key, valor, iPath
End Function