3,245
社区成员
发帖
与我相关
我的任务
分享
bool ShowDeskband()
{
CComPtr<ITrayDeskBand> spTrayDeskBand;
HRESULT hr = spTrayDeskBand.CoCreateInstance(CLSID_TrayDeskBand);
if(SUCCEEDED(hr)) // Vista and higher
{
hr = spTrayDeskBand->DeskBandRegistrationChanged();
ATLASSERT(SUCCEEDED(hr));
if(SUCCEEDED(hr))
{
int i = 5;
do
{
hr = spTrayDeskBand->IsDeskBandShown(CLSID_KWifiDeskBand);
if(SUCCEEDED(hr))
{
if (hr == S_FALSE)
{
hr = spTrayDeskBand->ShowDeskBand(CLSID_KWifiDeskBand);
}
break;
}
} while (i-- > 0);
ATLASSERT(SUCCEEDED(hr));
}
}
else // WinXP workaround
{
WCHAR *pBuf = new WCHAR[49]; //很配存储文字串的空间
::StringFromGUID2(CLSID_KWifiDeskBand, pBuf, 49);
if(!::GlobalFindAtom(pBuf))
::GlobalAddAtom(pBuf);
// Beware! SHLoadInProc is not implemented under Vista and higher.
hr = ::SHLoadInProc(CLSID_KWifiDeskBand);
ATLASSERT(SUCCEEDED(hr));
}
return SUCCEEDED(hr);
}
bool HideDeskband()
{
CComPtr<ITrayDeskBand> spTrayDeskBand;
HRESULT hr = spTrayDeskBand.CoCreateInstance(CLSID_TrayDeskBand);
if(SUCCEEDED(hr)) // Vista and higher
{
hr = spTrayDeskBand->IsDeskBandShown(CLSID_KWifiDeskBand);
if(hr == S_OK)
hr = spTrayDeskBand->HideDeskBand(CLSID_KWifiDeskBand);
}
else // WinXP
{
CComPtr<IBandSite> spBandSite;
hr = spBandSite.CoCreateInstance(CLSID_TrayBandSiteService);
if(SUCCEEDED(hr))
{
DWORD dwBandID = 0;
const UINT nBandCount = spBandSite->EnumBands((UINT)-1, &dwBandID);
for(UINT i = 0; i < nBandCount; ++i)
{
spBandSite->EnumBands(i, &dwBandID);
CComPtr<IPersist> spPersist;
hr = spBandSite->GetBandObject(dwBandID, IID_IPersist,
(void**)&spPersist);
if(SUCCEEDED(hr))
{
CLSID clsid = CLSID_NULL;
hr = spPersist->GetClassID(&clsid);
if(SUCCEEDED(hr) && ::IsEqualCLSID(clsid, CLSID_KWifiDeskBand))
{
hr = spBandSite->RemoveBand(dwBandID);
break;
}
}
}
}
}
return SUCCEEDED(hr);
}