L3soft Studio

圆自己一个开发梦

2007年12月25日

今天的第二个软件就是超级便笺本,这个软件有点熟,不是我用过 而是我前段时间破解了这个作者的另一个软件文件批量更名大师,呵呵,一样的注册原理,所以很容易。~~~~~~~~~~~~

 

         软件简介:超级便笺本是一款实用的桌面便笺软件,用于办公时代替纸和笔随时记下您需要的一些数字、计划等,可充当您的备忘录。所有文本均加密保存,是您书写电子便笺的好帮手。

 

原版:http://www.skycn.com/soft/24583.html

注册机:http://ant3000.gbaopan.com/files/bf9ad285b64d4675993c181da7e66d7c.gbp




还有一个电子书的软件,它收录中、西药物及中药方剂共六千五百种,按照科目进行分类,可快速定位药物, 还可全文检索。可以查询常用的药物作用、剂量及副作用,种类较少,属于普及型非专业药物手册。是医务工作者必备的电子读物.

原版:http://www.skycn.com/soft/28210.html

注册机:http://ant3000.gbaopan.com/files/2fe5f9214daa4010bd8a4a88ef5b2a2b.gbp





    摘要:今天手痒啊 所以在网上找了AA制费用分摊这么一个小软件来玩一下。

          软件简介:AA制软件是一款几乎不占空间的纯绿色软件,她主要用于AA制的费用分摊。她操作简单、思路清晰、功能强大、无病毒、无任何插件、是不可多得的好软件,值得收藏.  。

 

原版V1.2:  http://www.onlinedown.net/soft/49919.htm

V1.2注册机: 此处阅读全文



2007年11月26日

今天破解了一个执业药师(中药)资格考试的模拟考试软件,下面就是该软件的介绍:

软件介绍:

《考试宝典》是专门为参加执业药师资格考试的朋友量身定做的自我测试系统,对职称考试也极具参考价值。题型丰富,图文并茂,内容全面,题库设计符合执业药师资格考试最新考试大纲,内容丰富,海量试题(注册用户的题量可达1万9千多题,110万字),囊括了目前所有的最新模拟试题及历年试题,并提供专业级的解题思路。软件互动性强,支持用户试题、解题思路、考试资料载入,以及对重点试题的收集整理。允许用户对考试资料进行修改,随时自行添加,修改和删除试题库中的试题和答案,形成自己的个性试题库。智能阅卷、实时提供参考答案、可以对全部试题进行打印,做题时系统会显示考试过程已用的时间,做完后显示得分情况和各题答案的正确与错误情况,并可查看答错题的具体内容和答错之处。注册用户可以随时查询网上最新题库版本并进行升级。

    软件特色:

    1.模拟考试:题型与分值分布均按考试大纲设计,科学合理,考试完毕系统自动批阅,并提供标准答案。基本上覆盖了应考的全部知识点。

    2.试题查询:可以就某个词,如“硝酸甘油”进行查询,将包含此词的试题进行汇总,可以针对特定知识点进行复习。

    3.温故知新:每次答题完毕,批阅试题之后,系统会自动记录用户的答题内容、数量、平均答题速度、正确率、答题耗时、答题日期,方便以后查阅。

    4.统计分析:系统能记录下用户的每次答题情况,进行智能分析,并以列表及曲线图的方式显示答题数量、正确率、答题速度,用户可以及时掌握自己的答题情况。

 

原版:http://www.11nong.com/soft/12356/

补丁:http://ant3000.gbaopan.com/files/a47204f018b04309bb62ca127e8d75be.gbp




今天 破解了一个叫文摘管理专家的 软件,以下就是该软件的简介

 

《文摘管理专家》是一款收藏、管理各类文档的功能强大的可免费使用的软件。
1、本软件采用树形图的形式来分类管理各种文档,容易组织和查阅,编辑、查找方便。
2、支持多种类型文档的收集(TXT、RTF、HTML、CHM、DOC文件等)。支持附件功能。
3、单一文件结构。文件内所有资料均已被加密及压缩。提供多种资料保密和共享方式。
4、内置浏览器,可以浏览常见的文本、源程序、网页、图像等类型的附件。
5、可将所有资料生成EXE及CHM文件。
6、无须安装,绿色软件。
V2.80版本在人性化方面做出了更多努力,主要更新如下:
1、附件支持拖动保存:文件拖动到“悬浮按钮”和拖出附件时都要按住“Shift”键。
2、附件列表支持排序(单击列表项标题)。
3、在“设置选项”中新增更多选项:“切换节点时提示保存已修改过的节点内容”、“新建节点时智能生成节点标题”、“已访问过的节点加粗显示”、“删除节点/附件到回收站前要确认”、 剪贴板监视和文本拖存时允许“不添加节点”等。
...

原版:http://dl3.winu.cn/tools/20060522/200605221717026866.rar

破解补丁:http://ant3000.gbaopan.com/files/ac803e194352460987af4a881ea58795.gbp





    摘要: 本软件是一款极好的文件批量改名工具,他可以轻松的帮助你完成各种形式的文件批量改名工作。您不妨下载试试,相信您一定会喜欢它的^_^

       破解补丁是本人制作的,下载后运行它就可以以我的名字来注册《文件批量更名大师》,如果想用自己的名字注册,大家可以运行《文件批量更名大师》根目录下的FileRenUnRegKey.reg文件,再运行注册机key.exe。注意,第一次运行注册机一样会弹出注册码 ,但这个注册码是对应空注册名的,大家要先填写自己的注册名,再填写任意注册码,然后重启《文件批量更名大师》,这是用您名字注册的真正注册码出来了,复制它,然后再点注册,填写您刚才的注册名,和复制好的注册码注册就可以注册成功的。

      希望大家喜欢。

 

原版:http    (全文共829字)——点击此处阅读全文



2007年11月11日


    摘要:

刚刚破解了一个彩票软件《彩尊圣手黄金版》,其实也不是什么破解,只是脱了个壳就没有时间限制了,:-)。

希望给大家带来方便吧~~~

原版:http://www.smswriter.com/share/setup.exe

破解补丁:http://ant3000.gbaopan.com/files/081f2736eba6487eb8f1ee66b001ea84.gbp

    (全文共411字)——点击此处阅读全文


2007年05月18日


    摘要:
什么是红股和转赠股
  红股:免费派送予股东的股份。投资者可将红股视为股息的一部分。值得注意的是,红股会摊薄每股盈利、每股派息等,当然亦会摊薄股价。
  转增股:同样是免费送予股东的股份,与送红股不同的是,红股是利润分配所得,转增股则从资本公积金转成股本。
深市分红流程
  领取方式:自动划到投资者帐上。
  领取时间:R+2日到帐(R:股权登记日)
  国有股、法人股、职工股、高级管理人员持股的红股,由深交所于R+2直接记入各相应股东的证券帐户。
  公众股及转配股的红股按下列程序记入各股东证券帐户:
  (一) R+1日收市后,证券营业部通过结算通讯系统接收结算数据包中的红股明细数据;
  (二) R+2日,红股到帐,可流通红股上市交易。

沪市分红流程
  领取方式:自动划到投资者帐上    (全文共3776字)——点击此处阅读全文


2006年09月05日


    摘要:炮打流氓软件

炮打流氓软件
        --我的一张大字报
作者: kinglon(gamelife2@21cn.com,kinglon@cnns.net) (以后自己可以利用搜索引擎找到本文)
关键字:Terminator Lab,卡巴威尔,流氓软件,清除,专杀 (以后自己可以利用搜索引擎找到本文)
日期: 2006-7-01

       
    全国第一个流氓    (全文共7128字)——点击此处阅读全文


2006年08月29日

 gzip,zlib,以及图形格式png,使用的是同一个压缩算法deflate。我们通过对gzip源码的分析来对deflate压缩算法做一个详细的说明。我阅读的gzip版本为 gzip-1.2.4。我们对算法做三种程度的说明。第一种程度,对gzip所使用压缩算法基本原理的说明。第二种程度,对gzip压缩算法实现方法的说明。第三种程度,对gzip实现源码级的说明。
  
  如果你有时间的话,我建议你先不要看下面的内容,自己尝试通过读gzip源码,来了解它的压缩解压缩是如何实现的,这将会是一个非常有趣的智力游戏,千万不要错过。当一个又一个的谜被解开时,那感觉就像唐伯虎同志所说的,“慷慨然诺杯酒中”。(小唐的诗,除了另一个倒霉蛋曹雪芹外,好像不太被人提。)
  
  1 gzip所使用压缩算法的基本原理
  
  gzip 对于要压缩的文件,首先使用lz77算法进行压缩,对得到的结果再使用huffman编码的方法进行压缩。所以我们分别对lz77和huffman编码的原理进行说明。
  
  1.1 ... 1.2 ...
  
  2 gzip压缩算法实现方法
  
  2.1 LZ77算法的gzip实现
  
  首先,gzip 从要压缩的文件中读入64KB的内容到一个叫window的缓冲区中。为了简单起见,我们以32KB以下文件的压缩为例做说明。对于我们这里使用32KB以下文件,gzip将整个文件读入到window缓冲区中。然后使用一个叫strstart的变量在window数组中,从0开始一直向后移动。strstart在每一个位置上,都在它之前的区域中,寻找和当前strstart开始的串的头3个字节匹配的串,并试图从这些匹配串中找到最长的匹配串。
  
  如果当前的strstart开始的串,可以找到最少为3个字节的匹配串的话,当前的strstart开始的匹配长度那么长的串,将会被一个<匹配长度,到匹配串开头的距离>对替换。
  
  如果当前的strstart开始的串,找不到任何的最少为3个字节的匹配串的话,那么当前strstart的所在字节将不作改动。
  
  为了区分是一个<匹配长度,到匹配串开头的距离>对,还是一个没有被改动的字节,还需要为每一个没有被改动的字节或者<匹配长度,到匹配串开头的距离>对,另外再占用一
  位,来进行区分。这位如果为1,表示是一个<匹配长度,到匹配串开头的距离>对,这位如果为0,表示是一个没有被改动的字节。
  
  现在来说明一下,为什么最小匹配为3个字节。这是由于,gzip 中,<匹配长度,到匹配串开头的距离>对中,"匹配长度"的范围为3-258,也就是256种可能值,需要8bit来保存。"到匹配串开头的距离"的范围为0-32K,需要15bit来保存。所以一个<匹配长度,到匹配串开头的距离>对需要23位,差一位3个字节。如果匹配串小于3个字节的话,使用<匹配长度,到匹配串开头的距离>对进行替换,不但没有压缩,反而还会增大。所以保存<匹配长度,到匹配串开头的距离>对所需要的位数,决定了最小匹配长度至少要为3个字节。
  
  下面我们就来介绍gzip如何实现寻找当前strstart开始的串的最长匹配串。
  
  如果每次为当前串寻找匹配串时,都要和之前的每个串的至少3个字节进行比较的话,那么比较量将是非常非常大的。为了提高比较速度,gzip使用了哈希表。这是gzip实现LZ77的关键。这个哈希表是一个叫head的数组(后面我们将看到为什么这个缓冲区叫head)。gzip对windows中的每个串,使用串的头三个字节,也就是strstart,strstart+1,strstart+2,用一个设计好的哈希函数来进行计算,得到一个插入位置ins_h。也就是用串的头三个字节来确定一个插入位置。然后把串的位置,也就是 strstart的值,保存在head数组的第ins_h项中。我们马上就可以看到为什么要这样做。head数组在没有插入任何值时,全部为0。

当某处的当前串的三个字节确定了一个ins_h,并把当时当前串的位置也就是当时的strstart保存在了head[ins_h]中。之后另一处,当另一处的当前串的头三个字节,再为那三个字节时,再使用那个哈希函数来计算,由于是同样的三个字节,同样的哈希函数,得到的ins_h必然和前面得到的ins_h是相同的。于是就会发现head[ins_h]不为0。这就说明了,有一个头三个字节和自己相同的串把自己的位置保存在了这里,现在head[ins_h]中保存的值,也就是那个串的开始位置,我们就可以找到那个串,那个串至少前3个字节和当前串的前3个字节相同(稍后我们就可以看到这种说法不准确,这里是为了说明方便),我们可以找到那个串,做进一步比较,看到底能有多长的匹配。
  
  我们现在来说明一下,相同的三个字节,通过哈希函数得到的ins_h必然是相同的。而不同的三个字节,通过哈希函数有没有可能得到同一个ins_h,我没有对这个哈希函数做研究,并不清楚,不过一般的哈希函数都是这样的,所以极大可能这里的也会是这种情况,即不同的三个字节,通过哈希函数有可能得到同一个ins_h,不过这并不要紧,我们发现有可能是匹配串之后,还会进行串的比较。
  
  一个文件中,可能有很多个串的头三个字节都是相同的,也就是说他们计算得到的ins_h都是相同的,如何能保证找到他们中的每一个串呢?gzip使用一个链把他们链在一起。gzip每次把当前串的位置插入head的当前串头三个字节算出的ins_h处时,都会首先把原来的head[ins_h]的值,保存到一个叫prev的数组中,保存的位置就在现在的strstart处。这样当以后某处的当前串计算出ins_h,发现head[ins_h]不空时,就可以到prev[ head[ins_h] ]中找到更前一个的头三个字节相同的串的位置。对此我们举例说明。
  
  例,串
  0abcdabceabcfabcg
  ^^^^^^^^^^^^^^^^^
  01234567890123456
  
  整个串被压缩程序处理之后。
  
  由abc算出ins_h。
  这时的head[ins_h]中为 13,即"abcg"的开始位置。
  这时prev[13]中为 9,即"abcfabcg"的开始位置。
  这时prev[9]中为 5,即"abceabcfabcg"的开始位置。
  这时prev[5]中为 1,即"abcdabceabcfabcg"的开始位置。
  这时prev[1]中为 0。
  
  我们看到所有头三个字母为abc的串,被链在了一起,从head可以一直找下去,直到找到0。
  
  现在我们也就知道了,三个字节通过哈希函数计算得到同一ins_h的所有的串被链在了一起,head[ins_h]为链头,prev数组中放着的更早的串。这也就是head和prev名称的由
  来。
  
  gzip寻找匹配串的另外一个值得注意的实现是,延迟匹配。会进行两次尝试。比如当前串为str,那么str发生匹配以后,并不发生压缩,还会对str+1串进行匹配,然后看哪种
  匹配效果好。
  
  例子 ...
从这个例子中我们就看到了做另外一次尝试的原因。如果碰到的一个匹配就使用了的话,可能错过更长匹配的机会。现在做两次会有所改善。
  
  ...
  
  2.2 问题讨论
  
  我在这里对gzip压缩算法做出了一些说明,是希望可以和对gzip或者压缩解压缩感兴趣的朋友进行交流。
  我对gzip的了解要比这里说的更多一些,也有更多的例子。如果哪位朋友愿意对下面的问题进行研究,以及其他压缩解压缩的问题进行研究,来这里http://jiurl.cosoft.org.cn/forum/ 和我交流的话,我也愿意就我知道的内容进行更多的说明。
  
  下面是几个问题
  
  这种匹配算法,即用3个字节(最小匹配)来计算一个整数,是否比用串比较来得高效,高效到什么程度。
  
  哈希函数的讨论。不同的三个字节,是否可能得到同一个ins_h。ins_h和计算它的三个字节的关系。
  
  几次延迟尝试比较好?
  
  用延迟,两次尝试是否对压缩率的改善是非常有限的?
  
  影响lz77压缩率的因素。
  
  压缩的极限。
    
  2.3 ...
  
  3 gzip源码分析
  
  main() 中调用函数 treat_file() 。
  treat_file() 中打开文件,调用函数 zip()。注意这里的 work 的用法,这是一个函数指针。
  zip() 中输出gzip文件格式的头,调用 bi_init,ct_init,lm_init,
  其中在lm_init中将 head 初始化清0。初始化strstart为0。从文件中读入64KB的内容到window缓冲区中。
  由于计算strstart=0时的ins_h,需要0,1,2这三个字节和哈希函数发生关系,所以在lm_init中,预读0,1两个字节,并和哈希函数发生关系。
  
  然后lm_init调用 deflate()。
  deflate() gzip的LZ77的实现主要deflate()中。





    摘要:称:LZW压缩算法简介
