vc在指定目录生成快捷方式

一、首先要获得不同目录的路径

char chDesktopPath[MAX_PATH] = {0};
SHGetSpecialFolderPathA(NULL,chDesktopPath,CSIDL_DESKTOP,0);//获取当前用户桌面路径

通过改变上面函数的第三个参数来获取

第三个参数可以为:

CSIDL_BITBUCKET, CSIDL_CONTROLS, CSIDL_DESKTOP, CSIDL_DESKTOPDIRECTORY,

CSIDL_DRIVES, CSIDL_FONTS, CSIDL_NETHOOD, CSIDL_NETWORK, CSIDL_PERSONAL,

CSIDL_PRINTERS, CSIDL_PROGRAMS, CSIDL_RECENT, CSIDL_SENDTO, CSIDL_STARTMENU,

CSIDL_STARTUP, CSIDL_TEMPLATES

二、获取到路径之后,就可以在对应的路径下生成快捷方式

下面函数的解析:

BOOL CreateFileShortcut(LPCTSTR lpszFileName, LPCTSTR lpszLnkFileDir, LPCTSTR lpszLnkFileName,
LPCTSTR lpszWorkDir, WORD wHotkey, LPCTSTR lpszDescription, int iShowCmd = SW_SHOWNORMAL)

lpszFileName:指定生成快捷方式的文件,如果为NULL则是当前进程的快捷方式

lpszLnkFileDir:指定快捷方式生成的牡蛎,不能为NULL

lpszLnkFileName:快捷方式的名称,后缀名为.lnk,不能为NULL

lpszWorkDir:工作目录,一般设置为NULL

wHotkey:对快捷方式设置快捷键,MAKEWORD(VK_F10, HOTKEYF_CONTROL)或者0表示不设置

lpszDescription:备注情况

iShowCmd:显示方式,可以为SW_SHOWNORMAL等等

调用函数方式例如:CreateFileShortcut(NULL, CA2T(chDesktopPath), _T("进程名称.lnk") ,NULL,MAKEWORD(VK_F10, HOTKEYF_CONTROL), _T("备注内容"));

BOOL CreateFileShortcut(LPCTSTR lpszFileName, LPCTSTR lpszLnkFileDir, LPCTSTR lpszLnkFileName,
	LPCTSTR 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;
	}

	//目标
	if (lpszFileName == NULL)
		pLink->SetPath(_wpgmptr);
	else
		pLink->SetPath(lpszFileName);

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

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

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

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

	//快捷方式的路径 + 名称
	char szBuffer[MAX_PATH];
	std_string strLinkFileDir = lpszLnkFileDir;
	std_string strLinkFileName = lpszLnkFileName;
	if (lpszLnkFileName != NULL)
	{
		sprintf(szBuffer, "%s\\%s",strLinkFileDir.c_str(), strLinkFileName.c_str());
		int x=1;
	}
	else
	{
		//没有指定名称,就从取指定文件的文件名作为快捷方式名称。
		char* szModule = new char[_MAX_PATH];
		GetModuleFileNameA(NULL, szModule, _MAX_PATH);//得到本程序自身的全路径
		char *pstr;
		if (lpszFileName != NULL)
			pstr = strrchr(CT2A(lpszFileName), '\\');
		else
			pstr = strrchr(_pgmptr, '\\');

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

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

	ppf->Release();
	pLink->Release();
	return SUCCEEDED(hr);
}

				
时间: 2024-09-30 09:03:10

vc在指定目录生成快捷方式的相关文章

VC++ 监控指定目录改变

转载:http://www.cnblogs.com/doublesnke/archive/2011/08/16/2141374.html VC++实施文件监控:实例和详解 相关帮助: http://hi.baidu.com/jiahaosoft/blog/item/b441d1218eebece0d6cae274.html 我这里只介绍采用ReadDirectoryChangesW对文件目录实施监控 关键代码 CfgdsgDlg * dlg = (CfgdsgDlg*)lparam;     H

