快捷方式包括桌面快捷方式和開始菜單快捷方式,其所鏈接的源文件路徑都可以通過該方式修改,修改後的效果表現爲如下截圖中目錄這一欄值的更改。
bool CrnModifyShortcutArguments(LPCWSTR lpszLnkFilePath, LPCWSTR strArguments)
{
//判斷文件是否存在
bool bResult = (CoInitialize(NULL) == S_OK);
if (bResult)
{
IShellLink *pShellLink;
//創建IShellLink對象
bResult = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
IID_IShellLink, (void **)&pShellLink) >= 0;
if (!bResult)
return false;
//從IShellLink對象中獲取IPersistFile接口
IPersistFile *ppf;
bResult = pShellLink->QueryInterface(IID_IPersistFile, (void **)&ppf) >= 0;
if (!bResult)
{
pShellLink->Release();
ppf->Release();
return false;
}
//加載快捷方式文件
bResult = ppf->Load(lpszLnkFilePath, TRUE) >= 0;
if (!bResult)
{
pShellLink->Release();
ppf->Release();
return false;
}
//修改快捷方式文件參數
bResult = pShellLink->SetPath(strArguments) >=0;
if (!bResult)
{
pShellLink->Release();
ppf->Release();
return false;
}
//重新保存快捷方式文件
bResult = ppf->Save(lpszLnkFilePath, TRUE) >= 0;
if (!bResult)
{
pShellLink->Release();
ppf->Release();
return false;
}
ppf->Release();
pShellLink->Release();
CoUninitialize();
}
return bResult;
}