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
Ir a la versión completa