Visual Basic - Acceso directo

Life is soft - evento anual de software empresarial
 
Vista:

Acceso directo

Publicado por Jorge (9 intervenciones) el 11/08/2005 02:08:41
Hola, que tal a todos ¿Podrian decirme como puedo crear un acceso directo de mi aplicacion en el escritorio cuando este sea ejecutado por vez primera?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Acceso directo

Publicado por Cecilia Colalongo (3116 intervenciones) el 11/08/2005 13:36:54
Fijate con esto:

Set loShell=CreateObject("wscript.Shell")
Set loShortcut=loShell.CreateShortcut(CarpetaEscritorio+"\MiAccesoDirecto.lnk")

With loShortcut
.TargetPath="MiAplicacion.htm"
.WorkingDirectory="DirectorioDeTrabajo"
.Save
End With

Para determinar la carpeta del escritorio:

Const CSIDL_DESKTOP = &H0
Const MAX_PATH = 260
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Private Type ITEMIDLIST
mkid As SHITEMID
End Type
Private Declare Function ShellAbout Lib "shell32.dll" Alias "ShellAboutA" (ByVal hWnd As Long, ByVal szApp As String, ByVal szOtherStuff As String, ByVal hIcon As Long) As Long
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Function GetSpecialfolder(CSIDL As Long) As String
Dim r As Long
Dim IDL As ITEMIDLIST
r = SHGetSpecialFolderLocation(100, CSIDL, IDL)
If r = NOERROR Then
Path$ = Space$(512)
r = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal Path$)
GetSpecialfolder = Left$(Path, InStr(Path, Chr$(0)) - 1)
Exit Function
End If
GetSpecialfolder = ""
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Acceso directo

Publicado por Zoto (41 intervenciones) el 11/08/2005 13:45:48
Hola, Jorge.

Hace tiempo escribí un código para realizar la operación que tu solicitas.
Aquí lo he recuperado y te lo he comentado exhaustivamente.

'====================================
'CODIGO MODULO
'====================================

'Esta función es la que se encarga de crear el acceso directo.
'Toma como parámetros:

'-FileName - el nombre completo del ejecutable (por ejemplo: "C:\Programas\programa.exe")

'-Destination - se trata de un String que determina el path o ruta donde crear el acceso directo. Hay algunos ya predeterminados, como:

'"Desktop" - lo crea en el Escritorio
'"Programs"- lo crea en Inicio > Programas
'"MyDocuments" - lo crea en Mis Documentos
'"StartMenu"- lo crea en el Menú Inicio

Function CreateShortCut(FileName As String, Destination As Variant, Optional Args As String) As Long

Dim WScript As Object
Dim WShortCut As Object
Dim ShortCutPath As String

On Error GoTo CreateShortCut_Error
If Len(Dir(FileName)) = 0 Then Err.Raise 52
Set WScript = CreateObject("WScript.Shell")
ShortCutPath = WScript.SpecialFolders(Destination)
If Len(ShortCutPath) = 0 Then
ShortCutPath = Destination
If Len(Dir(ShortCutPath, vbDirectory)) = 0 Then
Err.Raise 52
End If
End If

