关于deskband在xp上注册后自动显示问题
小弟我写了一个deskband 并让其自动显示出来,在win7上可以了,但是在WINXP上就不行,有没有什么办法能解决
bool ShowDeskband()
{
CoInitialize(NULL);
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_SampleDeskBand);
if(SUCCEEDED(hr))
{
if (hr == S_FALSE)
{
hr = spTrayDeskBand->ShowDeskBand(CLSID_SampleDeskBand);
}
break;
}
} while (i-- > 0);
ATLASSERT(SUCCEEDED(hr));
}
}
else // WinXP workaround
{
TCHAR *pBuf = new TCHAR[100]; //分配存储文字串的空间
::StringFromGUID2(CLSID_SampleDeskBand, (LPOLESTR)pBuf, 100);
if(!::GlobalFindAtom(pBuf))
::GlobalAddAtom(pBuf);
// Beware! SHLoadInProc is not implemented under Vista and higher.
hr = ::SHLoadInProc(CLSID_SampleDeskBand);
ATLASSERT(SUCCEEDED(hr));
}
return (SUCCEEDED(hr)) ? TRUE : FALSE;
}