#pragma once
/////////////////////////////////////////////////////////////////////////////
// CQueryInfoHelper
class CQueryInfoHelper
{
public:
CQueryInfoHelper(); // 実装しない
virtual ~CQueryInfoHelper();
public:
static CString GetInfoTip(HWND hWnd, IShellFolderPtr spShellFolder, LPCITEMIDLIST pidl)
{
USES_CONVERSION;
if (spShellFolder == NULL || pidl == NULL)
{
return CString();
}
HRESULT hr = S_OK;
IQueryInfoPtr spQueryInfo;
hr = spShellFolder->GetUIObjectOf(hWnd, 1, &pidl, IID_IQueryInfo, NULL, (void**)&spQueryInfo);
if (FAILED(hr))
{
return CString();
}
return GetInfoTip(spQueryInfo);
}
static CString GetInfoTip(IQueryInfoPtr spQueryInfo)
{
USES_CONVERSION;
if (spQueryInfo == NULL)
{
return CString();
}
HRESULT hr = S_OK;
LPWSTR wszText = 0;
hr = spQueryInfo->GetInfoTip(0, &wszText);
if (FAILED(hr))
{
return CString();
}
CString strResult = W2T(wszText);
Emulate_SHFree(wszText);
return strResult;
}
public:
// Shlwapihelper.hよりコピー
// shell32.dll version 5.0 or later 互換
static void Emulate_SHFree(void* pv)
{
HRESULT hr = S_OK;
IMallocPtr spMalloc;
hr = ::SHGetMalloc(&spMalloc);
if (FAILED(hr))
{
return;
}
spMalloc->Free(pv);
}
};