关于deskband在xp上注册后自动显示问题

sina881027 2014-06-10 10:25:06
小弟我写了一个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;

}
...全文
312 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄昏的马蹄声 2015-04-14
  • 打赏
  • 举报
回复
吧主解决了么?小弟最近也为这个问题,绞尽脑汁,也没解决~
sina881027 2014-06-17
  • 打赏
  • 举报
回复
自己在顶一下 没有人来回答了么,对了 我没有用ATL 用的sdk来写的
sina881027 2014-06-13
  • 打赏
  • 举报
回复
hr = ::SHLoadInProc(CLSID_SampleDeskBand); 返回值是s_ok 但是就是不显示,是不是还需要现实其他的函数才能使用SHLoadInProc函数
oyljerry 2014-06-12
  • 打赏
  • 举报
回复
debug单步调试一下,看是否有出错
sina881027 2014-06-12
  • 打赏
  • 举报
回复
还没有人来回答么
sina881027 2014-06-11
  • 打赏
  • 举报
回复
没人回答么,自己顶自己一下

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