创建快捷方式 (并添加到快速启动栏 、桌面、开始菜单)

首先需要获取三个路径 :桌面路径 、快速启动栏路径、 开始->程序组路径

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

	if (SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ppidl) == S_OK)  
	{  
		BOOL flag = SHGetPathFromIDList(ppidl, pszDesktopPath);  
		CoTaskMemFree(ppidl);  
		return flag;  
	}  

	return FALSE;  
}     
//得到快速启动栏的路径  
BOOL GetIEQuickLaunchPath(char *pszIEQueickLaunchPath)  
{     
	LPITEMIDLIST  ppidl;              

	if (SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &ppidl) == S_OK)  
	{  
		BOOL flag = SHGetPathFromIDList(ppidl, pszIEQueickLaunchPath);  
		strcat(pszIEQueickLaunchPath, "\\Microsoft\\Internet Explorer\\Quick Launch");  
		CoTaskMemFree(ppidl);  
		return flag;  
	}  

	return FALSE;  
}  
//得到 开始->程序组 的路径  
BOOL GetProgramsPath(char *pszProgramsPath)  
{  
	LPITEMIDLIST  ppidl;   

	if (SHGetSpecialFolderLocation(NULL, CSIDL_PROGRAMS, &ppidl) == S_OK)  
	{  
		BOOL flag = SHGetPathFromIDList(ppidl, pszProgramsPath);  
		CoTaskMemFree(ppidl);  
		return flag;  
	}  

	return FALSE;  
}  
这样返回的 pszProgramsPath就是指当前获取的路径


程序的思路:得到路径,在当前路径下创建exe相对应的快捷方式,并通过ShellExecute函数来锁定到快速启动栏或开始菜单


/* 
函数功能:对指定文件在指定的目录下创建其快捷方式 
函数参数: 
lpszFileName    指定文件,为NULL表示当前进程的EXE文件。 
lpszLnkFileDir  指定目录,不能为NULL。 
lpszLnkFileName 快捷方式名称,为NULL表示EXE文件名。 
wHotkey         为0表示不设置快捷键 
pszDescription  备注 
iShowCmd        运行方式,默认为常规窗口 
*/  
BOOL CreateFileShortcut(LPCSTR lpszFileName, LPCSTR lpszLnkFileDir, LPCSTR lpszLnkFileName, LPCSTR lpszWorkDir, WORD wHotkey, LPCTSTR lpszDescription, int iShowCmd = SW_SHOWNORMAL)  
{  
	if (lpszLnkFileDir == NULL)  
		return FALSE;  

	HRESULT hr;  
	IShellLink     *pLink;  //IShellLink对象指针  
	IPersistFile   *ppf; //IPersisFil对象指针  

	//创建IShellLink对象  
	hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pLink);  
	if (FAILED(hr))  
		return FALSE;  

	//从IShellLink对象中获取IPersistFile接口  
	hr = pLink->QueryInterface(IID_IPersistFile, (void**)&ppf);  
	if (FAILED(hr))  
	{  
		pLink->Release();  
		return FALSE;  
	}  
    //获取当前exe所在路径
	TCHAR exeFullPath[MAX_PATH]; // MAX_PATH
	GetModuleFileName(NULL,exeFullPath,MAX_PATH);
	
	//目标  
	if (lpszFileName == NULL)  
		pLink->SetPath(_pgmptr);  
	else  
		pLink->SetPath(exeFullPath); 

	//工作目录  
	if (lpszWorkDir != NULL)  
		pLink->SetWorkingDirectory(lpszWorkDir);  

	//快捷键  
	if (wHotkey != 0)  
		pLink->SetHotkey(wHotkey);  

	//备注  
	if (lpszDescription != NULL)  
		pLink->SetDescription(lpszDescription);  

	//显示方式  
	pLink->SetShowCmd(iShowCmd);  

	//快捷方式的路径 + 名称  
	char szBuffer[MAX_PATH];  
	if (lpszLnkFileName != NULL) //指定了快捷方式的名称  
		sprintf(szBuffer, "%s\\%s", lpszLnkFileDir, lpszLnkFileName);  
	else     
	{  
		//没有指定名称,就从取指定文件的文件名作为快捷方式名称。  
		//char *pstr;  

		char *buf = new char[strlen(lpszFileName)+1];
		strcpy(buf, lpszFileName);  

		if (buf == NULL)  
		{     
			ppf->Release();  
			pLink->Release();  
			return FALSE;  
		}  
		//注意后缀名要从.exe改为.lnk  
		sprintf(szBuffer, "%s\\%s", lpszLnkFileDir, buf);  
		int nLen = strlen(szBuffer);
		//char lkName = ;
		strcat(szBuffer, ".lnk");
	}  
	//保存快捷方式到指定目录下  
	WCHAR  wsz[MAX_PATH];  //定义Unicode字符串  
	MultiByteToWideChar(CP_ACP, 0, szBuffer, -1, wsz, MAX_PATH);  

	hr = ppf->Save(wsz, TRUE);  

	ppf->Release();  
	pLink->Release();  
	CoUninitialize(); //释放com接口
	return SUCCEEDED(hr);  
}  