Set WShortCut = WScript.CreateShortCut(ShortCutPath & "\" & Dir(FileName) & ".lnk")
WShortCut.TargetPath = FileName

'Aquí puedes indicar el icono
WShortCut.IconLocation = FileName & ", 0"
WShortCut.WorkingDirectory = Left(FileName, Len(FileName) - Len(Dir(FileName)))

'Aquí se toman los argumentos
WShortCut.Arguments = Args
WShortCut.Save
CreateShortCut = -1

exit_CreateShortCut:

Set WShortCut = Nothing
Set WScript = Nothing
On Error GoTo 0
Exit Function

CreateShortCut_Error:

CreateShortCut = Err.Number
Resume exit_CreateShortCut

End Function

'====================================
'CODIGO FORMULARIO
'====================================

'En tu caso deseas crear un acceso directo en el escritorio solo la primera vez que el programa se ejecute, por lo tanto deberás guardar un valor de referencia que te indique si el programa ha sido ya ejecutado.
'Para hacerlo de manera sencilla, yo, en mi ejemplo, voy a utilizar las funciones GetSetting y SaveSetting.

'Para comprobar si la aplicación se ha ejecutado antes o es la primera vez que lo hace utiliza esta función:

Private Sub Form_Load()
If IsFirstTime = True Then 'Si es la primera vez que se ejecuta el programa
Dim numError As Long 'Variable que contiene el valor de retorno de la función encargada de crear el acceso directo (CreateShortCut)
numError = CreateShortCut("C:\Programas\programa.exe", "Desktop") 'Se crea el acceso directo:
'El primer parámetro es el nombre del programa, en este ejemplo: "C:\Programas\programa.exe"
'El segundo es el directorio donde crear el acceso directo.
'Además de tener la posibilidad de poner el tuyo propio, por ejemplo, "C:\", hay algunos
'ya predeterminados (te los he escrito en la definición de la función CreateShortCut)

'En tu caso, quieres crear el acceso directo en el escritorio, así que debes escribir "Desktop",
'como en el ejemplo.


If numError = -1 Then 'Acceso directo creado
MsgBox "El acceso directo se ha creado satisfactoriamente.", vbInformation + vbOKOnly, "Acceso directo creado"
Else 'Error al crear el acceso directo
MsgBox "Ha ocurrido un error al crear el acceso directo." & vbCrLf & "Número de error: " & numError & vbCrLf & vbCrLf _
& "No se pudo completar la operación."
End If

End Function

Public Function IsFirstTime() As Boolean
Dim Value As String 'Se declara una variable que contendrá el valor obtenido
Value = GetSetting(App.EXEName, "Settings", "Executed") 'A la variable Value
'se le da el valor obtenido después de consultar el valor del registro

If Value = "" Then 'Si el valor es nulo, es decir, no existe, quiere decir que el programa
'no se había ejecutado antes, es decir, es la primera vez que se ejecuta.
SaveSetting App.EXEName, "Settings", "Executed", "Yes" 'Se guarda el valor para indicar
'que ahora si se ha ejecutado el programa
IsFirstTime = True 'La función devuelve True, puesto que es la primera vez que se ha ejecutado el programa
End If

'Como el valor por defecto de una variable Booleana es False, si el valor no es nulo
'no se entrará en la condición y no se cambiará el valor de la variable IsFirstTime,
'que seguirá siendo False, indicando que la aplicación ya fue ejecutada antes,
'es decir, NO es la primera vez que se ha ejecutado la aplicación

End Function

'====================================
'CODIGO MODULO
'====================================

'Esta función es la que se encarga de crear el acceso directo.
'Toma como parámetros:

'-FileName - el nombre completo del ejecutable (por ejemplo: "C:\Programas\programa.exe")

'-Destination - se trata de un String que determina el path o ruta donde crear el acceso directo. Hay algunos ya predeterminados, como:

'"Desktop" - lo crea en el Escritorio
'"Programs"- lo crea en Inicio > Programas
'"MyDocuments" - lo crea en Mis Documentos
'"StartMenu"- lo crea en el Menú Inicio

Function CreateShortCut(FileName As String, Destination As Variant, Optional Args As String) As Long

Dim WScript As Object
Dim WShortCut As Object
Dim ShortCutPath As String

On Error GoTo CreateShortCut_Error
If Len(Dir(FileName)) = 0 Then Err.Raise 52
Set WScript = CreateObject("WScript.Shell")
ShortCutPath = WScript.SpecialFolders(Destination)
If Len(ShortCutPath) = 0 Then
ShortCutPath = Destination
If Len(Dir(ShortCutPath, vbDirectory)) = 0 Then
Err.Raise 52
End If
End If

Set WShortCut = WScript.CreateShortCut(ShortCutPath & "\" & Dir(FileName) & ".lnk")
WShortCut.TargetPath = FileName

'Aquí puedes indicar el icono
WShortCut.IconLocation = FileName & ", 0"
WShortCut.WorkingDirectory = Left(FileName, Len(FileName) - Len(Dir(FileName)))

'Aquí se toman los argumentos
WShortCut.Arguments = Args
WShortCut.Save
CreateShortCut = -1

exit_CreateShortCut:

Set WShortCut = Nothing
Set WScript = Nothing
On Error GoTo 0
Exit Function

CreateShortCut_Error:

CreateShortCut = Err.Number
Resume exit_CreateShortCut

End Function

'====================================
'CODIGO FORMULARIO
'====================================

'En tu caso deseas crear un acceso directo en el escritorio solo la primera vez que el programa se ejecute, por lo tanto deberás guardar un valor de referencia que te indique si el programa ha sido ya ejecutado.
'Para hacerlo de manera sencilla, yo, en mi ejemplo, voy a utilizar las funciones GetSetting y SaveSetting.

'Para comprobar si la aplicación se ha ejecutado antes o es la primera vez que lo hace utiliza esta función:

Private Sub Form_Load()
If IsFirstTime = True Then 'Si es la primera vez que se ejecuta el programa
Dim numError As Long 'Variable que contiene el valor de retorno de la función encargada de crear el acceso directo (CreateShortCut)
numError = CreateShortCut("C:\Programas\programa.exe", "Desktop") 'Se crea el acceso directo:
'El primer parámetro es el nombre del programa, en este ejemplo: "C:\Programas\programa.exe"
'El segundo es el directorio donde crear el acceso directo.
'Además de tener la posibilidad de poner el tuyo propio, por ejemplo, "C:\", hay algunos
'ya predeterminados (te los he escrito en la definición de la función CreateShortCut)

'En tu caso, quieres crear el acceso directo en el escritorio, así que debes escribir "Desktop",
'como en el ejemplo.


If numError = -1 Then 'Acceso directo creado
MsgBox "El acceso directo se ha creado satisfactoriamente.", vbInformation + vbOKOnly, "Acceso directo creado"
Else 'Error al crear el acceso directo
MsgBox "Ha ocurrido un error al crear el acceso directo." & vbCrLf & "Número de error: " & numError & vbCrLf & vbCrLf _
& "No se pudo completar la operación."
End If
End If
End Sub

Public Function IsFirstTime() As Boolean
Dim Value As String 'Se declara una variable que contendrá el valor obtenido
Value = GetSetting(App.EXEName, "Settings", "Executed") 'A la variable Value
'se le da el valor obtenido después de consultar el valor del registro

If Value = "" Then 'Si el valor es nulo, es decir, no existe, quiere decir que el programa
'no se había ejecutado antes, es decir, es la primera vez que se ejecuta.
SaveSetting App.EXEName, "Settings", "Executed", "Yes" 'Se guarda el valor para indicar
'que ahora si se ha ejecutado el programa
IsFirstTime = True 'La función devuelve True, puesto que es la primera vez que se ha ejecutado el programa
End If

'Como el valor por defecto de una variable Booleana es False, si el valor no es nulo
'no se entrará en la condición y no se cambiará el valor de la variable IsFirstTime,
'que seguirá siendo False, indicando que la aplicación ya fue ejecutada antes,
'es decir, NO es la primera vez que se ha ejecutado la aplicación

End Function

'==================================

Bien, aquí termina el código.
Espero que te funcione.
Si te da algún error o tienes alguna duda o problema con él coméntamelo.

Hasta otra,

Zoto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar