Page 1 of 1
Crear archivo lnk
Posted: Fri Jan 31, 2014 6:06 pm
by Sebastián Almirón
He hecho un programa de instalación de una aplicación, lo he empaquetado todo con el iexpress para que los clientes se lo puedan bajar de mi servidor ftp.
Durante el proceso de instalación me gustaría darles la posibilidad de que se cree un acceso directo a la aplicación en el escritorio. Sobre como copiar el archivo .lnk al escritorio del usuario no tengo problema, con Gete("USERPROFILE").
¿ Pero como puedo modificar el archivo .lnk (o crear uno nuevo) que lleva originalmente para indicarle que está instalada en el directorio que ha elegido el usuario y que se ejecute en ese directorio.
Saludos y buen fin de semana.
Re: Crear archivo lnk
Posted: Fri Jan 31, 2014 6:21 pm
by acuellar
Sebastian
Así se hace:
Code: Select all
cEscritorio:=C_getspecialfolder(CSIDL_DESKTOPDIRECTORY)
pLnk( 'C:\VIADELSISTEMA\SISTEMA.EXE',cEscritorio+"\Sistema.lnk",,'C:\VIADELSISTEMA\SISTEMA.EXE' )
*Aquí la función
FUNCTION pLnk( cFile, cNameLnk, cWorkingDir, cIcon ) //Crear acceso directo
LOCAL oShell, oLnk
DEFAULT cFile := ''
DEFAULT cNameLnk := ''
DEFAULT cWorkingDir := ''
DEFAULT cIcon := ''
IF !File( cFile )
RETU .F.
ENDIF
IF Empty( cNameLnk )
cNameLnk := cFilePath( cFile ) + cFileNoExt( cFile ) + '.lnk'
ENDIF
IF Empty( cWorkingDir )
cWorkingDir := cFilePath( cFile )
ENDIF
TRY
oShell := CreateObject( "Wscript.Shell" )
CATCH
MsgAlert( 'Error Create object WScript.Shell', 'Error' )
RETU .F.
END
oLnk := oShell:CreateShortcut( cNameLnk )
oLnk:TargetPath := cFile
oLnk:WindowStyle := 1 //1=Normal 2=Minimizada 3=Maximizada
IF !Empty( cIcon )
oLnk:IconLocation := cIcon
ENDIF
IF !Empty( cWorkingDir )
oLnk:WorkingDirectory := cWorkingDir
ENDIF
oLnk:Save()
Return .T.
Espero te sirva
Saludos,
Adhemar
Re: Crear archivo lnk
Posted: Fri Jan 31, 2014 9:11 pm
by horacio
Adhemar, al compilar me arroja este error
Code: Select all
crear_acceso_directo.prg(6) Error E0030 Syntax error "syntax error at ':'"
y corresponde a esta linea
Code: Select all
cEscritorio := C_getspecialfolder( CSIDL_DESKTOPDIRECTORY )
Un par de preguntas, supongo que CSIDL_DESKTOPDIRECTORY es una constante, cual es su valor ? y C_getspecialfolder() es una función que se encuentra en Harbour o xHarbour o en ambos ?
Desde ya muchísimas gracias por este aporte.
Saludos
Re: Crear archivo lnk
Posted: Fri Jan 31, 2014 9:39 pm
by acuellar
Horacio
Aquí va el valor
Code: Select all
#define CSIDL_DESKTOPDIRECTORY 0x0010
Saludos,
Adhemar
Re: Crear archivo lnk
Posted: Sat Feb 01, 2014 3:55 am
by FranciscoA
y C_getspecialfolder() es una función que se encuentra en Harbour o xHarbour o en ambos ?
+1
Re: Crear archivo lnk
Posted: Sat Feb 01, 2014 4:06 am
by FranciscoA
Re: Crear archivo lnk
Posted: Sat Feb 01, 2014 11:27 am
by acuellar
Aquí la función
Code: Select all
#pragma BEGINDUMP
#include <windows.h>
#include <shlobj.h>
#include "hbapi.h"
#include "hbapiitm.h"
HB_FUNC( C_GETSPECIALFOLDER )
{
char *lpBuffer = (char*) hb_xgrab( MAX_PATH+1);
LPITEMIDLIST pidlBrowse;
SHGetSpecialFolderLocation(GetActiveWindow(), hb_parni(1), &pidlBrowse)
;
SHGetPathFromIDList(pidlBrowse, lpBuffer);
hb_retc(lpBuffer);
hb_xfree( lpBuffer);
}
#pragma ENDDUMP
Saludos,
Adhemar
Re: Crear archivo lnk
Posted: Sat Feb 01, 2014 1:09 pm
by horacio
Adhemar, muchas gracias. Funcionó perfectamente.
Saludos
Re: Crear archivo lnk
Posted: Sun Feb 02, 2014 9:30 pm
by informaticaeloy
Hola,
habéis tenido en cuenta si el usuario al instalar el programa puede cambiar de ruta ? si lo cambia, tal vez no funcione el link.
Re: Crear archivo lnk
Posted: Mon Feb 03, 2014 9:55 am
by Sebastián Almirón
Muchas gracias Adhemar, funciona perfecto.
Saludos
Re: Crear archivo lnk
Posted: Sun Jun 05, 2016 3:52 am
by jesusdelamora
Gracias funiciona excelente