IE用ツールバーを表示したり消去する

Googleツールバーに代表されるInternet Explorer用ツールバーなどのデスクバンド(IDeskBand)を表示したり消去するにはIWebBrowser2::ShowBrowserBarを利用する。
この関数は処理に成功しても失敗しても常にS_OKを返すので注意。また、引数として使われているVARIANT用のBOOL(VARIANT_TRUEとVARIANT_FALSE)はTRUE!=0、FALSE==0という関係ではないので気をつける必要がある。

デスクバンドのCLSID(GUID)はレジストリに登録されているものを用いる。ここでは例として検索用のエクスプローラーバーのGUIDを利用した。

#include "comdef.h"
#include "exdisp.h"
#include "mshtml.h"


//
//	デスクバンドを表示/非表示する
//
//pszClsidに_T("{30D02401-6A81-11D0-8274-00C04FD5AE38}")のようなデスクバンドのGUIDを指定
//
bool	ShowDeskBandI(IWebBrowser2* pIWebBrowser2,LPCTSTR pszClsid,bool bShow)
{
	VARIANT	vtBandGUID;
	VARIANT	vtShow;
	VARIANT	vEmpty;

	if(pIWebBrowser2 == NULL || pszClsid == NULL || *pszClsid == NULL)
		return	false;

	::VariantInit(&vEmpty);
	V_VT(&vtShow)	= VT_BOOL;
	vtShow.boolVal	= bShow ? VARIANT_TRUE : VARIANT_FALSE;
	vtBandGUID.vt	= VT_BSTR;
#ifdef	UNICODE
	vtBandGUID.bstrVal = ::SysAllocString(pszClsid);
#else
	{
		////////////////////////////////
		//char*からWCHAR*へ変換
		//
		WCHAR*	pszWchar;
		{
			int		nLen;

			//Unicodeに必要な文字数の取得
			nLen = ::MultiByteToWideChar(CP_THREAD_ACP,0,pszClsid,-1,NULL,0);
			pszWchar = new WCHAR[nLen];
			if(pszWchar)
			{
				//変換
				nLen = ::MultiByteToWideChar(CP_THREAD_ACP,0,pszClsid,(int)::strlen(pszClsid)+1,pszWchar,nLen);
				if(nLen == 0)
				{
					delete	pszWchar;
					pszWchar = NULL;
				}
			}
		}
		vtBandGUID.bstrVal = ::SysAllocString(pszWchar);

		delete	pszWchar;		//処理が終わったらdelete
	}
#endif

	//戻り値は必ず(?)成功なのでチェックしない
	::Sleep(0);
	pIWebBrowser2->ShowBrowserBar(&vtBandGUID,&vtShow,&vEmpty);

	::SysFreeString(vtBandGUID.bstrVal);

	return	true;
}



bool	Test2(void)
{
	HRESULT			hr;
	IWebBrowser2*	pIWebBrowser2;

	//IE起動
	pIWebBrowser2 = NULL;
	hr = ::CoCreateInstance(CLSID_InternetExplorer,NULL,CLSCTX_SERVER,IID_IWebBrowser2,(void**)&pIWebBrowser2);
	if(FAILED(hr) || pIWebBrowser2 == NULL)
		return	false;

	//IE可視化
	hr = pIWebBrowser2->put_Visible(VARIANT_TRUE);
	if(FAILED(hr))
	{
		pIWebBrowser2->Release();
		return	false;
	}

	//デスクバンド表示
	ShowDeskBandI(pIWebBrowser2,_T("{30D02401-6A81-11D0-8274-00C04FD5AE38}"),true);
	pIWebBrowser2->Release();

	return	true;
}



bool	Test(void)
{
	::CoInitialize(NULL);

	Test2();

	::CoUninitialize();

	return	true;
}

プロジェクトファイルをダウンロード


カテゴリー「Internet Explorer」 のエントリー