in Docs-ContextMenuSample/ExplorerCommandVerb/RegisterExtension.cpp [659:697]
HRESULT CRegisterExtension::RegisterAppShortcutInSendTo() const
{
WCHAR szPath[MAX_PATH];
HRESULT hr = GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath)) ? S_OK : ResultFromKnownLastError();
if (SUCCEEDED(hr))
{
// Set the shortcut target
IShellLink *psl;
hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&psl));
if (SUCCEEDED(hr))
{
hr = psl->SetPath(szPath);
if (SUCCEEDED(hr))
{
WCHAR szName[MAX_PATH];
StringCchCopy(szName, ARRAYSIZE(szName), PathFindFileName(szPath));
PathRenameExtension(szName, L".lnk");
hr = SHGetFolderPath(NULL, CSIDL_SENDTO, NULL, 0, szPath);
if (SUCCEEDED(hr))
{
hr = PathAppend(szPath, szName) ? S_OK : E_FAIL;
if (SUCCEEDED(hr))
{
IPersistFile *ppf;
hr = psl->QueryInterface(IID_PPV_ARGS(&ppf));
if (SUCCEEDED(hr))
{
hr = ppf->Save(szPath, TRUE);
ppf->Release();
}
}
}
}
psl->Release();
}
}
return hr;
}