//得到快速启动栏的路径 BOOL GetIEQuickLaunchPath(WCHAR *pszIEQueickLaunchPath) { LPITEMIDLIST ppidl; if (SHGetSpecialFolderLocation(NULL,CSIDL_APPDATA,&ppidl) == S_OK) { BOOL flag = SHGetPathFromIDList(ppidl,pszIEQueickLaunchPath); wcscat(pszIEQueickLaunchPath,L"\\Microsoft\\Internet Explorer\\Quick Launch"); CoTaskMemFree(ppidl); return flag; } return FALSE; } //得到 开始->程序组 的路径 BOOL GetProgramsPath(WCHAR *pszProgramsPath) { LPITEMIDLIST ppidl; if (SHGetSpecialFolderLocation(NULL,CSIDL_startmenu,pszProgramsPath); CoTaskMemFree(ppidl); return flag; } return FALSE; } //得到当前桌面路径 BOOL GetDesktopPath(WCHAR *pszDesktopPath) { LPITEMIDLIST ppidl = NULL; if (SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,pszDesktopPath); CoTaskMemFree(ppidl); return flag; } return FALSE; } bool CreateShortcut(const WCHAR* pszSrcPath) { CoInitialize(NULL); bool bRet = false; WCHAR chQuick[MAX_PATH] = { 0 }; WCHAR chPrograms[MAX_PATH] = { 0 }; WCHAR chDesktop[MAX_PATH] = { 0 }; GetDesktopPath(chDesktop); GetIEQuickLaunchPath(chQuick); GetProgramsPath(chPrograms); std::wstring str; str = chQuick; WCHAR szFileTitle[MAX_PATH] = { 0 }; ::GetFileTitle(pszSrcPath,szFileTitle,MAX_PATH); str += L"//"; str += std::wstring(szFileTitle); str += L".lnk"; IShellLink* psl; HRESULT hr = CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID*)&psl); if (SUCCEEDED(hr)) { IPersistFile* ppf; psl->SetPath(pszSrcPath); psl->SetDescription(L"测试描述"); psl->SetShowCmd(SW_SHOW); if (SUCCEEDED(psl->QueryInterface(IID_IPersistFile,(LPVOID *)&ppf))) { if (SUCCEEDED(ppf->Save(str.c_str(),TRUE))) bRet = true; ppf->Release(); } psl->Release(); } CoUninitialize(); ::ShellExecute(NULL,TEXT("StartPin"),str.c_str(),SW_SHOW);//锁定到开始菜单 ::ShellExecute(NULL,L"TaskbarPin",SW_SHOW);//锁定到任务栏 return bRet; }