没有封装成函数
文件:
//快捷方式保存路径 char PathLink[]="D:/a file.lnk"; CoInitialize(NULL); HRESULT hres; IShellLink* psl; // Get a pointer to the IShellLink interface. hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink, (LPVOID*)&psl); if (SUCCEEDED(hres)) { IPersistFile* ppf; //设置快捷方式的目标路径,添加描述 psl->SetPath(_T("D:/Mosaic2.jpg")); //描述:就是备注 psl->SetDescription(_T("link of file")); //生成快捷方式 hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); if (SUCCEEDED(hres)) { WCHAR wsz[MAX_PATH]; // Ensure that the string is Unicode. MultiByteToWideChar(CP_ACP, 0, PathLink, -1, wsz, MAX_PATH); // TODO: Check return value from MultiByteWideChar to ensure // Save the link by calling IPersistFile::Save. hres = ppf->Save(wsz, TRUE); ppf->Release(); } psl->Release(); } CoUninitialize();
效果图:(这里生成的是一张图片的快捷方式)
CString strName("www");//快捷方式名称 CString path;//快捷方式目标路径 path.Format(_T("D:\\www")); if (FAILED(CoInitialize(NULL))) { return ; } int i = CSIDL_DESKTOPDIRECTORY; //用于获取系统默认路径 TCHAR Path[MAX_PATH + 1]; CString strDestDir; LPITEMIDLIST pidl; LPMALLOC pShell; if (SUCCEEDED(SHGetMalloc(&pShell))) { if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, i, &pidl))) { if (!SHGetPathFromIDList(pidl, Path)) { pShell->Free(pidl); ::CoUninitialize(); return ; } pShell->Release(); strDestDir.Format(_T("%s"), Path);//保存快捷方式的文件夹 strDestDir += "\\"; strDestDir += strName;//设置桌面快捷方式的名字 strDestDir += ".lnk";//快捷方式的后缀名 IShellLink* psl; if (SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl))) { psl->SetPath(path);//设置快捷方式的目标位置 //比如目标位置为C:\windows\a.txt 起始位置就应该设置为C:\windows否则会导致不可预料的错误 //如果是文件夹的快捷方式起始位置和目标位置可以设置为一样 psl->SetWorkingDirectory(path); //设置快捷方式的起始位置 IPersistFile* ppf; if (SUCCEEDED(psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf))) { if (SUCCEEDED(ppf->Save(strDestDir, TRUE)))//保存快捷方式到桌面 { //例子中声明void,这里就不写 } } ppf->Release(); psl->Release(); ::CoUninitialize(); return ; } } } ::CoUninitialize(); return ;
效果图: