Crear archivo lnk

Crear archivo lnk

Postby Sebastián Almirón » Fri Jan 31, 2014 6:06 pm

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.
User avatar
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Crear archivo lnk

Postby acuellar » Fri Jan 31, 2014 6:21 pm

Sebastian

Así se hace:
Code: Select all  Expand view

 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
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Crear archivo lnk

Postby horacio » Fri Jan 31, 2014 9:11 pm

Adhemar, al compilar me arroja este error

Code: Select all  Expand view

crear_acceso_directo.prg(6) Error E0030  Syntax error "syntax error at ':'"
 


y corresponde a esta linea

Code: Select all  Expand view

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
Last edited by horacio on Sat Feb 01, 2014 10:36 am, edited 1 time in total.
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Crear archivo lnk

Postby acuellar » Fri Jan 31, 2014 9:39 pm

Horacio

Aquí va el valor

Code: Select all  Expand view

#define CSIDL_DESKTOPDIRECTORY     0x0010
 


Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Crear archivo lnk

Postby FranciscoA » Sat Feb 01, 2014 3:55 am

y C_getspecialfolder() es una función que se encuentra en Harbour o xHarbour o en ambos ?

+1
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Crear archivo lnk

Postby FranciscoA » Sat Feb 01, 2014 4:06 am

Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Crear archivo lnk

Postby acuellar » Sat Feb 01, 2014 11:27 am

Aquí la función
Code: Select all  Expand view

#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
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Crear archivo lnk

Postby horacio » Sat Feb 01, 2014 1:09 pm

Adhemar, muchas gracias. Funcionó perfectamente.

Saludos
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Crear archivo lnk

Postby informaticaeloy » Sun Feb 02, 2014 9:30 pm

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.
Windows 10 + FWH 20.08 + BCC 7.4 + Harbour 3.2.0 + PSPad 5.0.3
User avatar
informaticaeloy
 
Posts: 118
Joined: Fri Dec 20, 2013 10:39 am
Location: Zaragoza, España

Re: Crear archivo lnk

Postby Sebastián Almirón » Mon Feb 03, 2014 9:55 am

Muchas gracias Adhemar, funciona perfecto.

Saludos
User avatar
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Crear archivo lnk

Postby jesusdelamora » Sun Jun 05, 2016 3:52 am

Gracias funiciona excelente
jesusdelamora
 
Posts: 20
Joined: Fri Apr 25, 2014 3:05 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 75 guests