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