获取快捷方式的目标文件,并删除无效快捷方式和目标文件不在系统盘的快捷方式

// 获取快捷方式的目标文件,并删除无效快捷方式和目标文件不在系统盘的快捷方式
BOOL GetExePath(LPCTSTR lnkPath, LPTSTR exePath, LPTSTR Arguments)
{
	DWORD dwAttribute = ::GetFileAttributes(lnkPath);
	if(dwAttribute & FILE_ATTRIBUTE_READONLY)
	{
		dwAttribute &= ~FILE_ATTRIBUTE_READONLY;
		SetFileAttributes(lnkPath,dwAttribute);
	}

	HRESULT hr = CoInitialize(NULL);

	if(SUCCEEDED(hr))
	{
		IShellLink *pisl;
		hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pisl);
		if(SUCCEEDED(hr))
		{
			IPersistFile * ppf ;
			HRESULT hr = pisl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
			if(SUCCEEDED(hr))
			{
				hr = ppf->Load(lnkPath, STGM_READWRITE);
				if(S_OK != hr)	// 快捷方式无效(快捷方式文件中的内容无效),删除快捷方式
				{
					DeleteFile(lnkPath);

					pisl->Release();
					ppf->Release();
					CoUninitialize();
					return FALSE;
				}

				WIN32_FIND_DATA wfd;
				hr = pisl->GetPath(exePath, MAX_PATH, &wfd, 0);
				if(S_OK != hr)	// 快捷方式无效(快捷方式文件中无内容,即为空文件),删除快捷方式
				{
					DeleteFile(lnkPath);

					pisl->Release();
					ppf->Release();
					CoUninitialize();
					return FALSE;
				}

				if(!PathFileExists(exePath))	// 快捷方式指向的目标文件不存在,删除快捷方式
				{
					DeleteFile(lnkPath);

					pisl->Release();
					ppf->Release();
					CoUninitialize();
					return FALSE;
				}

				CString strSystemDrive;
				if(!GetSystemDrive(strSystemDrive))
				{
					pisl->Release();
					ppf->Release();
					CoUninitialize();
					return FALSE;
				}

				CString strExePath = exePath;
				if(strExePath.Left(1).MakeUpper() != strSystemDrive.Left(1).MakeUpper())	// 快捷方式指向的目标文件不在系统盘,删除快捷方式
				{
					DeleteFile(lnkPath);

					pisl->Release();
					ppf->Release();
					CoUninitialize();
					return FALSE;
				}

				pisl->GetArguments(Arguments, MAX_PATH);
				pisl->Release();
				ppf->Release();
			}
		}

		CoUninitialize();
	}

	return TRUE;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值