//得到快速启动栏的路径 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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。