作者:宋成
描述:一篇关于LZW压缩算法简介的文章,通俗易懂,值得一看!
备注:该文章整理自软件报1998年合订本上册。


    LZW压缩算法是一种新颖的压缩方法,由Lemple-Ziv-Welch 三人共同创造,用他们的名字命名。它采用了一种先进的串表压缩不,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图象文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确的建立这个串表,压缩或解压缩完成后,这个串表又被丢弃。

1.基本原理
    首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文件中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。压缩完成后将串表丢弃。如"print"    (全文共3541字)——点击此处阅读全文


2006年08月06日


    摘要:http://go.microsoft.com/fwlink/?LinkId=52384    (全文共456字)——点击此处阅读全文


2006年06月06日

C#编程实现在Excel文档中搜索文本
作者: it步行者   www.ASPCool.com 时间:2006-5-18 21:34:37  

     有了在Word文档中编程实现搜索文本的经验,在Excel中实现这个功能也并非难事。
  
    打开Excel的VBA帮助,查看Excel的对象模型,很容易找到完成这个功能需要的几个集合和对象:Application、Workbooks、Workbook、Worksheets还有Worksheet和Range。Application创建Excel应用,Workbooks打开Excel文档,Workbook获得Excel文档工作薄,Worksheets操作工作表集合,Worksheet获得单个工作表。
  
    搜索的思路对应上述集合和对象,可以这样表述:要搜索的文本可能存在Excel文档当中的某个工作表上,搜索应该遍历目标Excel文件的每个工作表中的有效区域,如果找到,则退出本次搜索,如果没有找到,则继续搜索直到完成本次搜索。
  
    跟Word对象模型不一样的是,Excel对象模型没有提供Find对象,不过没有关系,可以通过两种方法来实现,一个是通过Range对象的Find()方法来实现,另外一个比较麻烦,取得工作表Worksheet的有效区域UsedRange之后,遍历该Range对象中的所有行列。实际开发中,用第二种方法时发现了一个特别的现象,所以第二种方法也准备详细记述一下。
  
    第一步,打开Excel文档:
  
  
  
  object filename="";
  object MissingValue=Type.Missing;
  string strKeyWord=""; //指定要搜索的文本,如果有多个,则声明string[]
  Excel.Application ep=new Excel.ApplicationClass();
  Excel.Workbook ew=ep.Workbooks.Open(filename.ToString(),MissingValue,
   MissingValue,MissingValue,MissingValue,
   MissingValue,MissingValue,MissingValue,
   MissingValue,MissingValue,MissingValue,
   MissingValue,MissingValue,MissingValue,
   MissingValue);
  
    然后准备遍历Excel工作表:
  
  
  Excel.Worksheet ews;
  int iEWSCnt=ew.Worksheets.Count;
  int i=0,j=0;
  Excel.Range oRange;
  object oText=strKeyWord.Trim().ToUpper();
  
  for(i=1;i<=iEWSCnt;i++)
  {
   ews=null;
   ews=(Excel.Worksheet)ew.Worksheets[i];
   oRange=null;
   (Excel.Range)oRange=((Excel.Range)ews.UsedRange).Find(
   oText,MissingValue,MissingValue,
   MissingValue,MissingValue,Excel.XlSearchDirection.xlNext,
   MissingValue,MissingValue,MissingValue);
   if (oRange!=null && oRange.Cells.Rows.Count>=1 && oRange.Cells.Columns.Count>=1)
   {
   MessageBox.Show("文档中包含指定的关键字!","搜索结果",MessageBoxButtons.OK);
   break;
   }
  }
  
    这里要说两个值得注意的地方。一个是遍历工作表的索引,不是从0开始,而是从1开始;另外一个是Find方法的第六个参数SearchDirection,指定搜索的方向,帮助文档中说这个参数是可选项,但是我用MissingValue如论如何编译不能通过,不知什么原因,于是显式指定它的默认值xlNext。
  
    第一种方法实现了,再看看第二种方法。这种方法除了要遍历工作表,还要对工作表使用区域的行和列进行遍历。其它一样,只对遍历说明,代码如下:
  
  
  bool blFlag=false;
  int iRowCnt=0,iColCnt=0,iBgnRow,iBgnCol;
  
  for(m=1;m<=iEWSCnt;m++)
  {
   ews=(Excel.Worksheet)ew.Worksheets[m];
   iRowCnt=0+ews.UsedRange.Cells.Rows.Count;
   iColCnt=0+ews.UsedRange.Cells.Columns.Count;
   iBgnRow=(ews.UsedRange.Cells.Row>1)?
   ews.UsedRange.Cells.Row-1:ews.UsedRange.Cells.Row;
   iBgnCol=(ews.UsedRange.Cells.Column>1)?
   ews.UsedRange.Cells.Column-1:ews.UsedRange.Cells.Column;
  
   for(i=iBgnRow;i<iRowCnt+iBgnRow;i++)
   {
   for(j=iBgnCol;j<iColCnt+iBgnCol;j++)
   {
   strText=((Excel.Range)ews.UsedRange.Cells[i,j]).Text.ToString();
   if (strText.ToUpper().IndexOf(strKeyWord.ToUpper())>=0)
   {
   MessageBox.Show("文档中包含指定的关键字!","搜索结果",MessageBoxButtons.OK);
   }
   }
   }
  }
  
    显然这种方法比第一种繁琐得多,不过这里有一个关于遍历单元格的索引很特别的地方,当工作表中的使用区域UsedRange为单行单列的时候,对UsedRange中的单元格遍历起始索引值为1,为多行多列的时候,起始索引值为0,不知这是Excel程序设计者出于什么样的考虑?



