记一次npapi插件无窗口(windowless )化下的妙巧思路然后解决问题的超爽体验过程
1:问题
集成第三方的ocx控件,用来做pdf显示和签名。如果用窗口化插件做,很简单,加载ocx到窗口中,再显示到网页即可。但这样有个缺点。就是这个窗口会浮动在网页元素的上面,导致遮挡住网页元素。比如网页弹出层,下拉框等。
2:解决问题思路
Npapi无窗口(windowless)插件的句柄只是一个HDC,只能把需要展示的东西画在这个HDC上输出。那么就想到如下方式:
1:创建一个窗口,窗口加载ocx控件,隐藏此窗口,在插件的HandleEvent(windowless)中的事件处理中,刷新消息里实时根据ocx窗口句柄进行截图(bmp格式),然后在位图通过HDC输出到界面。看似解决了,打完收工。
但是,但是。。。。。。。。这种方式导致鼠标事件无法在ocx窗口进行。因为无窗口插件就是一个HDC,所有鼠标事件都在上面发生,通过在handlevent中转发鼠标的消息到ocx窗口也无效。导致缩少放大,拖动pdf文件等无效,极度影响体验,又要无窗口化,又要完美支持,真是两难,进度一度停止不前。
3.转机
话又要说回来,因为自已以前经常搞点逆向的小工程,虽然技术很菜,但看过别人怎么玩,也就是这点基础,让想到了类似QQ密码等的捕获技术所使用的方法。那就是:在QQ密码框上弄一个看不见的遮罩层,用户在输入密码时,这个遮罩层也在响应相应的消息,从来轻松兼容所有问题。一个激灵,让事情有了转机。
4:要实现此种方法的技术难点在
1) 窗口跟随,也就是取到目标窗口的的句柄,跟踪目标窗口,通过句俩获得目标窗口的座标,让遮罩层跟随过去。Npapi无窗口插件无句柄,是一个hdc。难!
2) Npapi插件相对浏览器和屏幕的座标。
3) Npapi插件本身大网页中的座标和大小。
4) Npapi在鼠标移出时,需让遮罩层移出屏幕或隐藏,否则又回到最开始说了,会浮动在网页元素最顶层,虽然看不见。但影响网页元素的操作,因为鼠标消息都被它截获了。
5) 多浏览器下的座标换算
6) 单网页下多插件的座标换算和句柄等操作。
7) 其它若干小坑。。。。
结局:
通过baidu大法和google大法。最终一个坑一个坑的趟过。实现的过程复杂,但解决问题后确是心情满满。点赞。
记一次npapi插件无窗口(windowless )化下的妙巧思路然后解决问题的超爽体验过程的更多相关文章
- 一步一步学Silverlight 2系列(23):Silverlight与HTML混合之无窗口模式
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 在NPAPI开发火狐浏览器插件在NPAPI插件
1.插件是什么 插件是一种遵循一定规范的应用程序接口编写出来的程序.插件必须依附于一个宿主程序,为宿主程序提供增强功能.插件的种类有很多,这里主要讨论浏览器插件. IE下利用OLE和COM技术开发的浏 ...
- 【C#】给无窗口的进程发送消息
注:本文适用.net2.0+的winform程序 一个winform程序,我希望它不能多开(但是如何防多开不是本文要讲的),那么在用户启动第二个实例的时候,作为第二个实例来说,大概可以有这么几种做法: ...
- SetTimer在无窗口和有窗口线程的使用 . .
今天犯了一个粗心的错误,在无窗口线程中,SetTimer中设置计时器ID,而WM_TIMER消息响应函数中得到的计时器ID却不是之前设置的计时器ID. 对应计时器ID的输出的是一个随机数字. 原来在m ...
- 【转】NPAPI 插件无法在 Chrome 42 版及更高版本上正常运行
原文网址:https://support.google.com/chrome/answer/6213033 NPAPI 插件无法在 Chrome 42 版及更高版本上正常运行 您可以利用插件在浏览器中 ...
- Chrome浏览器扩展开发系列之十一:NPAPI插件的使用
在Chrome浏览器扩展中使用HTML和JavaScript非常容易,但是如何重用已有的非JavaScript遗留系统代码呢?答案是将NPAPI插件绑定到Chrome浏览器扩展,从而实现在Chrome ...
- 解决CPC撰写文档报错问题“无法获取“AxforApplication”控件的窗口句柄。不支持无窗口的 ActiveX 控件”
最近公司需要把官方CPC电子申请移植到项目中,在移植完成后,撰写文档总是出现“无法获取“AxforApplication”控件的窗口句柄.不支持无窗口的 ActiveX 控件”,另楼主头疼很久,网上寥 ...
- Chrome禁用NPAPI插件(包含 Silverlight、Java 和 Unity)
过去,很多插件都是使用一种称为NPAPI 的旧系统开发的. 现在,仅仅有少量站点在使用NPAPI 插件,由于这些插件有时会给站点带来安全风险. 为了让用户获得更安全.更高速且更稳定的 Chrome 浏 ...
- VC无窗口控制台程序
VC无窗口控制台程序 #pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartu ...
随机推荐
- maven jetty
父项目: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons- ...
- For循环复杂练习
for是循环当中经常用到的一个结构,练熟了才可以. 练习-需求描述: 在控制台打印以下形式的字符: * * * * * * * * * * * * * * * 思路,首先分析需求的规律 1.首先分析需 ...
- rsync命令来实现将服务器端的文件备份到客户端
rsync命令来实现将服务器端的文件备份到客户端
- CF-164C. Machine Programming(最小费用最大流)
题意: 给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利 每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做 ...
- 【动态规划】Vijos P1104 采药(NOIP2005普及组第三题)
题目链接: https://vijos.org/p/1104 题目大意: T时间,n个物品,每个耗时ti,可获得收益ci,求最大收益. 题目思路: [动态规划] 01背包裸题.一维二维都过了,放个一维 ...
- 如何在IIS6,7中部署ASP.NET网站
http://www.cnblogs.com/fish-li/archive/2012/02/26/2368989.html 阅读目录 开始 查看web.config文件 在IIS中创建网站 IIS6 ...
- QTP自传之测试报告
前言 测试报告是测试阶段的最后产出,也是最重要的产出,自动化测试报告也是如此.前期所做的工作,添加对象.编写脚本等都是为了可以生成一份正确.严谨的测试报告.我作为一款功能全面的自动化测试工具,毫无疑问 ...
- UVAlive2531 The K-League(最大流)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33451 [思路] 最大流. 大体思路是枚举每个队伍,最大流判断是否 ...
- Codeforces Round #216 (Div. 2) E. Valera and Queries 树状数组 离线处理
题意:n个线段[Li, Ri], m次询问, 每次询问由cnt个点组成,输出包含cnt个点中任意一个点的线段的总数. 由于是无修改的,所以我们首先应该往离线上想, 不过我是没想出来. 首先反着做,先求 ...
- A_star poj2449 k短路
赛后填坑系列QAQ 贴代码呀 #include<iostream> #include<algorithm> #include<cstdio> #include< ...