кривой результат получается, для некоторых расширений не могу получить хендл иконки.
| Код | #include <registry.hpp> //--------------------------------------------------------------------------- HICON hGetAssociatedIcon(const tString &csFileExt) {
bool bRes = false; int iRes = - 1;
tString sTemp = csFileExt;
if (_T('.') != sTemp[1]) { sTemp = _T(".") + sTemp; }
std::auto_ptr<TRegistry> apregReg(new TRegistry()); /*debug*/XASSERT(NULL != apregReg.get()); apregReg->RootKey = HKEY_LOCAL_MACHINE; bRes = apregReg->OpenKey(_T("Software\\CLASSES"), false); /*DEDUG*/XASSERT(true == bRes); bRes = apregReg->OpenKey(sTemp, false); /*DEDUG*/XASSERT(true == bRes); sTemp = apregReg->ReadString(_T("")); //(Default) /*DEDUG*/XASSERT(false == sTemp.IsEmpty()); bRes = apregReg->OpenKey(_T("\\Software\\CLASSES\\") + sTemp + _T("\\DefaultIcon"), false); /*DEDUG*/XASSERT(true == bRes);
sTemp = apregReg->ReadString(""); /*DEDUG*/XASSERT(true == bRes); if (sTemp == _T("%1") || sTemp == _T("\"%1\"")) { return NULL; }
int iPos = sTemp.LastDelimiter(_T(",")); int iIndex = sTemp.SubString(iPos + 1, sTemp.Length() - iPos).ToInt();
sTemp.Delete(iPos, sTemp.Length() - iPos + 1).Trim();
//удаляем кавычки if ('"' == sTemp[1]) { sTemp.Delete(1, 1); } if ('"' == sTemp[sTemp.Length()]) { sTemp.Delete(sTemp.Length(), 1); } //ShowMessage(sTemp);
HICON hIconLarge = NULL; HICON hIconSmall = NULL; iRes = ::ExtractIconEx(sTemp.c_str(), 0, &hIconLarge, &hIconSmall, 1); /*DEDUG*/XASSERT(- 1 != iRes); return hIconSmall; } //---------------------------------------------------------------------------
|
Добавлено через 35 секунд Иконки нужны для TListView |