用C#实现在Word文档中搜索文本
作者: it步行者   www.ASPCool.com 时间:2006-5-18 21:34:59  

     在word应用程序中搜索和替换文本是举手之劳的事情,通过word的对象模型,我们也可以使用编程方式来实现。
  
    Word的对象模型有比较详细的帮助文档,放在Office安装程序目录,office 2003是在Program Files\Microsoft Office\OFFICE11\2052下,文档本身是为VBA提供的,在这个目录下还可以看到所有的office应用程序的VBA帮助。
  
    打开VBAWD10.CHM,看到word的对象模型,根据以往的使用经验,很容易在Document对象下找到Content属性,该属性会返回一个文档文字部分的Range对象,从这个对象中不难取到所有的文档内容,再用string的IndexOf()方法很容易达到目标。
  
  object filename=""; //要打开的文档路径
  string strKey=""; //要搜索的文本
  object MissingValue=Type.Missing;
  
  Word.Application wp=new Word.ApplicationClass();
  Word.Document wd=wp.Documents.Open(ref filename,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue);
  
  if (wd.Content.Text.IndexOf(strKey)>=0)
  {
   MessageBox.Show("文档中包含指定的关键字!","搜索结果",MessageBoxButtons.OK);
  }
  else
  {
   MessageBox.Show("文档中没有指定的关键字!","搜索结果",MessageBoxButtons.OK);
  }
  
  
    不过,这种做法是很勉强的,对小文档来说,不存在问题,对超长超大的文档来说,这样的实现方法已经暗埋bug了,而且是程序级的bug,因为正常的测试会很难发现问题,在使用中导致程序出现什么样的结果也很难量化描述。
  
    其实,在word中已经提供了可以用作搜索的对象Find,在对象模型上也比较容易找到,对应的说明是这样的:该对象代表查找操作的执行条件。Find 对象的属性和方法与“替换”对话框中的选项一致。从模型上看,Find对象是Selection的成员,从示例代码来看似乎也是Range的成员,查找Range的属性,果然如此。于是修改上面的代码:
  
  
  
  wd.Content.Find.Text=strKey;
  if (wd.Content.Find.Execute(ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue))
  {
   MessageBox.Show("文档中包含指定的关键字!","搜索结果",MessageBoxButtons.OK);
  }
  else
  {
   MessageBox.Show("文档中没有指定的关键字!","搜索结果",MessageBoxButtons.OK);
  }
  
  
  
    这样似乎也不是最好,因为我只要判断指定的文本是不是在文档中,而不需要知道它出现了几次,如果有多个要搜索的文本,难道每次都进行全文档搜索?假设我要搜索的文本包含在文档中,最好的情况是在文档开头就包含我要查找的文本,最坏的情况是在文档的最后包含要查找的文本,如果每次取一部分文档进行判断,符合条件就结束本次搜索,就可以避免每次搜索整个文档了。模型中的Paragraphs对象现在派上用场了,再修改一下代码:
  
  
  int i=0,iCount=0;
  Word.Find wfnd;
  
  if (wd.Paragraphs!=null && wd.Paragraphs.Count>0)
  {
   iCount=wd.Paragraphs.Count;
   for(i=1;i<=iCount;i++)
   {
   wfnd=wd.Paragraphs[i].Range.Find;
   wfnd.ClearFormatting();
   wfnd.Text=strKey;
   if (wfnd.Execute(ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue,ref MissingValue,
   ref MissingValue))
   {
   MessageBox.Show("文档中包含指定的关键字!","搜索结果",MessageBoxButtons.OK);
   break;
   }
   }
  }



