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);
}
{
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);
}
解决方案 »
- 关于将资源文件提出去放到dll里面实现的软件支持不同语言?
- 关于改图标
- 哪里有 windows2000 SDK 下载阿?
- 用file.FindFile找文件,如果文件不能打开(如系统文件),那就跳过不读,然后取的除不能打开文件的个数(已有部分代码,须补充)~~
- 一条sql语句
- 【100】程序在AfxInternalPumpMessage处中断提示错误是内存访问异常,求大神帮忙看一下
- 急: 我已经取得其他程序中的窗口的HWND,我怎么知道它所属的类名称?
- 请教VC中断点设置的方法
- 一个小游戏的小问题,100分
- 请教,VC中调用百度地图API,在对话框中画出的地图是由VC完成的,还是由JAVESCRIP API完成的?
- 关于MFC下面的listcontrol的一个问题
- MFC中数组的序列化
模拟点击我搞了两个方案:
1,在执行完显示后的几秒钟,去枚举所有窗口
2,做一个cbt钩子(还有32位和64位区分),针对explorer的所有对话框,在create事件里hook来判断(在执行显示前set通知事件来是hook生效)另外,隐藏还会有一些小麻烦,我也搞了一些方法来处理,你自己好好玩玩吧