обожаю вид кода при использовании WinAPI:
C++ (Qt)
IApplicationDocumentLists *pADL;
HRESULT hr = CoCreateInstance(CLSID_ApplicationDocumentLists, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pADL));
if (SUCCEEDED(hr))
{
if (SUCCEEDED(hr = pADL->SetAppID(appUserModelID())))
{
IObjectArray *pRecentItemsArray;
if (SUCCEEDED(hr = pADL->GetList(ADLT_RECENT, /*maxRecentFiles*/0, IID_PPV_ARGS(&pRecentItemsArray))))
{
UINT n;
if (SUCCEEDED(hr = pRecentItemsArray->GetCount(&n)))
{
qDebug("got %u recent items", n);
for (UINT i = 0; i < n; ++i)
{
IShellItem *pShellItem;
if (SUCCEEDED(hr = pRecentItemsArray->GetAt(i, IID_PPV_ARGS(&pShellItem))))
{
LPWSTR path = NULL;
if (SUCCEEDED(hr = pShellItem->GetDisplayName(SIGDN_FILESYSPATH, &path)))
{
if (!wcscmp(path, filePath.toStdWString().c_str()))
{
IApplicationDestinations *pAD;
HRESULT hr = CoCreateInstance(CLSID_ApplicationDestinations, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pAD));
if (SUCCEEDED(hr))
{
if (SUCCEEDED(hr = pAD->SetAppID(appUserModelID())))
{
if (SUCCEEDED(hr = pAD->RemoveDestination(pShellItem)))
qDebug("successfully removed");
else
qDebug("Error calling RemoveDestination(): %d", HRESULT_CODE(hr));
}
else
qDebug("Error calling SetAppID(): %d", HRESULT_CODE(hr));
pAD->Release();
}
else
qDebug("Error calling CoCreateInstance(CLSID_ApplicationDestinations): %d", HRESULT_CODE(hr));
break;
}
}
else
qDebug("Error calling GetDisplayName(): %d", HRESULT_CODE(hr));
CoTaskMemFree(path);
}
else
qDebug("Error calling GetAt(): %d", HRESULT_CODE(hr));
}
}
else
qDebug("Error calling GetCount(): %d", HRESULT_CODE(hr));
}
else
qDebug("Error calling GetList(): %d", HRESULT_CODE(hr));
}
else
qDebug("Error calling SetAppID(): %d", HRESULT_CODE(hr));
pADL->Release();
}
else
qDebug("Error calling CoCreateInstance(CLSID_ApplicationDocumentLists): %d", HRESULT_CODE(hr));
кстати, когда искал нормальные примеры С/С++ кода для использования недавних документов в вин7, то так толком ничего и не смог найти - сплошные обрывки и дотнет код. зато наткнулся на Qt-библиотеку, реализующую все фичи вин7 таскбара -
Q7Goodies, которая стоит начиная от 200 баксов. и после этого появилась идея написать нормальную открытую обёртку для Qt (или сначала просто над этими ужасами WinAPI вызовов для С++, а поверх неё уже для Qt). помню несколько фич уже реализовано в QtDockTile - прогрессбар, иконки и последние документы. есть ли смысл?