上一篇讲到,一个Document可能会有多个Rang对象。Rang由起始和结束字符来定他的位置。
以下代码为先清空Document里的内容,再在第一行写入内容。
    // Clear out any existing information.
    Object start = Type.Missing;
    Object end = Type.Missing;
     Object unit = Type.Missing;
    Object count = Type.Missing;
    ThisDocument.Range(ref start, ref end). Delete(ref unit, ref count);

    // Set up the header information.
    start = 0;
    end = 0;
     rng = ThisDocument.Range(ref start, ref end);
     rng.InsertBefore("Xiaopai");
     rng.Font.Name = "Verdana";
     rng.Font.Size = 16;
     rng.InsertParagraphAfter();//输入回车

以下为在刚写入的内容后添加一个表格。
    object missingValue = Type.Missing;
    object location = 8; //注:若location超过已有字符的长度将会出错。
    Word.Range rng = ThisDocument.Range(ref location, ref location);
    ThisDocument.Tables.Add(rng, 3, 4, ref missingValue, ref missingValue);

以下为在刚创建的表格里添加一行
    Word.Table tbl = ThisDocument.Tables[1]; //第一个表格为1,而不是0
    Object beforeRow = Type.Missing;
    tbl.Rows.Add(ref beforeRow); //在表格的最后添加一行

填充表格内容
    tbl.Cell(1, 1).Range.Text = "shuai"; //在表格的第一行第一列填入内容。

设置单元格风格
    Word.Range rngCell;
    rngCell = tbl.Cell(1, 2).Range;
    rngCell.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
    rngCell.Font.Size = 8;
    rngCell.Font.Name = "Verdana";

当时没找到合并单元格的方法。有谁知道的共享一下哈。

参考资料:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wrcore/html/wrtskhowtocreatewordtables.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wrcore/html/wrtskhowtoaddrowscolumnstowordtables.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odc_vsto2003_ta/html/odc_VSTWordtbl.asp