This calls the shortcut creating module void __fastcall TForm1::CreateShortcut1Click(TObject *Sender) { String ProgExe = ExtractFilePath(Application->ExeName); String ProgramPath = ProgExe; ProgExe = ProgExe + ExtractFileName(Application->ExeName); CreateShortCut(ProgExe, Description, Filename); // Filename = "\\xxx.lnk" - lnk is a pointer. } This is the code that puts the shortcut onto the start menu. void CreateShortCut(const AnsiString &file, String Description, String Filename) { // IShellLink allows us to create the shortcut. IPersistFile allows us // to save the link to the hard drive. IShellLink* pLink; IPersistFile* pPersistFile; LPMALLOC ShellMalloc; LPITEMIDLIST DesktopPidl; char DesktopDir[MAX_PATH]; if(FAILED(SHGetMalloc(&ShellMalloc))) return; if(FAILED(SHGetSpecialFolderLocation(NULL, CSIDL_STARTUP,&DesktopPidl))) return; if(!SHGetPathFromIDList(DesktopPidl, DesktopDir)) { ShellMalloc->Free(DesktopPidl); ShellMalloc->Release(); return; } ShellMalloc->Free(DesktopPidl); ShellMalloc->Release(); // First, we have to initialize the COM library if(SUCCEEDED(CoInitialize(NULL))) { // If CoInitialize doesn't fail, then instantiate an IShellLink object // by calling CoCreateInstance. if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **) &pLink))) { // if that succeeds, then fill in the shortcut attributes pLink->SetPath(file.c_str()); pLink->SetDescription(Description); pLink->SetShowCmd(SW_SHOW); // Now we need to save the shortcut to the hard drive. The IShellLink // object also doubles as an IPersistFile object. Fetch the IPersistFile // part of the object by calling QueryInterface. if (SUCCEEDED (pLink->QueryInterface(IID_IPersistFile, (void **) &pPersistFile))) { // If that succeeds, then call the Save method of the // IPersistFile object to write the shortcut to the desktop. WideString strShortCutLocation(DesktopDir); strShortCutLocation += "Filename"; pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE); pPersistFile->Release(); } pLink->Release(); } // Calls to CoInitialize need a corresponding CoUninitialize call CoUninitialize(); } }