Programación General > C++ Builder

 Cómo Se Crea Un Archivo De Acceso Directo (*lnk)

(1/1)

pabju:
hola usuarios, estoy investigando algunas funciones de como se crea un archivo de acceso directo o "ShortCut" (*.lnk) y luego se guarda en el Escritorio de Windows... Alguien sepan que me ayuden....
Muchas gracias desde ya... :rolleyes:

_Viktor:
Hola, esto hace exactamente lo que necesitas ;) :

--- Código: Text --- //--------------------------------------------------------------------------- #define NO_WIN32_LEAN_AND_MEAN#include <vcl.h>#include <shlobj.h>#pragma hdrstop #include "Unit1.h" //---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)        : TForm(Owner){}//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender){//Para elegir el archivo destino del acceso directo    if(OpenDialog1->Execute())       CreaAcceso(OpenDialog1->FileName); }//---------------------------------------------------------------------------void TForm1::CreaAcceso(const AnsiString &file){    IShellLink* pLink;    IPersistFile* pPersistFile;     //Inicializamos la libreria COM    if(SUCCEEDED(CoInitialize(NULL)))    {        if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL,                                      CLSCTX_INPROC_SERVER,                                      IID_IShellLink, (void **) &pLink)))        {            //Asignamos los atributos del Acceso directo            pLink->SetPath(file.c_str());            pLink->SetDescription("Descripcion para probar");            pLink->SetShowCmd(SW_SHOW);             if(SUCCEEDED(pLink->QueryInterface(IID_IPersistFile,                                               (void **)&pPersistFile)))            {               /*Obtenemos la ruta del Escritorio*/               LPITEMIDLIST  pidl;               LPMALLOC      pShellMalloc;               char          Ruta[MAX_PATH];                if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))                 {                   if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,                                                CSIDL_DESKTOPDIRECTORY,                                                &pidl)))                    {                      //Creamos el Acceso.                      if(SHGetPathFromIDList(pidl, Ruta))                        {                           strcat(Ruta,"\\Acceso.lnk");                           WideString strShortCutLocation(Ruta);                           pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE);                           pPersistFile->Release();                        }                      pShellMalloc->Free(pidl);                    }                   pShellMalloc->Release();                 }              }            pLink->Release();        }        CoUninitialize();    }}//---------------------------------------------------------------------------  

Funciona perfecto, solo tienes que arreglar el detalle de que el acceso directo siempre queda como "Acceso.lnk", pues a mi ya se me acabo el tiempo, pero es facil de solucionar...

Espero te sirva y suerte!

pabju:
Muchisimas gracias amigote  :lol: , pero (no quiero molestarte  :whistling: ), me habia olvidado una cosita sobre: ademas de la creacion del "shorcut" , yo tengo varios iconos guardados en mi HD, y  no se cómo se coloca un icono sobre un archivo de acceso Directo y luego gauardarlo en el escritorio de Windows. Espero que me entiendas....

Navegación

[0] Índice de Mensajes

Ir a la versión completa