Tworzenie skrótu pliku na pulpicie

Aby po kliknięciu przycisku Button1 utworzyć skrót do pliku (np. programu), który znajduje się np. w katalogu c:\program\project1.exe na pulpicie:

Unit1.cpp

#include <shlobj.h>

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   IShellLink* pLink;
   IPersistFile* pPersistFile;
   AnsiString plik = "c:\\program\\project1.exe";

   LPMALLOC ShellMalloc;
   LPITEMIDLIST DesktopPidl;
   char DesktopDir[MAX_PATH];

   if (FAILED(SHGetMalloc(&ShellMalloc)))
      return;

   if (FAILED(SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOPDIRECTORY, &DesktopPidl)))
      return;

   if (!SHGetPathFromIDList(DesktopPidl, DesktopDir))
   {
      ShellMalloc->Free(DesktopPidl);
      ShellMalloc->Release();
      return;
   }

   ShellMalloc->Free(DesktopPidl);
   ShellMalloc->Release();

   if (SUCCEEDED(CoInitialize(NULL)))
   {
      if (SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
                                     IID_IShellLink, (void **) &pLink)))
      {
         pLink->SetPath(plik.c_str());
         pLink->SetDescription("Mój pierwszy skrót na pulpicie");
         pLink->SetShowCmd(SW_SHOW);

         if (SUCCEEDED(pLink->QueryInterface(IID_IPersistFile, (void **)&pPersistFile)))
         {
            WideString strShortCutLocation(DesktopDir);
            strShortCutLocation += "\\MójSkrót.lnk";
            pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE);
            pPersistFile->Release();
         }
         
         pLink->Release();
      }

      CoUninitialize();
   }
}