zoukankan      html  css  js  c++  java
  • 猜测功能实现方案 之 IE右键菜单——Add To Evernote

    还记得上一次的猜测了windows右键菜单 “发送到 Evernote”的功能实现方案,呵呵,今天又猜了一次,不过换成了IE右键菜单。

    我想任何一个不明白其中原理和实现方案的人、在刚遇到这个问题时肯定是“丈二的和尚”——摸不着头脑。我也是这样、一头雾水,不过还大概的有点头绪,就是弄清楚“Add To Evernote”用到了哪些东西、那些文件,然后再和其他应用程序的相似功能进行对比,这样就能把“狐狸尾巴”揪出来了。

    开始揪尾巴…
    打开360安全卫士,找功能大全,里面有一项叫“右键菜单管理”的功能。嘿嘿,这招有点狠,尾巴立马被抓到了,如下图:

    右键菜单.png
    右键菜单.png (39.21 KiB) 被浏览 1 次



    我的IE右键菜单,其中有几项很相似

    Add To Evernote,键值为“RES://…… \enbar.dll/2000”
    导出到 Excel ,键值为“RES://…… \excel.exe/3000”
    导出到 MS Excel ,键值为“RES://… \excel.exe/3000”
    这三项嘛,有相似规律, 都是 RES://开头,指向某dll或exe,然后后面有个参数。
    这种格式 是一种标准的RES协议格式、常常用来定位到特定资源, 最后的参数是一个ID,这个ID就是用来做定位的,它指向的dll或exe文件的里特定资源。

    代码: 全选
    1.IE中RES协议的详细用法
        "RES://"协议是IE 4.0预定义的一个协议,它的具体语法为:"RES://resource file[/resourcetype]/resource id"。
        resource file:含有资源的模块的文件名,请注意这里的路径分隔符只能使用“\”,而不能使用“/”。
        Resourcetype:资源类型,它是一个字符串或数字。常用的资源类型都对应着一个数,比如BITMAP对应着RT_BITMAP=2,这些常数定义在VC++的WINUSER.H可以找到,如果资源类型是数字,要在数字前面加上“#”号。Resourcetype可以省略,默认为RT_HTML=23,即HTML文件。RT_HTML在VC++ 5.0中没有定义,但现在已经广泛使用。
        Resource id:资源的ID号。在这里要注意一个问题:在VC++中定义资源的时候,通常是使用数字常量,比如ID_BITMAP1,它代表的数字可能是101。而在使用res://协议时,不能使用ID_BITMAP1(在DLL中并没有这个符号),而必须使用#101来代表资源。例如要显示一个位图资源,其ID号为101,应为RES://mydll.dll/#2/#101。
    2.RES资源探测工具
    有个叫ResHacker的小工具,可以探测dll、exe和sys文件里的资源
    3.RES的安全问题
    res可以读取本地程序的资源文件,存在泄漏信息的安全隐患,出于这个安全方面的考虑,目前只有IE和利用IE内核的浏览器还在默认持这个协议,其他浏览器已经把这个协议废了。



    还有大家比较熟悉的两项,就是 “使用迅雷下载” 和 “使用迅雷下载全部链接”,这两项都是指向一个html文件,而文件内都是Script脚本,并且脚本中都调用了ActiveX。

    嘿嘿,ActiveX就是真正的尾巴。

    浏览器是B,服务器是S; 客户端是C,服务端是S。 无论是BS、 还是CS,它们往往分布的天各一方,而他们之间的相互方式就是通过Internet。然而现在呢,我们需要的是B 与 C交互,那我们该使用什么技术呢?额,不要先想这个问题,还是先想B 与 C的关系吧。B其实就是一种特殊的C,既然是特殊的C,只要找到B 与 C的交融点,那我们就可以找到他们之间交互的桥梁了。其实这时候我们就很容易的想到ActiveX了,因为ActiveX就是C中的组件或者控件,而恰好浏览器又可以承载ActiveX。那么把ActiveX作为 B 与 C交互的桥梁,也是一种可选的方案了。

    说了半天,我们还只是凭空猜测 “Add To Evernote” 是使用的ActiveX,那就让我们来验证一下吧:
    在IE浏览器中输入 “RES://…… \enbar.dll/2000”。哈哈,看到了IE的安全警告了没?ActiveX。
    而且这时候我们还可以确定 RES指向的资源就是一段Script脚本,只不过它被置入了Dll的资源里。

    至此,“Add To Evernote”功能的实现方案,我们已经弄的比较清楚了,那我们就可以Copy一下,用来实现我自己的“Add To MyNote”了。

    呵呵,成功了30%了。

    还有五项技术“问题”等着呢,
    1、制作 ActiveX控件。
    2、使用脚本 抓取页面数据, 并与ActvieX交互,将数据传入ActiveX。
    3、在(2)的交互中需要排除ActiveX的安全警告,这是一个技术难点。
    4、使用ActiveX 与 行客记事交互,将抓取到的页面数据,插入到笔记内容之中。
    5、发布、即安装部署,因为 ActiveX是需要在客户端注册的。


    这次没有完全照搬Add To Evernote,只是稍作修改,改动的地方就是 右键菜单的注册表项 直接指向 “html文件”【使用的是迅雷的实现方式】,这样做更简单。

    Over。



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    括号
    vue 框架原理
    Angular 1.x 框架原理
    ES5的数组方法
    js 对象细节
    《高性能网站建设进阶指南》笔记
    vue 运行时 + 编译器 vs. 只包含运行时
    vue-loader 细节
    vue 错误处理
    移动web touch事件
  • 原文地址:https://www.cnblogs.com/08shiyan/p/2138400.html
Copyright © 2011-2022 走看看