创建快捷方式到桌面、任务栏、开始菜单、快速启动栏、程序组中

//得到快速启动栏的路径    
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, &ppidl) == S_OK)
	{
		BOOL flag = SHGetPathFromIDList(ppidl, pszProgramsPath);
		CoTaskMemFree(ppidl);
		return flag;
	}
	return FALSE;
}

//得到当前桌面路径    
BOOL GetDesktopPath(WCHAR *pszDesktopPath)
{
	LPITEMIDLIST  ppidl = NULL;

	if (SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ppidl) == S_OK)
	{
		BOOL flag = SHGetPathFromIDList(ppidl, 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(), NULL, NULL, SW_SHOW);//锁定到开始菜单
	::ShellExecute(NULL, L"TaskbarPin", str.c_str(), NULL, NULL, SW_SHOW);//锁定到任务栏
	return bRet;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值