A raíz de una pregunta de McPegasus sobre este tema, he construido unas
funciones para crear un acceso directo de un fichero en el escritorio de
Windows por código.
El caso es que existe una API (fCreateShellLink, para quien quiera saberlo)
que ya hace eso, pero al parecer tiene alguna que otra pega. Para mi la
prinicipal pega es que forma parte de una de las librerías de VB y no
siempre estará disponible, a diferencia de las librerías estandar de
Windows. También parece ser que hay alguna dificultad cuando se trata de
distintos PCs (si no he entendido mal leyendo del inglés).
De cualquier forma, aquí tenéis el código. Espero que esté todo correcto.
'******** Código **********
'
' Código para crear un acceso
' directo de un fichero en el
' escritorio de Windows
'
' Funciones:
' crearAccesoDirecto
' obtenerCarpeta
' nomFichero
'
' Autor: Juan M. Afán de Ribera
' Fecha: Mayo 2003
'
' Basado en una idea original de
' Randy Birch
' URL: http://www.mvps.org/vbnet/
'
' Si alguien trabajara con la
' versión 97 de Access mejor
' que pase por la dirección
' (en una sola línea)
'
http://personal.telefonica.terra.es/web/medicofamilia/simularfunciones97.txt
' para descargar las funciones
' que se encuentran en esa
' página (aquí utilizamos la
' función InStrRev)
'
' Suerte!
Option Explicit
'para poner en un módulo estandar
Private Const CSIDL_RECENT = &H8
Private Const CSIDL_DESKTOPDIRECTORY = &H10
Private Const SHARD_PATH = &H2
Private Declare Function SHAddToRecentDocs Lib "shell32" _
(ByVal dwFlags As Long, _
ByVal dwData As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" _
Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, _
ByVal pszPath As String) As Long
Private Declare Function SHGetSpecialFolderLocation Lib "shell32" _
(ByVal hwndOwner As Long, _
ByVal nFolder As Long, _
pidl As Long) As Long
Function crearAccesoDirecto(rutaFichero As String) As Boolean
Dim carpetaDocumentos As String
Dim carpetaEscritorio As String
Dim nomAccesoRecientes As String
Dim nomAccesoEscritorio As String
carpetaDocumentos = obtenerCarpeta(CSIDL_RECENT)
carpetaEscritorio = obtenerCarpeta(CSIDL_DESKTOPDIRECTORY)
Call SHAddToRecentDocs(SHARD_PATH, rutaFichero)
nomAccesoRecientes = carpetaDocumentos & _
nomFichero(rutaFichero) & ".lnk"
nomAccesoEscritorio = carpetaEscritorio & _
nomFichero(rutaFichero) & ".lnk"
FileCopy nomAccesoRecientes, nomAccesoEscritorio
Kill nomAccesoRecientes
End Function
Function obtenerCarpeta(CSIDL As Long) As String
Dim carpeta As String
Dim pidl As Long
If SHGetSpecialFolderLocation(&O0, CSIDL, pidl) = 0 Then
carpeta = Space(255)
If SHGetPathFromIDList(ByVal pidl, ByVal carpeta) Then
obtenerCarpeta = Left(carpeta, _
InStr(carpeta, Chr$(0)) - 1) & "\"
End If
End If
End Function
Function nomFichero(rutaFichero As String) As String
nomFichero = Right(rutaFichero, Len(rutaFichero) _
- InStrRev(rutaFichero, "\"))
End Function
'********* Fin Código **********
--
Saludos desde Barcelona
Juan M. Afan de Ribera
MVP [Ms Access]
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)