MFC 创建快捷方式并保存到开机自启动路径

本文介绍了如何在Windows系统中通过代码创建自启动快捷方式,包括用户区和系统公共启动路径,并提供了创建快捷方式的C++代码示例。需要注意的是,自启动程序应使用绝对路径,并且在权限不足的情况下可能需要管理员权限才能保存到系统公共启动目录。
摘要由CSDN通过智能技术生成

快捷方式自启动应用程序有两个路径
1.Windows下 Win+r 输入shell:startup 如下图所示
在这里插入图片描述

此路径是用户区的自启动路径,通常不同电脑路径不同,不建议使用
2.Windows下 Win+r 输入shell:common startup 如下图所示
在这里插入图片描述
在这里插入图片描述此路径是Windows系统自带的,但需要***管理员权限***才能操作

OK,知道以上知识后,上代码

void CdemoDlg::OnCreateShotcut()
{
	//创建快捷方式
	CString strPathObj = appPath + "\\" + appName;
	LPCSTR lpszPathObj = strPathObj;
	CString cstrDesc = "link for " + appName;
	LPCSTR lpszDesc = cstrDesc;
	CString lpszPathLink("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\");
	CString m_appName = appName.Left(appName.ReverseFind('.'));
	lpszPathLink = lpszPathLink + m_appName + ".lnk";
	CoInitialize(NULL);
	HRESULT hres;
	IShellLink* psl;
	// Get a pointer to the IShellLink interface.
	hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
		IID_IShellLink, (LPVOID*)&psl);
	if (SUCCEEDED(hres)){
		IPersistFile* ppf;
		//设置快捷方式的目标路径,添加描述
		psl->SetPath(lpszPathObj);
		psl->SetDescription(lpszDesc);
		// Query IShellLink for the IPersistFile interface for saving the
		// shortcut in persistent storage.
		hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
		if (SUCCEEDED(hres)){
			WCHAR wsz[MAX_PATH];
			// Ensure that the string is Unicode.
			MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz, MAX_PATH);
			// TODO: Check return value from MultiByteWideChar to ensure
			// Save the link by calling IPersistFile::Save.
			//下面代码执行可能会失败,因为权限不够,但是不用管,重新启
			//动 Visual Studio 时使用管理员权限启动,或者启动编译生成
			//的软件时,以管理员权限启动即可
			hres = ppf->Save(wsz, TRUE);		
			ppf->Release();
		}
		psl->Release();
	}
	// return hres;
	CoUninitialize();
}

PS:需要格外注意的是,自启动的软件里,如果有文件的读写操作,切忌使用相对路径,一定要使用绝对路径,自测觉得Windows给自启动的软件相对路径会默认为系统路径 C:\Windows\system32\

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值