• Jueves 2 de Mayo de 2024, 00:53

Autor Tema:  Cómo Se Crea Un Archivo De Acceso Directo (*lnk)  (Leído 1751 veces)

pabju

  • Miembro activo
  • **
  • Mensajes: 34
    • Ver Perfil
Cómo Se Crea Un Archivo De Acceso Directo (*lnk)
« en: Jueves 15 de Enero de 2004, 03:30 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 271
    • Ver Perfil
    • http://AyudaCBuilder.foros.st
Re: Cómo Se Crea Un Archivo De Acceso Directo (*lnk)
« Respuesta #1 en: Jueves 15 de Enero de 2004, 05:47 »
0
Hola, esto hace exactamente lo que necesitas ;) :
Código: Text
  1.  
  2. //---------------------------------------------------------------------------
  3.  
  4. #define NO_WIN32_LEAN_AND_MEAN
  5. #include <vcl.h>
  6. #include <shlobj.h>
  7. #pragma hdrstop
  8.  
  9. #include "Unit1.h"
  10.  
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma resource "*.dfm"
  14. TForm1 *Form1;
  15. //---------------------------------------------------------------------------
  16. __fastcall TForm1::TForm1(TComponent* Owner)
  17.         : TForm(Owner)
  18. {
  19. }
  20. //---------------------------------------------------------------------------
  21.  
  22. void __fastcall TForm1::Button1Click(TObject *Sender)
  23. {
  24. //Para elegir el archivo destino del acceso directo
  25.     if(OpenDialog1->Execute())
  26.        CreaAcceso(OpenDialog1->FileName);
  27.  
  28. }
  29. //---------------------------------------------------------------------------
  30. void TForm1::CreaAcceso(const AnsiString &file)
  31. {
  32.     IShellLink* pLink;
  33.     IPersistFile* pPersistFile;
  34.  
  35.     //Inicializamos la libreria COM
  36.     if(SUCCEEDED(CoInitialize(NULL)))
  37.     {
  38.         if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL,
  39.                                       CLSCTX_INPROC_SERVER,
  40.                                       IID_IShellLink, (void **) &pLink)))
  41.         {
  42.             //Asignamos los atributos del Acceso directo
  43.             pLink->SetPath(file.c_str());
  44.             pLink->SetDescription("Descripcion para probar");
  45.             pLink->SetShowCmd(SW_SHOW);
  46.  
  47.             if(SUCCEEDED(pLink->QueryInterface(IID_IPersistFile,
  48.                                                (void **)&pPersistFile)))
  49.             {
  50.                /*Obtenemos la ruta del Escritorio*/
  51.                LPITEMIDLIST  pidl;
  52.                LPMALLOC      pShellMalloc;
  53.                char          Ruta[MAX_PATH];
  54.  
  55.                if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
  56.                  {
  57.                    if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,
  58.                                                 CSIDL_DESKTOPDIRECTORY,
  59.                                                 &pidl)))
  60.                     {
  61.                       //Creamos el Acceso.
  62.                       if(SHGetPathFromIDList(pidl, Ruta))
  63.                         {
  64.                            strcat(Ruta,"\\Acceso.lnk");
  65.                            WideString strShortCutLocation(Ruta);
  66.                            pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE);
  67.                            pPersistFile->Release();
  68.                         }
  69.                       pShellMalloc->Free(pidl);
  70.                     }
  71.  
  72.                   pShellMalloc->Release();
  73.                  }
  74.  
  75.  
  76.             }
  77.             pLink->Release();
  78.         }
  79.         CoUninitialize();
  80.     }
  81. }
  82. //---------------------------------------------------------------------------
  83.  
  84.  


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!
_Viktor _Yañez_
"Ser inteligente no es ser mas, solo equivocarse menos y no usar visual basic"

http]

pabju

  • Miembro activo
  • **
  • Mensajes: 34
    • Ver Perfil
Re: Cómo Se Crea Un Archivo De Acceso Directo (*lnk)
« Respuesta #2 en: Jueves 15 de Enero de 2004, 13:30 »
0
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....