CComPtr<IUnknown> spUnk;
HRESULT hr = CExternalUIHandler::_CreatorClass::CreateInstance(NULL, IID_IUnknown, (void**)&spUnk);
ATLASSERT(SUCCEEDED(hr));
CComQIPtr<IDocHostUIHandlerDispatch> spUI = spUnk;
m_wtlBrowserView.SetExternalUIHandler(spUI);
#ifndef _EXTERNALUIHANDLER_H_
#define _EXTERNALUIHANDLER_H_
#pragma once
class CExternalDisp:
public CComObjectRoot,
public IDispatch
{
public:
CExternalDisp(void);
~CExternalDisp(void);
BEGIN_COM_MAP(CExternalDisp)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(
/* [out] */ UINT *pctinfo);
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke(
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr) ;
};
class ATL_NO_VTABLE CExternalUIHandler :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CExternalUIHandler>,
public IDispatchImpl<IDocHostUIHandlerDispatch, &__uuidof(IDocHostUIHandlerDispatch)>
{
public:
CComQIPtr<IDispatch> m_spExtDispatch;
public:
CExternalUIHandler();
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CExternalUIHandler)
COM_INTERFACE_ENTRY(IDocHostUIHandlerDispatch)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IXmnWrapperUIHandler
public:
// Do not show the context menu
STDMETHOD (ShowContextMenu) (
/* [in] */ DWORD dwID,
/* [in] */ DWORD x,
/* [in] */ DWORD y,
/* [in] */ IUnknown *pcmdtReserved,
/* [in] */ IDispatch *pdispReserved,
/* [retval][out] */ HRESULT *dwRetVal);
// Mark all the other methods as not implemented
STDMETHOD (GetHostInfo) (
/* [out][in] */ DWORD *pdwFlags,
/* [out][in] */ DWORD *pdwDoubleClick);
STDMETHOD (ShowUI) (
/* [in] */ DWORD dwID,
/* [in] */ IUnknown *pActiveObject,
/* [in] */ IUnknown *pCommandTarget,
/* [in] */ IUnknown *pFrame,
/* [in] */ IUnknown *pDoc,
/* [retval][out] */ HRESULT *dwRetVal);
STDMETHOD (HideUI) (void);
STDMETHOD (UpdateUI) (void);
STDMETHOD (EnableModeless) (
/* [in] */ VARIANT_BOOL fEnable);
STDMETHOD (OnDocWindowActivate) (
/* [in] */ VARIANT_BOOL fActivate);
STDMETHOD (OnFrameWindowActivate) (
/* [in] */ VARIANT_BOOL fActivate);
STDMETHOD (ResizeBorder) (
/* [in] */ long left,
/* [in] */ long top,
/* [in] */ long right,
/* [in] */ long bottom,
/* [in] */ IUnknown *pUIWindow,
/* [in] */ VARIANT_BOOL fFrameWindow);
STDMETHOD (TranslateAccelerator) (
/* [in] */ DWORD hWnd,
/* [in] */ DWORD nMessage,
/* [in] */ DWORD wParam,
/* [in] */ DWORD lParam,
/* [in] */ BSTR bstrGuidCmdGroup,
/* [in] */ DWORD nCmdID,
/* [retval][out] */ HRESULT *dwRetVal);
STDMETHOD (GetOptionKeyPath) (
/* [out] */ BSTR *pbstrKey,
/* [in] */ DWORD dw);
STDMETHOD (GetDropTarget) (
/* [in] */ IUnknown *pDropTarget,
/* [out] */ IUnknown **ppDropTarget);
STDMETHOD (GetExternal) (
/* [out] */ IDispatch **ppDispatch);
STDMETHOD (TranslateUrl) (
/* [in] */ DWORD dwTranslate,
/* [in] */ BSTR bstrURLIn,
/* [out] */ BSTR *pbstrURLOut);
STDMETHOD (FilterDataObject) (
/* [in] */ IUnknown *pDO,
/* [out] */ IUnknown **ppDORet);
};
#endif //_EXTERNALUIHANDLER_H_
#include "stdafx.h"
#include "ExternalUIHandler.h"
#include "DBPrivateHistory.h"
CExternalDisp::CExternalDisp(void){};
CExternalDisp::~CExternalDisp(void){};
HRESULT STDMETHODCALLTYPE CExternalDisp::GetTypeInfoCount(
/* [out] */ UINT *pctinfo)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalDisp::GetTypeInfo(
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalDisp::GetIDsOfNames(
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId)
{
CComBSTR bsName(*rgszNames);
if (bsName == OLESTR("DeleteRowID"))
{
*rgDispId = 2535;
return S_OK;
} else if (bsName == OLESTR("DeleteMsgID"))
{
*rgDispId = 2537;
return S_OK;
}
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalDisp::Invoke(
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr)
{
//参数顺序为从右向左
if (dispIdMember == 2535)
{
if (pDispParams->cArgs != 1) return E_NOTIMPL;
if( pDispParams->rgvarg[0].vt != VT_I4) return E_NOTIMPL;
int nRowID=pDispParams->rgvarg[0].intVal;
return S_OK;
}else if (dispIdMember == 2537)
{
if (pDispParams->cArgs != 1) return E_NOTIMPL;
if( pDispParams->rgvarg[0].vt != VT_BSTR) return E_NOTIMPL;
//pDispParams->rgvarg[1].bstrVal
return S_OK;
}
return E_NOTIMPL;
}
//////////////////////////////////////////////////////////////////////////
CExternalUIHandler::CExternalUIHandler()
{
CComObject<CExternalDisp> *obj;
CComObject<CExternalDisp>::CreateInstance(&obj);
obj->QueryInterface(IID_IDispatch, (void**)&m_spExtDispatch);
}
// Do not show the context menu
HRESULT STDMETHODCALLTYPE CExternalUIHandler::ShowContextMenu(
/* [in] */ DWORD dwID,
/* [in] */ DWORD x,
/* [in] */ DWORD y,
/* [in] */ IUnknown *pcmdtReserved,
/* [in] */ IDispatch *pdispReserved,
/* [retval][out] */ HRESULT *dwRetVal)
{
*dwRetVal = S_OK;
return S_OK;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::GetHostInfo (
/* [out][in] */ DWORD *pdwFlags,
/* [out][in] */ DWORD *pdwDoubleClick)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::ShowUI(
/* [in] */ DWORD dwID,
/* [in] */ IUnknown *pActiveObject,
/* [in] */ IUnknown *pCommandTarget,
/* [in] */ IUnknown *pFrame,
/* [in] */ IUnknown *pDoc,
/* [retval][out] */ HRESULT *dwRetVal)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::HideUI(void)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::UpdateUI(void)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::EnableModeless(
/* [in] */ VARIANT_BOOL fEnable)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::OnDocWindowActivate(
/* [in] */ VARIANT_BOOL fActivate)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::OnFrameWindowActivate(
/* [in] */ VARIANT_BOOL fActivate)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::ResizeBorder(
/* [in] */ long left,
/* [in] */ long top,
/* [in] */ long right,
/* [in] */ long bottom,
/* [in] */ IUnknown *pUIWindow,
/* [in] */ VARIANT_BOOL fFrameWindow)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::TranslateAccelerator(
/* [in] */ DWORD hWnd,
/* [in] */ DWORD nMessage,
/* [in] */ DWORD wParam,
/* [in] */ DWORD lParam,
/* [in] */ BSTR bstrGuidCmdGroup,
/* [in] */ DWORD nCmdID,
/* [retval][out] */ HRESULT *dwRetVal)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::GetOptionKeyPath(
/* [out] */ BSTR *pbstrKey,
/* [in] */ DWORD dw)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::GetDropTarget(
/* [in] */ IUnknown *pDropTarget,
/* [out] */ IUnknown **ppDropTarget)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::GetExternal(
/* [out] */ IDispatch **ppDispatch)
{
return m_spExtDispatch.CopyTo(ppDispatch);
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::TranslateUrl(
/* [in] */ DWORD dwTranslate,
/* [in] */ BSTR bstrURLIn,
/* [out] */ BSTR *pbstrURLOut)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CExternalUIHandler::FilterDataObject(
/* [in] */ IUnknown *pDO,
/* [out] */ IUnknown **ppDORet)
{
return E_NOTIMPL;
}
分享到:
相关推荐
下载解压后放入extension文件夹下即可
「Kiwi Browser」是一款基于开源项目 Chromium 开发的安卓端浏览器,最大的特色就是支持安装 Chrome 扩展,而且自带广告过滤功能。 Kiwi 浏览器与 Chrome 非常相似,但功能上更加丰富和强大,可以看作是一个增强版...
2、通过主界面浏览器按钮进去,基于Web browser浏览器控件开发,地图模块用Javascript实现,操作性和后期扩展性比第一种方便,不过需要去百度申请密钥,仅供个人研究; 相关JavascriptAPI网址:...
非常好用的控件。完全可以扩展编写自己的浏览器空间。 多种强大浏览器功能,简单编码即可实现。
适用于Chrome的Content Server Browser Web扩展 当通过Chrome访问Content Server Web界面时,OpenText Content Server浏览器Web扩展可帮助您执行各种任务。 通过此扩展,您可以访问Content Server桌面组件提供的功能...
本文基于 Java web 平台技术、采用 Browser/Server 结构,设计并实现了该系统的简化版学生信息管理系统。 论文首先介绍了系统开发涉及的相关技术及开发平台,主要围绕学生信息管理系统实现的相关技术和系统的...
当通过Chrome访问Content Server Web界面时,OpenText Content Server浏览器Web扩展可帮助您执行各种任务。通过此扩展,您可以访问Content Server桌面组件提供的功能。 支持语言:English (United States)
Remote Browser 是一个用于使用JavaScript以编程方式控制诸如Chrome和Firefox之类的Web浏览器的库
运行扩展 验证扩展源 签名扩展,以便可以将其安装在Firefox中 从源代码创建扩展包 在浏览器中打开web-ext文档从npm安装首先,确保你在运行当前的(长期支持)版本 。全局命令您可以使用以下命令将该命令全局安装到...
安装本地浏览器-将扩展程序添加到网上商店的Chrome / Firefox / Safari或使用以下链接:http://www.vnprodev.com/browser-extensions/local-explorer-install.php-在Windows上,请下载并安装此扩展程序适用于Windows...
该项目提供了一个Web扩展名,该扩展名允许从网站中的脚本访问scuttlebutt。 在主机上运行的脚本通过本地消息提供到scuttlebutt的RPC连接。 网络扩展允许决定哪些页面可以访问Scuttlebutt。 该扩展包括一个内容脚本...
Local Explorer提供了一个简单的文件管理器,可让您直接在Web浏览器中浏览和打开本地文件链接。 单击本地文件夹时,本地资源管理器将打开Windows资源管理器;单击文件时,本地资源管理器将打开关联的应用程序。 例如...
播放4x和LF倒置的YouTube。货币兑换显示亚马逊。 快速搜索:通过鼠标在页面上搜索字符。 ... 最高4倍的播放速度。 以180度旋转播放或镜像播放视频或上下颠倒播放。...亚马逊:自动将货币转换为亚马逊商品,可快速搜索到...
Hypothesis浏览器扩展允许您使用帐户注释Web文档。 在下面选择您的浏览器 Chrome 火狐浏览器 现在可用 开发中 发展历程 扩展的代码位于src/目录中,可以通过运行以下命令将其内置到浏览器扩展中: make build ...
创建React Web扩展,例如Create React App。 特征 create-react-app中的功能 React,JSX,ES6,TypeScript和Flow语法支持。 ES6以外的其他语言,例如对象传播运算符。 自动前缀CSS。 ... 。 清单生成器(验证...
Lobo Evolution是一个可扩展的全Java Web浏览器和RIA平台。 它支持HTML 4,HTML5 Javascript(AJAX),CSS 3和Java(Swing / AWT)呈现。 Cobra是网络浏览器的渲染器API; 也是一个可识别JavascriptHTML解析器。 ...
高清带目录 211页 部分目录 第1章 初步接触Chrome...第3章 Chrome扩展的UI界面3.1 CSS简述3.2 Browser Actions3.2.1 图标 3.2.2 Popup页面3.2.3 标题和badge3.3 右键菜单3.4 桌面提醒3.5 Omnibox3.6 Page Actions.....
Freenet浏览器扩展Freenet的一个简单的Web浏览器扩展程序,当前已构建为可在Chrome上运行。 ###特征当前页面为Freenet页面时,在URL栏中显示一个小的Freenet徽标###安装克隆存储库在Chrome中打开chrome://...
Authenticator是一个,使您的自动化测试可以使用验证与Web应用程序进行。 Authenticator会动态生成浏览器扩展,因此您可以通过配置文件或env变量轻松提供用户名和密码。 Authenticator可与以下测试框架一起使用:...
asciidoctor-browser-extension:用于Web浏览器的扩展,可使用Asciidoctor.js将AsciiDoc文件转换为HTML