MFC在指定目录生成文件夹

首先在App初始化时: ::GetModuleFileNameA(this->m_hInstance,g_sPathName,MAX_PATH);  //文件目录 其次你可以选择在主对话框初始化: g_strFilePath.Format("%s",g_sPathName); int pos = g_strFilePath.ReverseFind('\\'); g_strFilePath = g_strFilePath.Left(pos); strPath = g_strFile

VC项目程序运行时设置指定目录读取Dll

方法一: 选择当前工程,右击"Properties" -> "Configuration Properties" -> "Debugging",在"Working Directory"设置dll的路径就可以了 方法二:设置项目的环境变量 方法三: CString strDllPath = GetExePath() + _T("System"); SetDllDirectory(strDllPat

Linux下给指定目录下指定文件类型生成md5文件

对指定目录下扩展名为.asset,.manifest,.wem,.bnk的文件计算md5并汇总到指定文件中. md5文件内容格式: 文件名,md5 类似: Audio_Knives_Skill_1_43_9E69E797.wem,bc87ec6bce97e93824a0fdfa39ebafaf Audio_Knives_Skill_1_43_50DB02DB.wem,78d62b1f25c59ddffcfcda75e555e850 Audio_Knives_Skill_2_44_9E69E797

Linux使用find查找最后修改时间超过三天的文件并移动到指定目录

使用场景:应用程序,如tomcat,每天都会生成新的日志文件,时间一长,占用大量的磁盘,需要定期清理这些文件. 代码如下: find /tomcat/logs/*.log -ctime +3 -exec mv {} /tmp 也可以使用xargs传参数 find /tomcat/logs/*.log -ctime +3 | xargs mv {} /tmp 说明:将指定目录下超过3天未修改的日志文件移动到tmp中. 如果要直接删除,将命令改为如下即可: find /tomcat/logs/*.l

[转]指定Gerber生成路径

原文链接:http://www.mr-wu.cn/cadence-allegro-specify-gerber-drill-output-path/ Allegro生成Gerber数据时,默认会保存在与pcb文件相同目录路径下,Gerber数据本身就会生成好几个文件,然后与pcb文件,log文件,临时文件等混杂在一起,不易整理打包Gerber数据,更好地做法是将Gerber数据生成到指定目录,提交给板厂时直接zip一压缩即可,不会遗漏也不会出错. 我们可以通过设定"User Preference

c# 获取指定目录下的所有文件并显示在网页上

参考文献: FileInfo 的使用  https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).aspx 网页表格的生成  http://www.w3school.com.cn/html/html_tables.asp C# 通过文件扩展名获取图标和描述 http://www.csframework.com/archive/2/arc-2-20110514-1478.htm   http://ww

Cadence Allegro小技巧之指定Gerber生成路径

Allegro生成Gerber数据时,默认会保存在与pcb文件相同目录路径下,Gerber数据本身就会生成好几个文件,然后与pcb文件,log文件,临时文件等混杂在一起,不易整理打包Gerber数据,更好地做法是将Gerber数据生成到指定目录,提交给板厂时直接zip一压缩即可,不会遗漏也不会出错. 我们可以通过设定“User Preferences”来指定生成Gerber数据文件的保存目录. 菜单栏“Setup”->”User Preferences…”->”File_management”

vsftpd添加用户并限制目录(指定用户访问指定目录)

开发那边更新速度如果比较快,每天会有无数的文件或者目录交给运维更新上线,这样比较麻烦,干脆给他们搭FTP让他们自己上传修改,但有一问题,就是权限问题,公司五个站点有五个目录,每个人负责不同的站点,如何让各自都不干扰别人,或者说不到别人的目录搞“破坏”!下面解决这个问题! 一.检查Linux中vsftpd的安装情况. 就不啰嗦了 二.将系统中的SELinux关闭,然后重新启动电脑(不关闭的话修改好标签也可以) 关闭SELinux的方法: 修改/etc/selinux/config文件中的SELIN