Internet ExploreはCOMインターフェースで操作できる。ここではCoCreateInstanceでIEを起動してGoogle検索を実行した。
Googleの既定の文字コードはUTF8。UnicodeやShift-JISからUTF8へ変換するのはちょっとだけ面倒なので、ここではShift-JISをそのまま検索に用いている。
#include "atlstr.h"
#include "exdisp.h"
#include "mshtml.h"
//
// IEによるGoogle検索
//
//Internet Explorerを新たに起動してGoogleで検索する
//
bool SearchByGoogle(LPCTSTR pszWord)
{
HRESULT hr;
VARIANT vEmpty;
BSTR bstrURL;
CAtlString strURL;
CAtlString strWord;
IWebBrowserApp* pIWebBrowserApp;
if(pszWord == NULL || *pszWord == NULL)
return false;
//IE起動
pIWebBrowserApp = NULL;
hr = ::CoCreateInstance(CLSID_InternetExplorer,NULL,CLSCTX_SERVER,IID_IWebBrowserApp,(void**)&pIWebBrowserApp);
if(FAILED(hr) || pIWebBrowserApp == NULL)
return false;
//検索語のエンコード
//面倒なのでa-zや0-9など必要ないものも%xx形式にしている
{
int i;
int nSize;
CAtlStringA strTmp1;
CAtlString strTmp2;
strTmp1 = pszWord;
nSize = strTmp1.GetLength();
for(i = 0; i < nSize; i++)
{
strTmp2.Format(_T("%%%02x"),(BYTE)strTmp1[i]);
strWord += strTmp2;
}
}
//URLを開く
::VariantInit(&vEmpty);
strURL.Format(_T("http://www.google.co.jp/search?q=%s&ie=sjis&hl=ja&lr=&num=100"),strWord);
bstrURL = strURL.AllocSysString();
hr = pIWebBrowserApp->Navigate(bstrURL,&vEmpty,&vEmpty,&vEmpty,&vEmpty);
::SysFreeString(bstrURL);
//IEの可視化
if(SUCCEEDED(hr))
hr = pIWebBrowserApp->put_Visible(VARIANT_TRUE);
if(FAILED(hr))
{
pIWebBrowserApp->Quit();
pIWebBrowserApp->Release();
return false;
}
return true;
}
void Test(void)
{
::CoInitialize(NULL);
SearchByGoogle(_T("プログラミング"));
::CoUninitialize();
}
