代码改变世界

c#小软件(SaveClassic)开发手记--(2)数据设计,IE右键菜单调用exe功能

2011-12-01 22:13  zhaoyang  阅读(1617)  评论(1编辑  收藏  举报

       首先谢谢这么多朋友的关注,有这么多朋友关注,攻难关肯定没问题了,再次感谢各位朋友。虽然有很多类似的软件,还是开篇那句话我要弄个自己的东西,无所谓了,搞个类似的东西也不错,我可以参考一下别人的,谢谢朋友们的关注。

      要开发这个小软件,从什么开始入手呢?我决定先从数据库设计开发入手。本着简单实用的原则,我选择了小巧的Access数据库,虽然有好多小型数据库例如MSDE 2000,Embedded Firebird,SQLite等,使用也很简单,运行速度也比较快,但是我还是喜欢使用Access,也许它更直观,更简单吧。

还是老话,本着简单实用原则,我决定只有一级分类,然后就是存在的网页信息。所以数据库中就存在着两个表。一是分类表DiaryType;一是详细内容表DiaryList。这两个表数据结构也是十分简单。

字段名称

字段类型

备注说明

ID

自动编号

 

TypeName

文本

日志分类名称

表1、DiaryType数据结构

字段名称

字段类型

备注说明

ID

自动编号

 

TitleName

文本

日志标题

FileUrl

文本

日志文件存储路径

TypeID

TypeID

日志分类ID

CreateTime

日期/时间

创建时间

表2、DiaryList数据结构

       目前想到的就这么多了,简单实用。我还是想把整个流程跑通,别的功能扩展应该就好办了。

      Ok数据结构搞定,下面在进行下一步就是在ie右键菜单中添加保存日志选项,单击打开保存日志程序。这个功能看似简单,但是我不熟悉ie的插件怎么弄,最后通过分析,迅雷的开发方法,得出了如下操作方法,也不知道好不好。

  这方法首先在注册表中添加一些数据,注册表中的位置HKEY_CURRENT_USER\Software\Microsoft\Internet   Explorer\MenuExt 哈哈看看那些IE右键菜单都再里面呢,如图一所示。模仿他们我在里面也添加一项,步骤如图二所示,并把他改名为“保存日志”,把默认值改为一个HTML页面路径,例如:c:\GetHtml.htm。这样做的目的是在IE的右键菜单中添加我们想要的选项,单击这个选项就会调用那个HTML页面。为什么不直接调用exe呢?好像不行,ie只能调用HTML页面,并支持脚本语言,所以我决定用Javascript调用exe文件来实现我的想法。到目前为止我们已经可以调用HTML页面了。说明一点当软件发布的时候修改注册表这一功能应该是在打包的时候完成的,不过目前为了调试方便我们手动的添加这以功能。

图一 IE右键自定义菜单注册表选项

 

图二、向注册表添加新项

  哈哈用完成了一步,下面我们开始编写HTML页面吧。我把这个页面命名为GetHtml.htm。看看他要完成的任务吧。

  1、 首先要获取当前网页的选择内容,如果没有选择则获取整个页面的内容,并且还要获取网页的标题,方便用户存储。

  2、 调用exe文件并传递以上获得的数据。

  看看整个HTML页面代码,在源代码的后面有详细的解释说明。

  <script type="text/javascript">

  var Title=external.menuArguments.document.title;

  //获取网页标题

  var webURL = external.menuArguments.document.domain;

  //获取网页主域名

  var Content =external.menuArguments.document.selection.createRange().htmlText;

  //获取网页选择内容

  if(Content=="")//如果网页选择为空则获取整个页面body内容

  {

       Content =external.menuArguments.document.body.innerHTML;

  }

  var SaveHTML = escape(Title+"$"+webURL+"$"+Content);

  //把获取到的内容进行一下编码,这样目的就是防止传递信息时出现编码错误

  //以下内容保存数据到文件

  var fso, f, s ;

    fso = new ActiveXObject("Scripting.FileSystemObject");   

    f = fso.OpenTextFile("I:\\tempHtml.txt",2,true);

    f.WriteLine(SaveHTML);  

  f.Close();

       //以下方法是打开exe文件

  var a=new   ActiveXObject("Wscript.shell");

  a.run("I:\\SaveTxt.exe");

  </script>

   Ok我们的代码编写完毕,虽然就这点代码我还是费了很大周折,因为我不熟悉这一块,又找不到合适的教程,摸索着完成。着重说明一点,就是javascript调用exe文件数据传递方式。我首先考虑到的是调用exe以参数方式传递,但是我又觉得数据太多的时候是不是会有问题;其次我考虑到剪贴板,但是我又觉得网页中得图片信息怎么处理(朋友们谁有这方面的资料共享以下。Js图片到剪贴板,c#获取数据处理);最后决定用文件来传递数据简单方便。今天就到这了。