![]()
前回はステータスバーにいくつかのペインを作った。今回はそのペインのダブルクリックで開いているページのプライバシーレポートを表示する。
「プライバシーレポート」はInternet Explrer 6から追加された機能で、そのページに含まれるクッキーなどの情報が表示される。
まず内部で利用するための独自メッセージを定義する。次回のことも考え今回はプライバシーレポートに加え、セキュリティレポート用のメッセージも追加した。#define WM_DNP_CHANGEFOCUS (WM_APP + 1) #define WM_DNP_CREATENEWTAB (WM_APP + 2) #define WM_DNP_CHANGEADDRESS (WM_APP + 3) #define WM_DNP_SCRIPTERROR (WM_APP + 6) #define WM_DNP_SHOWSCRIPTERROR (WM_APP + 7) #define WM_DNP_SHOWPRIVACYREPORT (WM_APP + 8) //■追加 #define WM_DNP_SHOWPSECURITYREPORT (WM_APP + 9) //■追加
//ステータスバーのダブルクリック処理
LRESULT OnLButtonDblClk(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
int i;
RECT rect;
BOOL ret;
POINT pt;
CStatusBarCtrl wndStatusBar = m_hWnd;
if(_hWndNotify == NULL || ::IsWindow(_hWndNotify) == FALSE)
return 0; //通知先が死んでいたらこれ以降処理しない
::GetCursorPos(&pt);
ScreenToClient(&pt);
i = 0;
while(1)
{
ret = wndStatusBar.GetRect(i,&rect);
if(ret == FALSE)
break;
if(::PtInRect(&rect,pt))
{
//i番目のペインがダブルクリックされた
//■処理内容変更。switch化した
switch(i)
{
case PAIN_DEFAULT:
::SendMessage(_hWndNotify,WM_DNP_SHOWSCRIPTERROR,NULL,NULL);
break;
case PAIN_PRIVACY_REPORT:
::SendMessage(_hWndNotify,WM_DNP_SHOWPRIVACYREPORT,NULL,NULL);
break;
case PAIN_SECURITY_REPORT:
::SendMessage(_hWndNotify,WM_DNP_SHOWPSECURITYREPORT,NULL,NULL);
break;
case PAIN_PROGRESS:
case PAIN_RESERVED:
case PAIN_POPUP:
case PAIN_ADDON:
case PAIN_SECURITY:
case PAIN_ZONE:
case PAIN_BLOCKED:
case PAIN_ZOOM:
break;
}
break;
}
i++;
}
return 0;
}
BEGIN_MSG_MAP(CTabBrowser100View)
MESSAGE_HANDLER(WM_DNP_SCRIPTERROR, OnDnpScriptError)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_DNP_SHOWSCRIPTERROR, OnShowScriptError)
MESSAGE_HANDLER(WM_DNP_SHOWPRIVACYREPORT, OnShowPrivacyReport) //■追加
MESSAGE_HANDLER(WM_DNP_SHOWPSECURITYREPORT, OnShowSecurityReport) //■追加
END_MSG_MAP()
private:
//■追加
LRESULT OnShowPrivacyReport(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
ShowPrivacyReport(m_hWnd);
return 0;
}
//■追加
LRESULT OnShowSecurityReport(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
ShowSecurityReport(m_hWnd);
return 0;
}
![]()
CIEUtilityの中にレポートを表示する関数を追加する。
//■追加
//IE6以上で実装されているプライバシーレポートの表示
bool ShowPrivacyReport(HWND hWnd)
{
HRESULT hr;
CComBSTR bstr;
HINSTANCE hDLL;
CComPtr<IServiceProvider> pIServiceProvider;
CComPtr<IEnumPrivacyRecords> pIEnumPrivacyRecords;
HRESULT (WINAPI* pfnDoPrivacyDlg)(HWND,LPOLESTR,IEnumPrivacyRecords*,BOOL) = NULL;
if(_pIWebBrowser2 == NULL)
return false;
//IEnumPrivacyRecords取得
_pIWebBrowser2->QueryInterface(&pIServiceProvider);
if(pIServiceProvider)
pIServiceProvider->QueryService(__uuidof(IEnumPrivacyRecords),IID_IEnumPrivacyRecords,(void**)&pIEnumPrivacyRecords);
if(pIEnumPrivacyRecords == NULL)
return false;
//URL取得
hr = _pIWebBrowser2->get_LocationURL(&bstr);
if(FAILED(hr))
return false;
hDLL = ::LoadLibrary(_T("shdocvw.dll"));
if(hDLL == NULL)
return false;
//DoPrivacyDlg取得
(FARPROC&)pfnDoPrivacyDlg = ::GetProcAddress(hDLL,"DoPrivacyDlg");
if(pfnDoPrivacyDlg == NULL)
{
::FreeLibrary(hDLL);
return false;
}
hr = pfnDoPrivacyDlg(hWnd,bstr,pIEnumPrivacyRecords,FALSE);
::FreeLibrary(hDLL);
return SUCCEEDED(hr) ? true : false;
}
//■追加
bool ShowSecurityReport(HWND hWnd)
{
return true;
}

これでステータスバーのプライバシーレポート用のペインをダブルクリックすることでプライバシーレポートが表示されるようになった。
次回はセキュリティレポートが表示されるようにする。
