我使用下面的代码有任务栏的跳转列表在特定页面打开用户的默认浏览器。跳转列表在Windows 10没有
一切都已经现在工作正常了大约一年在Win 7/8,但与Windows 10单击任务栏上的任务时,浏览器将不会调用和微软的文档显示没有从赢8更改10
bool SetUpJumpList()
{
HRESULT hr;
CComPtr<ICustomDestinationList> pDestList;
hr = pDestList.CoCreateInstance (CLSID_DestinationList , NULL , CLSCTX_INPROC_SERVER);
if (FAILED (hr))
{
return false;
}
hr = pDestList->SetAppID (_TBID);
if (FAILED (hr))
{
return false;
}
UINT cMaxSlots;
CComPtr<IObjectArray> pRemovedItems;
hr = pDestList->BeginList (&cMaxSlots , IID_PPV_ARGS (&pRemovedItems));
if (FAILED (hr))
{
return false;
}
CComPtr<IObjectCollection> pObjColl;
hr = pObjColl.CoCreateInstance (CLSID_EnumerableObjectCollection , NULL , CLSCTX_INPROC_SERVER);
if (FAILED (hr))
{
return false;
}
if (!AddJumpListTasks (pObjColl))
{
return false;
}
CComQIPtr<IObjectArray> pTasksArray = pObjColl;
if (!pTasksArray)
{
return false;
}
hr = pDestList->AddUserTasks (pTasksArray);
if (FAILED (hr))
{
return false;
}
hr = pDestList->CommitList();
return SUCCEEDED (hr);
}
bool AddJumpListTasks (IObjectCollection* pObjColl)
{
wchar_t pBuf[ MAX_PATH ];
int bytes = GetModuleFileName (NULL , pBuf , MAX_PATH);
CJumpListTask aTasks[ ] =
{
{ _T ("https://www.google.co.uk") , _T ("Home Page") , _T ("Home") , 0 },
{ _T ("https://www.google.co.uk") , _T ("Twitter Page") , _T ("Twitter") , 9 },
{ _T ("https://www.google.co.uk") , _T ("Facebook Page") , _T ("Facebook") , 10 }
};
CString strBrowser;
DWORD size = 1024;
AssocQueryString (0 , ASSOCSTR_EXECUTABLE , L"http" , L"Open" , strBrowser.GetBufferSetLength (size) , &size);
for (int i = 0; i < _countof (aTasks); i++)
{
if (!AddJumpListTask (pObjColl , aTasks[ i ] , strBrowser , pBuf))
{
strBrowser.ReleaseBuffer();
return false;
}
}
strBrowser.ReleaseBuffer();
return true;
}
bool AddJumpListTask (IObjectCollection* pObjColl , const CJumpListTask& rTask , LPCTSTR szExePath , LPCTSTR pBuf)
{
HRESULT hr;
CComPtr<IShellLink> pLink;
hr = pLink.CoCreateInstance (CLSID_ShellLink , NULL , CLSCTX_INPROC_SERVER);
if (FAILED (hr))
{
return false;
}
hr = pLink->SetPath (szExePath);
if (FAILED (hr))
{
return false;
}
hr = pLink->SetArguments (rTask.szArgs);
if (FAILED (hr))
{
return false;
}
hr = pLink->SetIconLocation (pBuf , rTask.nIconIndex);
if (FAILED (hr))
{
return false;
}
CComQIPtr<IPropertyStore> pPropStore = pLink;
PROPVARIANT pv;
if (!pPropStore)
{
return false;
}
hr = InitPropVariantFromString (CT2CW (rTask.szTitle) , &pv);
if (FAILED (hr))
{
return false;
}
hr = pPropStore->SetValue (PKEY_Title , pv);
PropVariantClear (&pv);
if (FAILED (hr))
{
return false;
}
hr = pPropStore->Commit();
if (FAILED (hr))
{
return false;
}
hr = pObjColl->AddObject (pLink);
return SUCCEEDED (hr);
}
我注意到其他一些应用程序(如CCleaner)也使用这种方法,但它们不起作用,但Microsoft应用程序(如Office 2013)仍然可以正常工作,所以问题是如何在Windows 10上再次运行此应用程序?
我敢肯定,这是不相关的customDestinations-MS存储在CustomDestinations文件夹文件作为一个干净的Windows 10的安装出现相同的非功能性。
任务栏任务菜单与所需的文本和图标和调试创建显示正确的网址与正确的默认浏览器和浏览器路径一起加入。
编辑:
使用Visual Studio 2015工具包的Windows XP v140_xp
你可以尝试在呼叫AssocQueryString名“.html”或“热媒”的不是‘http’。 'AssocQueryString'表示它需要一个扩展名。 –
什么是您的调试告诉你都尝试名“.html”和“热媒”‘HTTP’/‘HTTPS’不工作在Windows 7/8/8.1失败 –
点。 – Shrek