| Код | void CreateShortCut(char *file) { IShellLink* pLink; IPersistFile* pPersistFile; LPMALLOC ShellMalloc; LPITEMIDLIST DesktopPidl; char DesktopDir[MAX_PATH];
// Мы собираемся получить pidl и нам нам нужен shell mallocator. // Получим shell mallocator используя API-функцию SHGetMalloc. if(FAILED(SHGetMalloc(&ShellMalloc))) return;
// используем API для получения pidl для папки рабочема стола // если ошибка выполнения функции - выходим if(FAILED(SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOPDIRECTORY, &DesktopPidl))) return;
// Теперь переведем pidl в строку символов // выходим если произошла ошибка выполнения функции if(!SHGetPathFromIDList(DesktopPidl, DesktopDir)) { ShellMalloc->Free(DesktopPidl); ShellMalloc->Release(); return; }
// Освободим все что занятые ресурсы pidl ShellMalloc->Free(DesktopPidl); ShellMalloc->Release();
if(SUCCEEDED(CoInitialize(NULL))) { if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **) &pLink))) { pLink->SetPath(file.c_str()); pLink->SetDescription("Woo hoo, look at Homer's shortcut"); pLink->SetShowCmd(SW_SHOW);
if(SUCCEEDED(pLink->QueryInterface(IID_IPersistFile, (void **)&pPersistFile))) {
WideString strShortCutLocation(DesktopDir); strShortCutLocation += "\\bcbshortcut.lnk"; pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE); pPersistFile->Release(); } pLink->Release(); } CoUninitialize(); } }
|
|