下面说一下调用 :


char  szPath[MAX_PATH];  
CoInitialize(NULL);  

GetDesktopPath(szPath);
//GetIEQuickLaunchPath(szPath);
//GetProgramsPath(szPath);
			
if (!CreateFileShortcut(_T("QQMusicEx"), szPath, NULL, NULL, 0 , NULL)) 
	return ;
else
{
	//strcat(szPath,"\\QQMusicEx.lnk");
	//ShellExecute(NULL,_T("TaskbarPin"), szPath, NULL, NULL, SW_SHOW); // 锁定程序到任务栏
	//ShellExecute(NULL,_T("startpin"), szPath, NULL, NULL, SW_SHOW); // 锁定程序到开始菜单
				//startpin
}

红色代表桌面快捷方式,下面的else注释掉 

蓝色放开注释,else里面的strcat跟着一起放开

紫色放开注释,else操作同上


注意:1.  需要注意的是 在创建开解方式的时候需要添加头文件 

#include <shlobj.h>

#pragma comment(lib, "shell32.lib")


2. TaskbarPin是锁定  Task barUnpin是解锁 

    startpin和startunpin是相对应的




资源介绍:创建应用程序快捷方式。1、可以为当前存在的任意文件创建快捷方式。资源作者:易语言如何自学资源界面:.版本 2 .子程序 创建快捷方式, 逻辑型 .参数 创建位置, 文本型, 可空, 欲放置快捷方式的位置,默认为源文件所在目录,必须存在。 .参数 创建名称, 文本型, 可空, 欲创建快捷方式名称,默认为:“快捷方式”  源文件。 .参数 源文件, 文本型, 可空, 欲创建快捷方式的源文件,默认为当前可执行文件自身,必须存在。 .局部变量 操作系统目录, 文本型 .局部变量 文件名, 文本型 .如果 (是否为空 (源文件))     源文件 = 选择 (取文本右边 (取运行目录 (), 1) = “\”, 取运行目录 (), 取运行目录 () + “\”) + 取执行文件名 ()     文件名 = 取执行文件名 () .否则     文件名 = 取文本右边 (源文件, 取文本长度 (源文件) - 倒找文本 (源文件, “\”, , 真)) .如果结束 添加文档记录 (2, 源文件) 操作系统目录 = 取空白文本 (256) 取操作系统目录 (操作系统目录, 255) 操作系统目录 = 删首尾空 (操作系统目录) .如果 (是否为空 (创建名称))     创建名称 = “快捷方式” + 文件名 + “.lnk” .否则     .如果真 (取文本右边 (创建名称, 4) ≠ “.lnk”)         创建名称 = 创建名称 + “.lnk”     .如果真结束 .如果结束 .如果 (是否为空 (创建位置))     创建位置 = 取文本左边 (源文件, 倒找文本 (源文件, “\”, , 真)) .否则     .如果真 (取文本右边 (创建位置, 1) ≠ “\”)         创建位置 = 创建位置 + “\”     .如果真结束     '  .如果结束 .计次循环首 (5, )     .如果真 (移动文件 (操作系统目录 + “\recent\” + 文件名 + “.lnk”, 创建位置 + 创建名称))         返回 (真)     .如果真结束     延时 (300) .计次循环尾 () 返回 (假)资源下载:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值