谢氏工作室 - 我的精彩
我的鬼迹~~~~<br> 我的网路生活~~~<br> 我的~~~~~~~~~~~~~<br> Email:mrshelly@hotmail.com



■用户登录
用户名:
密   码:
■站内搜索
 

■最后更新


■最新评论


■存档




■我的链接

Net-Tools







■网站排名情况


■水盟最新发表
共2页 第一页 上一页 1 2
   晕哦,申请这么长的EMAIL。还要我备份    |   阅读全文   |   评论(4)  |  引用(trackback1)  
shelly 发表于  2004-04-28 09:25:56


   JS Check 值操作。/:D 留个范例在这里。    |   阅读全文   |   评论(0)  |  引用(trackback1)  

<form name="myform">
<input type="checkbox" name="price" value=1000 onclick=countot()>1000<BR>
<input type="checkbox" name="price" value=2000 onclick=countot()>2000<BR>
<input type="checkbox" name="price" value=3000 onclick=countot()>3000<BR>
<input type="checkbox" name="price" value=4000 onclick=countot()>4000<BR>
<input type="text" name="labelForPrice" value=0>
</form>
<script>
function countot()
{
     var objSrc=document.myform.price;
     var totPrice=0;
     for(var i=0;i<objSrc.length;i++)
     {
            if(objSrc[i].checked == true)
                   totPrice+=parseInt(objSrc[i].value);

     }
     document.myform.labelForPrice.value=totPrice;
}
</script>

 

1000
2000
3000
4000
shelly 发表于  2004-04-27 19:11:29


   最近想接触一下JSP。    |   阅读全文   |   评论(0)  |  引用(trackback1)  

/:~ 单就看了看开发环境的安装就头大。晕死。不如 PHP 的好。就几个DLL文件链到APACHE就OK了~~~

唉~~~~~~  ~~~

shelly 发表于  2004-04-23 14:07:09


   Google 搜索技巧    |   阅读全文   |   评论(0)  |  引用(trackback0)  

google搜索技巧

搜索技巧

一,GOOGLE简介

Google是一个搜索引擎,由两个斯坦福大学博士生Larry Page与Sergey Brin于1998年9月发明,Google Inc. 于1999年创立。

二,GOOGLE特色

GOOGLE支持多达132种语言,包括简体中文和繁体中文;
GOOGLE网站只提供搜索引擎功能,没有花里胡哨的累赘;
GOOGLE速度极快,据说有8000多台服务器,200多条T3级宽带;

GOOGLE的专利网页级别技术PageRank能够提供高命中率的搜索结果;
GOOGLE的搜索结果摘录查询网页的部分具体内容,而不仅仅是网站简介;
GOOGLE智能化的“手气不错”功能,提供可能最符合要求的网站;
GOOGLE的“网页快照”功能,能从GOOGLE服务器里直接取出缓存的网页。

三,基本搜索:+,-,OR

GOOGLE无需用明文的“+”来表示逻辑“与”操作,只要空格就可以了。

示例:搜索所有包含关键词“易筋经”和“吸星大法”的中文网页
搜索:“易筋经 吸星大法”
结果:已搜索有关易筋经 吸星大法的中文(简体)网页。共约有726项查询结果,这是第1-10项。搜索用时0.13秒。

注意:文章中搜索语法外面的引号仅起引用作用,不能带入搜索栏内。

GOOGLE用减号“-”表示逻辑“非”操作。

示例:搜索所有包含“易筋经”而不含“吸星大法”的中文网页
搜索:“易筋经 -吸星大法”
结果:已搜索有关易筋经 -吸星大法的中文(简体)网页。共约有5,440项查询结果,这是第1-10项。搜索用时0.13秒。

注意:这里的“+”和“-”号,是英文字符,而不是中文字符的“+”和“-”。此外,操作符与作用的关键字之间,不能有空格。比如“易筋经 - 吸星大法”,搜索引擎将视为逻辑“与”操作,中间的“-”被忽略。

GOOGLE用大写的“OR”表示逻辑“或”操作。但是,关键字为中文的或查询似乎还有BUG,无法得到正确的查询结果。

示例:搜索包含布兰妮“Britney”或者披头士“Beatles”、或者两者均有的中文网页。
搜索:“britney OR beatles”
结果:已搜索有关britney OR beatles的中文(简体)网页。共约有14,600项查询结果,这是第1-10项。搜索用时0.08秒。
搜索:“布兰妮 OR 披头士”
结果:找不到和您的查询-布兰妮 OR 披头士-相符的网页。

注意:小写的“or”,在查询的时候将被忽略;这样上述的操作实际上变成了一次“与”查询。

“+”和“-”的作用有的时候是相同的,都是为了缩小搜索结果的范围,提高查询结果命中率。

例:查阅天龙八部具体是哪八部。

分析:如果光用“天龙八部”做关键字,搜索结果有26,500项,而且排前列的主要与金庸的小说《天龙八部》相关,很难找到所需要的资讯。可以用两个方法减少无关结果。

1,如果你知道八部中的某一部,比如阿修罗,增加“阿修罗”关键字,搜索结果就只有995项,可以直接找到全部八部,“天龙八部 阿修罗”。

2,如果你不知道八部中的任何一部,但知道这与佛教相关,可以排除与金庸小说相关的记录,查询结果为1,010项,可以迅速找到需要的资料,“天龙八部 佛教 -金庸”。

四,辅助搜索:通配符、大小写、句子、忽略字符以及强制搜索

GOOGLE不支持通配符,如“*”、“?”等,只能做精确查询,关键字后面的“*”或者“?”会被忽略掉。

GOOGLE对英文字符大小写不敏感,“GOD”和“god”搜索的结果是一样的。

GOOGLE的关键字可以是词组(中间没有空格),也可以是句子(中间有空格),但是,用句子做关键字,必须加英文引号。

示例:搜索包含“long, long ago”字串的页面。
搜索:“"long, long ago"”
结果:已向英特网搜索"long, long ago". 共约有28,300项查询结果,这是第1-10项。搜索用时0.28秒。

注意:和搜索英文关键字串不同的是,GOOGLE对中文字串的处理并不十分完善。比如,搜索“"啊,我的太阳"”,我们希望结果中含有这个句子,事实并非如此。查询的很多结果,“啊”、“我的”、“太阳”等词语是完全分开的,但又不是“啊 我的 太阳”这样的与查询。显然,GOOGLE对中文的支持尚有欠缺之处。

GOOGLE对一些网路上出现频率极高的词(主要是英文单词),如“i”、“com”,以及一些符号如“*”、“.”等,作忽略处理,如果用户必须要求关键字中包含这些常用词,就要用强制语法“+”。

示例:搜索包含“Who am I ?”的网页。如果用“"who am i ?"”,“Who”、“I”、“?”会被省略掉,搜索将只用“am”作关键字,所以应该用强制搜索。
搜索:“"+who +am +i"”
结果:已向英特网搜索"+who +am +i". 共约有362,000项查询结果,这是第1-10项。搜索用时0.30秒。

注意:英文符号(如问号,句号,逗号等)无法成为搜索关键字,加强制也不行。

五,高级搜索:site,link,inurl,allinurl,intitle,allintitle

“site”表示搜索结果局限于某个具体网站或者网站频道,如“sina.com.cn”、“edu.sina.com.cn”,或者是某个域名,如“com.cn”、“com”等等。如果是要排除某网站或者域名范围内的页面,只需用“-网站/域名”。

示例:搜索中文教育科研网站(edu.cn)上所有包含“金庸”的页面。
搜索:“金庸 site:edu.cn”
结果:已搜索有关金庸 site:edu.cn的中文(简体)网页。共约有2,680项查询结果,这是第1-10项 。搜索用时0.31秒。

示例:搜索包含“金庸”和“古龙”的中文新浪网站页面,
搜索:“金庸 古龙 site:sina.com.cn”
结果:已在sina.com.cn搜索有关金庸 古龙的中文(简体)网页。共约有869项查询结果,这是第1-10项。搜索用时0.34秒。

注意:site后的冒号为英文字符,而且,冒号后不能有空格,否则,“site:”将被作为一个搜索的关键字。此外,网站域名不能有“http”以及“www”前缀,也不能有任何“/”的目录后缀;网站频道则只局限于“频道名.域名”方式,而不能是“域名/频道名”方式。诸如“金庸 site:edu.sina.com.cn/1/”的语法是错误的。

“link”语法返回所有链接到某个URL地址的网页。

示例:搜索所有含指向google吧“www.google8.net”链接的网页。
搜索:“link:www.google8.net
结果:搜索有链接到www.google8.net的网页。共约有55项查询结果,这是第1-10项。搜索用时0.13秒。

注意:“link”不能与其他语法相混合操作,所以“link:”后面即使有空格,也将被GOOGLE忽略。

inurl语法返回的网页链接中包含第一个关键字,后面的关键字则出现在链接中或者网页文档中。有很多网站把某一类具有相同属性的资源名称显示在目录名称或者网页名称中,比如“MP3”、“GALLARY”等,于是,就可以用INURL语法找到这些相关资源链接,然后,用第二个关键词确定是否有某项具体资料。INURL语法和基本搜索语法的最大区别在于,前者通常能提供非常精确的专题资料。

示例:查找MIDI曲“沧海一声笑”。
搜索:“inurl:midi 沧海一声笑”
结果:已搜索有关inurl:midi 沧海一声笑的中文(简体)网页。共约有14项查询结果,这是第1-10项。搜索用时0.01秒。

示例:查找微软网站上关于windows2000的安全课题资料。
搜索:“inurl:security windows2000 site:microsoft.com”
结果:已在microsoft.com内搜索有关 inurl:security windows2000的网页。共约有198项查询结果,这是第1-10项。搜索用时0.37秒。

注意:“inurl:”后面不能有空格,GOOGLE也不对URL符号如“/”进行搜索。GOOGLE对“cgi-bin/phf”中的“/”当成空格处理。

allinurl语法返回的网页的链接中包含所有查询关键字。这个查询的对象只集中于网页的链接字符串。

示例:查找可能具有PHF安全漏洞的公司网站。通常这些网站的CGI-BIN目录中含有PHF脚本程序(这个脚本是不安全的),表现在链接中就是“域名/cgi-bin/phf”。
语法:“allinurl:"cgi-bin" phf +com”
搜索:已向英特网搜索allinurl:"cgi-bin" phf +com. 共约有40项查询结果,这是第1-10项。搜索用时0.06秒。

allintitle和intitle的用法类似于上面的allinurl和inurl,只是后者对URL进行查询,而前者对网页的标题栏进行查询。网页标题,就是HTML标记语言title中之间的部分。网页设计的一个原则就是要把主页的关键内容用简洁的语言表示在网页标题中。因此,只查询标题栏,通常也可以找到高相关率的专题页面。

示例:查找日本明星藤原纪香的照片集。
搜索:“intitle:藤原纪香 写真”
结果:已搜索有关intitle:藤原纪香 写真的中文(简体)网页。共约有284项查询结果,这是第1-10项。搜索用时0.03秒。

GOOGLE的罕用高级搜索语法:related,cache,info

related用来搜索结构内容方面相似的网页。例:搜索所有与中文新浪网主页相似的页面(如网易首页,搜狐首页,中华网首页等),“related:www.sina.com.cn/index.shtml”。

cache用来搜索GOOGLE服务器上某页面的缓存,这个功能同“网页快照”,通常用于查找某些已经被删除的死链接网页,相当于使用普通搜索结果页面中的“网页快照”功能。

info用来显示与某链接相关的一系列搜索,提供cache、link、related和完全包含该链接的网页的功能。

示例:查找和GOOGLE吧相关的一些资讯。
搜索:“info:www.google8.net”
结果:有关www.google8.net的网页信息。
google8.net|google的绿色通道|
→Google吧 搜索引擎的学习、记录、思考、应用。[blog
摘要:搜索引擎、google排名、网站推广、网络营销], ...


Google 提供这个网址的信息:


  • 查看Google网页快照里www.google8.net的存档
  • 寻找和www.google8.net类似的网页
  • 寻找网页有链接到www.google8.net
  • 寻找网页包含有www.google8.net



六,其他重要功能

目录服务

如果不想搜索网页,而是想寻找某些专题网站,可以访问GOOGLE的分类目录“http://directory.google.com/”,中文目录是“http://directory.google.com/Top/World/Chinese_Simplified/”。不过由于GOOGLE的目录由Dmoz志愿者服务,而GOOGLE在国内名气相对比较小,因此中文目录下收录站点很少。

工具条

为了方便搜索者,GOOGLE提供了工具条,集成于浏览器中,用户无需打开GOOGLE主页就可以在工具条内输入关键字进行搜索。此外,工具条还提供了其他许多功能,如显示页面PageRank等。最方便的一点在于用户可以快捷的在GOOGLE主页、目录服务、新闻组搜索、高级搜索和搜索设定之间切换。欲安装GOOGLE的工具条,可以访问“http://toolbar.google.com/”,按页面提示可以自动下载并安装。

新闻组(USENET)搜索

新闻组中有大量的有价值信息,DEJA一直是新闻组搜索引擎中的佼佼者。2001年2月份,GOOGLE将DEJA收购并提供了所有DEJA的功能。现在,除了搜索之外,GOOGLE还支持新闻组的WEB方式浏览和张贴功能。

输入“http://groups.google.com/”后,便进入GOOGLE新闻组界面。可惜现在还没有中文界面。因为新闻组中的帖子实在是多,所以我点击“Advaced Groups Search”进入高级搜索界面http://groups.google.com/advanced_group_search。新闻组高级搜索界面提供对关键字、新闻组、主题、作者、帖子序号、语言和发布日期的条件搜索。其中作者项指作者发帖所用的唯一识别号电子信箱。比如要在alt.chinese.text内搜索著名老牌网络写手图雅的帖子,可以用下列指令“group:alt.chinese.text author:tuya@ccmail.uoregon.edu”。不过一般而言,我更推荐使用图形搜索界面,方便而且直观。

搜索结果翻译

曾经为那些你不懂的法文、西班牙文页面烦恼么?现在,GOOGLE支持一项搜索结果翻译功能,可以把非英文的搜索结果翻译成英文!!虽然目前只支持有限的拉丁语、法语、西班牙语、德语和葡萄牙文,但是我不得不承认,这是个伟大的改进。

不过,目前只能在英文状态GOOGLE下实现这个功能。进入GOOGLE的设置页面,http://www.google.com/preferences,有一个“BETA: Enable translation of search results into your interface language. ”的选项,把它选中,就OK了。

搜索结果过滤

网络上的成人内容浩如烟海,而且很多站点具有欺骗或者其他不良企图,浏览者很容易掉入其中的陷阱。为此,GOOGLE新设立了成人内容过滤功能,见GOOGLE的设置页面,http://www.google.com/preferences,最底下有一个选项SafeSearch Filtering。不过,中文状态下的GOOGLE尚没有这个功能。

PDF文档搜索

我对GOOGLE尤其欣赏的一点就是它提供对PDF文档内文的检索。目前GOOGLE检索的PDF文档大约有2500万左右。这真是太美妙了。PDF是ADOBE公司开发的电子文档格式,现在已经成为互联网的电子化出版标准。PDF文档通常是一些图文并茂的综合性文档,提供的资讯一般比较集中全面。

示例:搜索关于电子商务(ECOMMERCE)的PDF文档。
搜索:“inurl:pdf ecommerce”
结果:已向英特网搜索inurl:pdf ecommerce. 共约有19,200项查询结果,这是第1-10项。搜索用时0.11秒。

下面是某项搜索结果:

[PDF] www.usi.net/pdf/outsoucing-ecommerce.pdf
Outsourcing Electronic Commerce Business Case White Paper By: John P. Sahlin, Product
Marketing Professonial (PMP) Implementation Manager, Web Engineering ...
一般文字档 - 类似网页

可以看到,GOOGLE在PDF档前加上了[PDF]的标记,而且,GOOGLE把PDF文件转换成了文字档,点击“一般文字档”,可以粗略的查看该PDF文档的大致内容。当然,PDF原有的图片以及格式是没有了。

图像文档搜索

GOOGLE提供了Internet上图像文件的搜索功能!!目前该功能尚在B测试阶段,但已经非常好用。访问地址是“images.google.com”。你可以在关键字栏位内输入描述图像内容的关键字,如“britney spears”,也可以输入描述图像质量或者其他属性的关键字,如“high quality”。

GOOGLE给出的搜索结果具有一个直观的缩略图(THUMBNAIL),以及对该缩略图的简单描述,如图像文件名称,以及大小等。点击缩略图,页面分成两祯,上祯是图像之缩略图,以及页面链接,而下祯,则是该图像所处的页面。屏幕右上角有一个“Remove Frame”的按钮,可以把框架页面迅速切换到单祯的结果页面,非常方便。GOOGLE还提供了对成人内容图像的限制功能,可以让搜索者免受不必要的骚扰。

不过,非常遗憾的是,图像搜索功能还不支持中文。

七,搜索技巧杂谈

关键词的选择在搜索中起到决定性的作用,所有搜索技巧中,关键词选择是最基本也是最有效的。

例一:查找《镜花缘》一书中淑士国酒保的酸话原文。

分析:如果按照一般的思路,找某部小说中的具体段落,就需要用搜索引擎先找到这本书,然后再翻到该段落。这样做当然可以,但是效率很低。如果了解目标信息的构成,用一些目标信息所特有的字词,可以非常迅速的查到所需要的资料。也就是说,高效率的搜索关键字不一定就是目标信息的主题。在上面的例子中,酒保谈到酒的浓淡与贵贱的关系时,之乎者也横飞。因此,可以用特定的词语一下子找到目标资料。

搜索:“酒 贵 贱 之”,OK,找到的第一条信息就是镜花缘的这一段落:“先生听者:今以酒醋论之,酒价贱之,醋价贵之。因何贱之?为甚贵之?真所分之,在其味之。酒昧淡之,故而贱之;醋味厚之,所以贵之。...”

以上的关键字选择技巧可以谓之“特定词法”。

例二:“黄花闺女”一词中“黄花”是什么意思。

分析:“黄花闺女”是一个约定的俗语,如果只用“黄花闺女 黄花”做关键词,搜索结果将浩如烟海,没什么价值,因此必须要加更多的关键词,约束搜索结果。选择什么关键词好呢?备选的有“意思”、“含义”、“来历”、“由来”、“典故”、“出典”、“渊源”等,可以猜到的是,类似的资料,应该包含在一些民俗介绍性的文字里,所以用诸如“来历”、“由来”、“出典”等词汇的概率更高一些。

搜索:“黄花闺女 黄花 由来”,查到“黄花”原来出典于《太平御览》,与南朝的寿阳公主相关。如果想获得第一手资料,那就可以用“太平御览 寿阳公主”做搜索了。

以上的关键字选择技巧可以谓之“近义词法”。

例三:刘德华同志的胸围是多少。

分析:首先声明,这是某个MM要我做的搜索,我把它作为搜索案例而已,没其他的意思。非常直接的搜索是,“刘德华 胸围”,但事实上,这么搜索出来的结果,尽是一些诸如“刘德华取笑莫文蔚胸围太小”之类的八卦新闻,无法快速得到所需要的资料。可以想到的是,需要的资料应该包含在刘德华的全面介绍性文字中,除了胸围,应该还包括他的身高,体重,生日等一系列相关信息。OK,这样就可以进一步的增加其他约束性关键词以缩小搜索范围。

搜索:“刘德华 胸围 身高”,没有料到的情况发生了,网上炙手可热的痞子蔡《第一次亲密接触》里居然含有这样关键字,阿泰“改编自刘德华《忘情水》的变态歪歌”、“用身高体重三围和生日来加以编号”。好办,把这部小说去掉,“刘德华 胸围 身高 -阿泰”,OK,结果出来了,华仔胸围84cm。说明一下,为什么用“阿泰”而不用“第一次亲密接触”呢?这是因为小说的名字被转载的时候可能有变动,但里面角色的名字是不会变的。

以上的关键字选择技巧可以谓之“相关词法”。

其他常用搜索个案

例一:找人

分析:一个人在网上揭示的资料通常有:姓名,网名,性别,年龄,毕业学校,工作单位,外号,住址,电话,信箱,BP,手机号码,ICQ号,OICQ号等等。所以,如果你要了解一下你多年没见过的同学,那不妨用上述信息做关键字进行查询,也许会有大的收获。

例二:找软件

分析一:最简单的搜索当然就是直接以软件名称以及版本号为关键字查询。但是,仅仅有软件名称和目标网站,显然还不行,因为搜索到的可能是软件的相关新闻。应该再增加一个关键字。考虑到下载页面上常有“点击此处下载”或者“download”的提示语,因此,可以增加“下载”或者“download”为关键字。
搜索:“winzip 8.0 下载”
结果:已搜索有关winzip 8.0 下载的中文(简体)网页。共约有6,670项查询结果,这是第1-10项。搜索用时0.22秒。

分析二:很多网站设有专门的下载目录,而且就命名为“download”,因此,可以用INURL语法直接搜索这些下载目录。
搜索:“winzip 8.0 inurl:download”
结果:已搜索有关winzip 8.0 inurl:download的中文(简体)网页。共约有358项查询结果,这是第1-10项。搜索用时0.44秒。

在互联网上随意的下载软件是不安全的,因为供下载的软件有可能带有病毒或者捆绑了木马,所以,对下载网站作一个限定,是一个稳妥的思路。可以用SITE语法达到这个目的。

共享软件下载完之后,使用的时候,软件总跳出警示框,或者软件的功能受到一定限制。由于中国的网民多是穷棒子,所以应该再找一个注册码。找注册码,除了软件的名称和版本号外,还需要有诸如“serial number”、“sn”、“序列号”等关键字。现在,来搜索一下winzip8.0的注册码。
搜索:“winzip 8.0 sn”
结果:已向英特网搜索winzip 8.0 sn. 共约有777项查询结果,这是第1-10项。搜索用时0.30秒。

例三:找图片

除了GOOGLE提供的专门图片搜索功能,还可以组合使用一些搜索语法,达到图片搜索之目的。

分析一:专门的图片集合,提供图片的网站通常会把图片放在某个专门目录下,如“gallary”、“album”、“photo”、“image”等。这样就可以使用INURL语法迅速找到这类目录。现在,试着找找小甜甜布兰妮的照片集。
搜索:“"britney spears" inurl:photo”
结果:已向英特网搜索"britney spears" inurl:photo. 共约有2,720项查询结果,这是第1-10项。搜索用时0.23秒。

分析二:提供图片集合的网页,在标题栏内通常会注明,这是谁谁的图片集合。于是就可以用INTITLE语法找到这类网页。
搜索:“intitle:"britney spears" picture”
结果:已向英特网搜索intitle:"britney spears" picture. 共约有317项查询结果,这是第1-10项。搜索用时0.40秒。

分析三:明星的FANS通常会申请免费个人主页来存放他们偶像的靓照。于是用SITE语法指定某免费主页提供站点,是个迅速找到图片的好办法。
搜索:“"britney spears" site:geocities.com”
结果:已在geocities.com内搜索有关"britney spears"的网页。共约有5,020项查询结果,这是第1-10项。搜索用时0.47秒。

例四:找MP3

分析一:提供MP3的网站,通常会建立一个叫做MP3的目录,目录底下分门别类的存放各种MP3乐曲。所以,可以用INURL语法迅速找到这类目录。现在用这个办法找找老歌“say you say me”。
搜索:“"say you say me" inurl:mp3”
结果:已向英特网搜索inurl:mp3 "say you say me". 共约有155项查询结果,这是第1-10项。搜索用时0.17秒。

分析二:也可以通过网页标题,找到这类提供MP3的网页。
搜索:“"say you say me" intitle:mp3”
结果:已向英特网搜索"say you say me" intitle:mp3. 共约有178项查询结果,这是第1-10项。搜索用时0.73秒。

当然,如果你知道某个网站的下载速度快,而且乐曲全,就可以用SITE语法先到该网站上看看有没有目标乐曲。

例五:找书

分析一:对我而言,常访问的电子图书馆类网站就那么几个,比如文艺类的“www.shuku.net”。于是可以用SITE语法很简单的找到某本书(如果该网站上有的话)。比如,“旧唐书 site:shuku.net”,就可以马上找到该书。如果没有,通常别的网站上也很难找到。因此,找书的关键,是你了解一大批著名的图书馆网站。

分析二:我上面介绍的第一项关键字选择技巧特定词法,对于迅速找到某书或者文章也是极其有用的,当然,这得建立在你已经读过该书,对书的内容有印象的基础上。比如如果了解堂吉诃德一书战风车的大致内容,就可以用“吉诃德 风车 桑乔”迅速找到该书。

九,GOOGLE搜索FAQ

Q:如何全面的了解google.com?
A:查看网站相关页面“http://www.google.com/about.html”。

Q:如何切换google.com的初始语言界面?
A:点击搜索栏右边的“使用偏好”(Preferences),选择“界面语言”(Interface Language)中你期望的语言,点击最下面的“设定使用偏好”(Save Preferences)按钮。需要提醒的是,GOOGLE用cookie记录这个偏好,所以如果你把浏览器的cookie功能关掉,就无法进行设定。

Q:如何设定每页搜索结果显示数量?
A:同上,进入使用偏好,在该页的“查看结果”(Number of Results)选择显示结果数,数目越大,显示结果需要的时间越长,默认是10项。

Q:搜索到的链接无法打开怎么办?
A:链接无法打开的原因很多,比如网站当机,或者ISP过滤等,可以点击GOOGLE的“网页快照”查看在GOOGLE服务器上的网页缓存。

Q:打开搜索结果的链接,可是该页面太大,很难找到一下子找到目的资料怎么办?
A:直接打开“网页快照”,GOOGLE会把关键词用不同颜色标记出来,很容易找到。


shelly 发表于  2004-04-17 14:30:03


   惠普 激打 HP1150 打印机软故障排除一例。    |   阅读全文   |   评论(0)  |  引用(trackback0)  

本来排除这故障费了些周折,搞的我有些头大,差点坏了我名声(/tx)。

序:本就为仓管系统服务器重启问题(后查得是电源质量问题)搞的焦头烂额的。接到新(软起动)公司的求救电话。说AutoCAD 2000 不能打印。晕晕,怎么可能呀?      猛然想起,上次给装激打时,只是打印了测试页。嗯,可能存在软件兼容性问题。

现象:火速(/:D 没有啦)赶到新公司,发觉该打印机,点击打印时,有一出错提示。没有仔细看,就点确定,预览可以看到,打印时,吐出一张空白纸。 用记事本及Word 打印正常。

解决:

1 既然这样,WORD正常,记事本正常。呵呵,那应该是 AutoCAD2000 的问题了吧。嗯,俺的拿手好戏。

  1.a  删除原有的AutoCAD2000程序,并删除安装目录。

  1.b  清理注册表 。

2 安装AutoCAD2000 一切正常。装好加密狗后,再打印。晕晕,故障依旧。

  然后,头脑一热,就进AutoCAD2000的设置里进行了关于打印的N项设置的设置试验。晕晕~~~  未果~~~

......

3 最后:

  把 AutoCAD2000 的 Drv 目录下的 hpgdi6.drv 文件备份为  hpgdi6_bak.drv。并把 原 gdi6.drv COPY一份并改名为 hpgdi6.drv 。故障得以解决。晕晕

结论:该型号打印机估计出厂没有进行驱动大型软件的驱动测试。唉唉~~~  真搞不懂 惠普 还会搞这些东东出来~~~ 

shelly 发表于  2004-04-15 20:40:08


   部分摘录HTTP状态码。    |   阅读全文   |   评论(0)  |  引用(trackback1)  

七、HTTP应答状态 
 作 者 : 仙人掌工作室
  
  
     7.1 状态代码概述
  
     Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答头,一个空行,内容文档。下面是一个最简单的应答:
  HTTP/1.1 200 OK
  Content-Type: text/plain
  
  Hello World
  
  
  
  
     状态行包含HTTP版本、状态代码、与状态代码对应的简短说明信息。在大多数情况下,除了Content-Type之外的所有应答头都是可选的。但Content-Type是必需的,它描述的是后面文档的MIME类型。虽然大多数应答都包含一个文档,但也有一些不包含,例如对HEAD请求的应答永远不会附带文档。有许多状态代码实际上用来标识一次失败的请求,这些应答也不包含文档(或只包含一个简短的错误信息说明)。
  
     Servlet可以利用状态代码来实现许多功能。例如,可以把用户重定向到另一个网站;可以指示出后面的文档是图片、PDF文件或HTML文件;可以告诉用户必须提供密码才能访问文档;等等。这一部分我们将具体讨论各种状态代码的含义以及利用这些代码可以做些什么。
  
     7.2 设置状态代码
  
     如前所述,HTTP应答状态行包含HTTP版本、状态代码和对应的状态信息。由于状态信息直接和状态代码相关,而HTTP版本又由服务器确定,因此需要Servlet设置的只有一个状态代码。
  
     Servlet设置状态代码一般使用HttpServletResponse的setStatus方法。setStatus方法的参数是一个整数(即状态代码),不过为了使得代码具有更好的可读性,可以用HttpServletResponse中定义的常量来避免直接使用整数。这些常量根据HTTP 1.1中的标准状态信息命名,所有的名字都加上了SC前缀(Status Code的缩写)并大写,同时把空格转换成了下划线。也就是说,与状态代码404对应的状态信息是“Not Found”,则HttpServletResponse中的对应常量名字为SC_NOT_FOUND。但有两个例外:和状态代码302对应的常量根据HTTP 1.0命名,而307没有对应的常量。
  
     设置状态代码并非总是意味着不要再返回文档。例如,虽然大多数服务器返回404应答时会输出简单的“File Not Found”信息,但Servlet也可以定制这个应答。不过,定制应答时应当在通过PrintWriter发送任何内容之前先调用response.setStatus。
  
     虽然设置状态代码一般使用的是response.setStauts(int)方法,但为了简单起见,HttpServletResponse为两种常见的情形提供了专用方法:sendError方法生成一个404应答,同时生成一个简短的HTML错误信息文档;sendRedirect方法生成一个302应答,同时在Location头中指示新文档的URL。
  
     7.3 HTTP 1.1状态代码及其含义
  
     下表显示了常见的HTTP 1.1状态代码以及它们对应的状态信息和含义。
  
     应当谨慎地使用那些只有HTTP 1.1支持的状态代码,因为许多浏览器还只能够支持HTTP 1.0。如果你使用了HTTP 1.1特有的状态代码,最好能够检查一下请求的HTTP版本号(通过HttpServletRequest的getProtocol方法)。 状态代码 状态信息 含义
  100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)
  101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)
  200 OK 一切正常,对GET和POST请求的应答文档跟在后面。如果不用setStatus设置状态代码,Servlet默认使用202状态代码。
  201 Created 服务器已经创建了文档,Location头给出了它的URL。
  202 Accepted 已经接受请求,但处理尚未完成。
  203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。
  204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
  205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。
  206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。
  300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。
  301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
  302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”,而HttpServletResponse中相应的常量是SC_MOVED_TEMPORARILY,而不是SC_FOUND。
  出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。为此,Servlet提供了一个专用的方法,即sendRedirect。使用response.sendRedirect(url)比使用response.setStatus(response.SC_MOVED_TEMPORARILY)和response.setHeader("Location",url)更好。这是因为:
  
  首先,代码更加简洁。
  第二,使用sendRedirect,Servlet会自动构造一个包含新链接的页面(用于那些不能自动重定向的老式浏览器)。
  最后,sendRedirect能够处理相对URL,自动把它们转换成绝对URL。
  注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器返回301,有的则返回302。
  
  严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。
  
  303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。
  304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
  305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。
  307 Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。
  注意,HttpServletResponse中没有为该状态代码提供相应的常量。(HTTP 1.1新)
  
  400 Bad Request 请求出现语法错误。
  401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。
  403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
  404 Not Found 无法找到指定位置的资源。这也是一个常用的应答,HttpServletResponse专门提供了相应的方法:sendError(message)。
  405 Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新)
  406 Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。
  407 Proxy Authentication Required 类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)
  408 Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)
  409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)
  410 Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)
  411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)
  412 Precondition Failed 请求头中指定的一些前提条件失败(HTTP 1.1新)。
  413 Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。
  414 Request URI Too Long URI太长(HTTP 1.1新)。
  416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)
  500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。
  501 Not Implemented 服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。
  502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
  503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。
  504 Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)
  505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)

shelly 发表于  2004-04-15 15:15:17


   今天发现一个生活常理    |   阅读全文   |   评论(4)  |  引用(trackback1)  

茶泡久了,就会淡!

呵呵,品茶,我想 90% 感受源于心情~~  所以,泡淡的茶一样可以让人体会到它的清香哦。 :D 

PS:泡过的茶还可以晾干,用处多多,好处多多。

shelly 发表于  2004-04-14 10:39:59


   申请到本站顶级域名。/:D 虽然有广告。    |   阅读全文   |   评论(4)  |  引用(trackback1)  

http://www.mrshelly.tk/

呵呵,不错。就是不知道这个顶级域名能有效多久?

shelly 发表于  2004-04-13 07:33:14


   今天发觉GOOGLE收录本站。呵呵~~~    |   阅读全文   |   评论(7)  |  引用(trackback1)  
shelly 发表于  2004-04-12 11:00:49


   查看被锁定源代码的网页~~~    |   阅读全文   |   评论(0)  |  引用(trackback1)  
把网址复制到下面再点击查看源文件即可~~~ FOR 水盟圣诞老人

  看源文件  清除网址
shelly 发表于  2004-04-10 08:04:51


   关于Serv-U 的ODBC 帐户管理    |   阅读全文   |   评论(1)  |  引用(trackback1)  

昨天收到 水盟蓝雨 发给我的支持ODBC的 Serv-U 回家试了一下。呵呵,主要是试一下ODBC帐户管理的功能。

呵呵,试验成功。

这里简要说明一下要点。

1 按 Serv-U 的帮助文档 设计好Access 数据库。呵呵,如果你愿意,用Excel也成。关键是 可以提供ODBC连接就成。  Serv-U 帮助文档里用的是 MySQL 数据库的连接。呵呵,不错。我喜欢。 不过,出租房电脑里没有安装 MyODBC 也就做罢了。就更选用比较适合 普通用户 的Access 数据库做为帐号数据库

2 安装 Serv-U 5.0 新建域时选择 帐号存储位置为ODBC。

3 修改新建域的属性。有一个 ODBC 选项卡多出来。呵呵,就是它了。

4 我原以为,Serv-U 所支持的帐号数据库需要有特定的表名,及表结构等。 其实不然。(因为这个想法,让我走了不少弯路哦) 

    最初,我把表结构 设置的同帮助文档的字段名呀,表名呀什么的。 在ODBC里只设置了ODBC 系统DSN 名。(不要学这里哦),最后才发现,不但要设置系统DSN,还要设置对应DSN 的用户表名,及表结构里对应的字段名。呵呵,重新设置后成功。

5 爽,这样就不用我以前替PC做的那个 Serv-U INI文件管理类 (php 的,做的比较粗糙,不敢登上来 /hx) 来用 ASP或PHP等添加账号了。 以后就可以直接用ASP,PHP等连接ODBC,就可以动态更新帐号。呵呵,高兴中~~~~

   不过,数据库更新后,Serv-U 帐号是不是立马就生效,还有待今晚 验证一下。

PS:如果你操作INI文件,要让修改后的INI文件立即生效,得在 [GLOBAL] 段里添加 ReloadSettings=1, 呵呵,这点可是先前找了好久才找到的。这里共享给大家,以免大家同我一样花 大量的时间在这里。 /:D 注册表存储用户账号的方式没有研究透(我想应该不算很难,主要莫有时间搞了),有知道的兄弟姐妹,不要忘记共享哦。谢谢~~~

shelly 发表于  2004-04-08 08:27:04


   JS 窗口操作经典    |   阅读全文   |   评论(0)  |  引用(trackback1)  
转自CSDN 有修改.
就是这段
win.document.write("<SCRI");
win.document.write("PT>window.open('','a','');</SCR");
win.document.write("IPT>");
:D 发现把 <SCRIPT 分开,就不会出错了.晕晕~~~~

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>子父窗口的操作</title>
</head>
<body>
<script>
var win=null;
function op(){
win=window.open("about:blank","win","width=200,height=200");
win.document.write("<SCRI");
win.document.write("PT>window.open('','a','');</SCR");
win.document.write("IPT>");
win.document.write("<input type='button' value='关闭父窗口' onclick='window.opener.opener=null;window.opener.close()'>");
win.document.write("<input type='button' value='刷新你窗口' onclick='window.opener.location.reload()'>");
}
</script>
<input onclick="op()" value="打开窗口" type="button"><input type="button" value="最小化" onclick="if(win&&win.open&&!win.closed){win.resizeTo(0,0);win.moveTo(0,window.screen.width);}else alert('还没有打开窗口或已经关闭')">
<input type="button" value="最大化" onclick="if(win&&win.open&&!win.closed){win.moveTo(-4,-4);win.resizeTo(screen.availWidth+8,screen.availHeight+8);}else alert('还没有打开窗口或已经关闭');">
<input type=button value="关闭子窗口" onclick="if(win&&win.open&&!win.closed){win.opener=null;win.close()}else alert('还没有打开窗口或已关闭')">
<input type=button value="刷新子窗口" onclick="if(win&&win.open&&!win.closed){win.location.reload();win.focus()}else alert('窗口还没有打开或已关闭')">
<input type="button" value="看子窗口的大小" onclick="if(win&&win.open&&!win.closed){alert(win.document.body.clientWidth+'*'+win.document.body.clientHeight);win.focus();}else{alert('还没有打开窗口或者已关闭')};">
</body>
</html>

shelly 发表于  2004-04-06 10:18:09


   Yahoo Mail POP3服务BUG    |   阅读全文   |   评论(2)  |  引用(trackback1)  

今晨帮水盟MM cynthir “Yahoo 邮件FOXMAIL接收设置”的问题时。发现 Yahoo 中文站全球站的帐户是相同的。所以,就把 Yahoo 全球站去看了看帮助。发现 Yahoo 全球站的 关于 Pop3 Smtp 服务地址对于 中文站用户同样适用。

哈哈,这么大网站,这么大BUG,中文站还好意思在上面注明“目前不提供POP3服务”   晕晕~~~~~~

shelly 发表于  2004-04-04 08:41:36


   将Access窗体存为文本文件.(Access 未公开方法)    |   阅读全文   |   评论(0)  |  引用(trackback0)  
From : AccessQQ.com
     应黄海之邀,突然要写点自己的东西,一下子仿佛不知道写些什么了,研究ACCESS这么多年,感觉都是在做企业应用,并没有什么高深的技巧,也没有属于自己的技巧,只好绞尽脑汁,榨点东西出来,希望能对得起黄海和大家:)
     在ACCESS中APPLICATION对象有两个未公开的方法,其中一个是SaveAsText, 另一个是LoadFromText.我记得是刚学ACCESS不久,当时在研究FMS一个分析工具时,跟踪发现它总会产生一些临时文件,对这些临时文件分析,发现它与VB里的窗体文件差不多的格式,所以估计微软可以将ACCESS的窗体转换为文本格式,并提供一种逆相转换的方法。所以发现了深厚的兴趣,后来就找到这两个方法。
    虽然微软还有其它一些比较好用的未公开的属性,但我在这两个方法上花的时间还是最多的,因为它的确有使用价值,所以说说自己多年来的使用心得。
    这两个方法在以后的ACCESS版本中并不一定支持,所以我并不建议大家使用,但因为有些功能如果使用它来实现,可以节省比较多的时间,所以,在某些情况下,我还是会使用它,至少现有的ACCESS版本都支持这个方法。如果同样的功能你可以通过ACCESS正常的方法来实现,我则建议你使用微软公开的方法。切记!

    用途1:

     使用
       application.saveastext acForm,"我的窗体","c:\test.txt"
     将整个窗体导出到一个文本文件,将其打包发送给朋友,让朋友再使用       
       application.loadfromtext acForm,"我的窗体","c:\test.txt"
     再导回去。你可以压缩打包传送。

    用途2:
     可以将窗体保存到文本文件,然后把文本文件存储到OLE字段里,这样整个窗体的界面与代码都可保存到ACCESS数据表里,这个方法对编写 代码库管理器 非常有用。在使用时,还可即时将文本文件还原到一个窗体,让使用者即时预览到这个技巧产生的效果

    用途3:
      将窗体保存到一个文件文件,使用正则表达式对代码进行分析,可以分析语法,代码结构、语法错误、字数统计等等,你可参考一下FMS的一个ACCESS分析工具,它有的功能,你花个半年,做出来应该也没有大问题啦。记得让我试用一下源码哦:)
    
    用途4:
      真正的全局替换,一般我们需要全局替换窗体里一个属性的名称或内容,需要逐个逐个修改,而无法实现像代码中的全局替换,现在将窗体导出到文本文件,在文本文件里进行全局替换,完成后再导回窗体。
    用途5:
      繁简转换,中英转换,一般对控件标题、提示文字、默认值等进行文字上繁简转换后并不能真正实现繁简转换,在转换后相应的环境中打开还会出现ACTIVEX控件找不到或者OLE错误,将窗体或其它对象转换为文本文件后再进行繁简转换,然后再转换相应的字符集、字体名称、节的繁简对应名称、CRC校验码等之后,再导回ACCESS相应对象,就可完成整个ACCESS程序的转换,相应的程序效果可参见我做的繁简转换通用程序,记住简体一般是134 繁体是136 英文你打开就知了。我奉劝,如果你想做同样的功能,那你最好就别做了,用我的就得了,免得断我财路,我提成20%给你就得了,等两年后积到100元我再一次汇给你:)
    用途6:
      中英转换,虽然还需要进行少量手工转换,但已经节省了不少时间,但如何使用正式表达式来正确区别哪些是标题、提示文字、消息框还需要一些技巧。
    用途7:
      改变控件的默认属性        
       除了我们在设计状态修改控件的默认属性之外,使用修改文本文件的内容也可达到修改控件默认属性的效果,当窗体或报表导出到文本文件之后,所有的窗体、控件属件以及默认控件属性都在文本文件中体现出来,通过修改这个文本文件里有关默认属性的设置即可达到目的。
      什么是默认属性?举个例子,你从国外下载一个程序,为什么往窗体里面添加控件,控件字体总是Serif,而在简体中文环境下新建的窗体控件,字体都是“宋体”,在繁体中文环境下新建的窗体控件,字体都是“新细明体”,就是因为这个控件的默认属性导致的
    用途8:
       实现自动创建窗体模板的效果,将做好的具备基本功能的窗体导出到文本文件保存起来,到需要使用的时间,直接导入回来马上就可能产生一个已具备常用功能的窗体,不需要从头来过,再做得自动化一点,做一个丰富的窗体功能代码库,可让用户选择各种不同的功能,然后从这些代码库里选择想要的代码按照窗体文本文件的格式创建一个文本文件,再由这个文本文件自动组合出一个完善的窗体,不需要用户去编程,他只要选择字段,选择窗体功能、选择样式、选择模板就可实现各种录入窗体、查询窗体、分析窗体、报表统计等等,写程序就变成了组装程序。到时大家没事干了,就开发各个专用组件吧。注意,在文本文件中复制功能和代码,在自动编程化方面,相对窗体里复制控件和代码,具有更大的弹性和可塑性。
    用途9:
       如果窗体或报表里有图片或OLE对象,在导出的文本文件里会包含它们的二进制文件,使用正则表达式或其它方法提取这部分内容再将其还原到相应的图片文件中,即可实现将窗体和报表的图像保存取文件(ACCESS不支持直接将图像控件的图片保存到文件)
    用途10:
       实现将ACCESS窗体和报表转换到VB程序中,现在有一些专业程序提供这种功能,我想基本思路应该是出于此,将窗体和报表导出到文件文件,然后分析它与VB窗体文件之间的分别,然后修改文本文件以适应VB窗体的需要即可实现,只是我没有足够的时间来做这些了:),当然如果你举一反三,你也可能做一个工具,实现将VB的窗体反向转换到ACCESS程序中,毕竟VB的资源和丰富的技巧对ACCESS来讲有很大的利用价值
     用途11:
        一次性修改ACCESS对象里面所用的字体名称 字体大小或其它属性,连窗体的数据表的字体及其它属性也可更改到。
     用途12:
        查看窗体和控件的GUID ,并用来做相应的用途
     用途13:
        修改窗体和报表有关打印机的信息,为什么窗体的打印设置无法保存,为什么打开报表总会提示原来默认打印机不存在,是否使用当前打印机等等,这些信息其实都保存在窗体和报表里,打开文本文件,什么都清楚了,通过这个功能可实现不少强大的功能,大家发挥想像吧。
     用途14:
        如果要获取窗体和控件到底有些什么属性,通过文本文件可知道许多
     用途15:
        创建一些新的控件,如组合框,列表框等等,都可直接在里面复制代码来创建,而更有用的是,有些带注册信息(license)的控件,如果原来的窗体可用,但你没有LICENSE,你复制窗体会出现错误,说你没有版权,但如果你将窗体导出到文本文件,再导回一个新的窗体,ACCESS就给你蒙过去了,不过,这个方法可别说是我教的:),虽然我试过很多次才试出来的,不过我自己是坚决不用的:),大家都知道啦,我一般在公开场合,都是用正版的:)

     用途16:

         可以使用上述的方法对整个ACCESS的所有对象导出到文件进行备份保存,然后想还原哪个就还原哪个,虽然这种方法有其优点,不过,把整个MDB备份可能更实际些:)

    用途17:

         可以用于版本控制,不知大家有否在ACCESS中使用过SourceSafe,我研究不短时间,发现,它的签入签出就是使用我上述说的方法,在SourceSafe保存的是每个对象的文本格式。如果你有兴趣,可以写一个类似的版本控制工具,我预计2008年会开始写它,如果你在那年之前已经写出来了,那最好寄份源码给我,否则我控告你窃取我的点子:)


     用途18:
        除了窗体和报表外,还有其它几乎大部分对象,如查询、视图、存储过程、关系、宏、模块等等都可导出,你可用来做各种各样的用途,这里就不详述了,如果你有独到发现,请一定告诉我哦


        不过请注意,表是不可导出的:)


另外得告诉大家,在2002(XP)版本开始,微软开始对CRC校验进行检查了,所导回时有时可能会有一些问题。可能微软已经知道有人在滥用这个功能了:)     

       匆促而就,语句不通处或错字处,还请放过一马:)

shelly 发表于  2004-04-03 14:18:14


   让MSN能离线留言    |   阅读全文   |   评论(0)  |  引用(trackback0)  
 有没有方法让MSN像QQ那样具有离线留言的功能呢?微软为美国的MSN用户提供了手机服务,可以在离线的情况下向手机和邮箱发送信息。我们就是利用这个实现MSN的离线留言功能。

  第一步:登录http://join.msn.com/?pgmarket=en-us&&page=sitewide/home,然后在窗口左侧的“Hotmail Solutions”栏目下点击“Mobile Hotmail”链接,接着在出现的窗口右小角点击“learn more”按钮链接,然后在出现的网页上点“Sign in”链接。

  第二步:在“Wireless service provider”选项中选择“Other” ,在“Type your mobile address”输入框中输入你的E-mail地址,也可以是MSN号(如图1所示),进行下一步。

  第三步:这里需要你输入验证码,去你刚才填写的信箱看看,如果一切正常的话,你会收到MSN发给你的一封信,内容是“Your MSN Mobile Confirmation code is: ****”将后面这个四位数填入“Confirmation code:”。

  第四步:进入下一页后,提示说三十秒后自动转到下一页,点链接后继续,点“Next”继续,出现“Thank you”提示后点“Done”按钮你就会看到如图2的画面,表示成功申请了。

  注销你的MSN,然后重新登录一下,你会发现你的MSN在离线的状态下,图标发生了变化:多了一个小手机在旁边。当你不在线的情况下,别人也可以给你发送信息了,你将在刚才申请服务时填写的信箱中查看到信息。
shelly 发表于  2004-04-03 12:49:09


   MSN机器人 呵呵~~    |   阅读全文   |   评论(2)  |  引用(trackback1)  

是否在深夜里感到无聊? 去下个机器人吧?

www.9zi.com

shelly 发表于  2004-04-03 12:30:03


   今天是黑色星期五?    |   阅读全文   |   评论(2)  |  引用(trackback0)  

错,今天二号。不是十三号。

但愿不是我的黑色星期五~~~~~~~~

:(

呵呵,虽然有些失眠。但,现在感觉状态还算好了~~ (By shelly  @2004-04-03 7:37)

shelly 发表于  2004-04-02 11:28:38


   《CS之赏金猎手》昨晚在书店里看到    |   阅读全文   |   评论(0)  |  引用(trackback1)  

太长了,头两天 水盟冰柠檬 有推荐。呵呵,太长了,我不习惯看。不过既然书也出来了,问了一下店员听说销量还不错。呵呵,这里把地址留下来。 :) 有时间的话,看一看了。~~~~~

http://www.sanxia.com.cn/book/book.asp?book_id=391

shelly 发表于  2004-03-29 10:38:13


   有人骂PHP垃圾。呵呵~~    |   阅读全文   |   评论(0)  |  引用(trackback1)  
喜悦国际村 看到有人骂PHP垃圾。呵呵,进去才知道是 CDSN 上在讨论。晕晕,这个问题已经讨论N久了。PHP只不过是一种编程工具而已,垃圾不垃圾纯属个人喜好。如其它编程语言一样。各有所长嘛。
我喜欢它:
1  极佳的跨平台功能。(一般WIN32下写的普通程序,在*NIX下都能用哦。)有人说JSP也好,嗯,正确,我没有说JSP不好呀。
2  语法简单。呵呵,学过TC的朋友基本上都可以掌握。
3  可用ZEND加密代码。我个人不赞成加密原代码。但,它在一定程度上解决了 版权的问题。 /:D
4  ....
5  ......
6  ........
N  ............
shelly 发表于  2004-03-29 10:26:26


   NT系统默认共享清除工具    |   阅读全文   |   评论(2)  |  引用(trackback0)  

另存下面内容为 Delshare.bat ,再开个DOS窗口执行它,按提示操作就行了

@echo off

:Rem 检查参数
if {%1}=={} goto :Usage

:Rem 程序主体
echo.
echo ------------------------------------------------------
echo.
echo  删除当前的系统共享目录
echo.
net share %1$ /delete
net share %2$ /delete
net share %3$ /delete
net share %4$ /delete
net share %5$ /delete
net share %6$ /delete
net share %7$ /delete
net share %8$ /delete
net share %9$ /delete
net stop Server
net start Server
echo.
echo  共享目录全部删除完毕
echo.
echo ------------------------------------------------------
echo.
echo  修改注册表项,修改系统默认共享属性
echo.
echo  生成 delshare.reg 准备修改注册表
echo Windows Registry Editor Version 5.00> c:\delshare.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]>> c:\delshare.reg
echo "AutoShareWks"=dword:00000000>> c:\delshare.reg
echo "AutoShareServer"=dword:00000000>> c:\delshare.reg
echo  运行 delshare.reg 修改注册表
regedit /s c:\delshare.reg
echo  删除 delshare.reg 临时文件
del c:\delshare.reg
goto :END

:Usage
echo.
echo ------------------------------------------------------
echo.
echo  Windows NT/2000 系统默认共享清除工具
echo.
echo  作者:阿新(Seraph Chutium)
echo  主页:http://com.6to23.com/
echo.
echo  错误:未输入系统共享名称
echo.
echo  *=*=*  请输入系统共享名称  *=*=*
echo.
echo  例如,删除系统默认共享:
echo  delshare c d e ipc admin print
echo.
echo  若本地硬盘盘符不是 C: D: E: ,请自行修改
echo.
echo  如:
echo  本地硬盘为 C: D: E: X: Y: Z: ,则应改为:
echo  delshare c d e x y z ipc admin print
echo.
echo  *** 支持可同时删除 9 个共享目录 ***
echo.
echo ------------------------------------------------------
goto :EOF

:END
echo.
echo ------------------------------------------------------
echo.
echo  Windows NT/2000 系统默认共享清除工具,成功完成清除工作
echo.
echo  作者:阿新(Seraph Chutium)
echo  主页:http://com.6to23.com/
echo.
echo ------------------------------------------------------
echo.

:EOF

shelly 发表于  2004-03-28 14:57:29


   基本掌握为黑白照片上色技巧。    |   阅读全文   |   评论(6)  |  引用(trackback0)  
:)  真是神奇哦。  PS真的可以做到。晕晕~~~~~~
http://www.showyes.com/new1/html/2003-9-1/200391204554.htm


处理前

上色后
shelly 发表于  2004-03-28 08:15:41


   PHP 调试用 包含文件    |   阅读全文   |   评论(0)  |  引用(trackback1)  


<?php

    
/**

     * **]Function Name[= snk_debug()

     * **]Purpose[=

     *     在网页中添加一浮动层,探测预定义变量的当前值。

     * **]Parameter[=

     *     int $bug_lv 探测变量级别,值为下列变量中要探测变量对应值之和

     *         1    $_GET

     *         2    $_POST

     *         4    $_SESSION

     *         8    $_SERVER

     *         16   $_COOKIE

     *         32   $_FILES

     *         64   $_ENV

     * **]Return[= void

     * **]Author[= SNakeVil<51JS,BU>(snakevil**qq.com)

     * **]Version[= 1.0.0.0

     * **]Create[= 5:39 2004-3-27

     * **]Modifications[=

     * **]See[=

     */

    
function snk_debug($bug_lv=14) {

        if (!
is_int($bug_lv)) $bug_lv = intval($bug_lv);

        
$bug_lv = sprintf("%07s", base_convert($bug_lv, 10, 2));

?>

    <!-- "PHP Debug Frame" Plugin Content : START  -->

    <style type="text/css">

    TABLE#oDebugFrame {

        position:absolute;

        z-index:19840806;

        left:expression(body.scrollLeft+100);

        top:expression(body.scrollTop+100);

        width:expression(Math.round(body.clientWidth/2));

        height:expression(Math.round(body.clientHeight/2));

        background:#99D64B;

        border:solid 1px black;

        overflow:visible;

        cursor:default;

        filter:alpha(Opacity="80");

    }

    TH.oDebugFrame_Button {

        font:normal normal normal 9pt "Webdings";

    }

    DIV#oDebugFrame_Zone {

        width:100%;

        height:100%;

        overflow-x:visible;

        overflow-y:auto;

        padding:0 10px;

        scrollbar-3dlight-color:#99D64B;

        scrollbar-highlight-color:#99D64B;

        scrollbar-face-color:#222222;

        scrollbar-arrow-color:#222222;

        scrollbar-shadow-color:#99D64B;

        scrollbar-darkshadow-color:#99D64B;

        scrollbar-track-color:#99D64B;

    }

    P.oDebugFrame_SubCapital {

        width:100%;

        padding:0;

        margin:10px 0 0px 0;

        border-bottom:solid 1px #111111;

        font:normal normal bolder 10pt "Tahoma";

        color:black;

        text-indent:5pt;

    }

    P.oDebugFrame_SubCapital_Sub {

        width:100%;

        padding:0;

        margin:0 0 5px 0;

        font:normal normal normal 7pt "Verdana";

        color:#222222;

        text-align:right;

    }

    TABLE.oDebugFrame_List {

        border-collapse:collapse;

        width:95%;

        background:#CDE84C;

        font:normal normal normal 8pt/1.2 "Verdana";

        color:#111111;

        table-layout:fixed;

        margin-bottom:20px;

    }

    TABLE.oDebugFrame_List TH {

        background:#E8C54C;

        font:"Arial";

        color:black;

        letter-spacing:1px;

        padding:5px;

    }

    TABLE.oDebugFrame_List TD {

        word-break:break-all;

        word-wrap:break-word;

        padding:3px;

    }

    TD.oDebugFrame_List_Key {

        font:normal normal bold 8pt "Tahoma";

    }

    </style>

    <script language="JScript">

    function HoverIt(which) {

        return which.style.backgroundColor = "#DEF95D";

    }

    function LeaveIt(which) {

        return which.style.backgroundColor = "";

    }

    </script>

    <table id="oDebugFrame" cellspacing="0" cellpadding="0" onselectstart="return false" ondragstart="return false">

        <tr style="BACKGROUND:black;COLOR:white;HEIGHT:20px">

            <td style="FONT:normal normal 600 8pt 'Tahoma';TEXT-INDENT:10pt;WORD-SPACING:1px">PHP Debug Frame ( by SNakeVil )</td>

            <th class="oDebugFrame_Button" onclick="oDebugFrame.filters.alpha.opacity=Math.max(10,oDebugFrame.filters.alpha.opacity-10)" title="- : 更透明…">3</th>

            <th class="oDebugFrame_Button" onclick="oDebugFrame.filters.alpha.opacity=Math.min(100,oDebugFrame.filters.alpha.opacity+10)" title="+ : 更清晰…">4</th>


            <th class="oDebugFrame_Button" onclick="oDebugFrame.style.display='none'" title="x : 关闭本调试窗口">**</th>

        </tr>

        <tr><td colspan="4"><div id="oDebugFrame_Zone">

<?php

        
if ($bug_lv[6]=="1") { // 0000001 $_GET 1

?>

            <!-- Display $_GET -->

            <p class="oDebugFrame_SubCapital">Request - Get</p>

            <p class="oDebugFrame_SubCapital_Sub">a list of get variables in request</p>

            <table class="oDebugFrame_List" align="center" cellspacing="0" cellpadding="0" border="1" bordercolor="#111111">

                <tr><th width="39%">Variable</th><th>Value</th></tr>

<?php

             
foreach ($_GET as $i => $j) print("\t\t\t\t<tr onmouseover=\"HoverIt(this)\" onmouseout=\"LeaveIt(this)\" title=\"\$_GET['$i']\"><td class=\"oDebugFrame_List_Key\">$i</td><td>$j</td></tr>\n");

?>

            </table>

<?php

        
}

        if (
$bug_lv[5]=="1") { // 0000010 $_POST 2

?>

            <!-- Display $_POST -->

            <p class="oDebugFrame_SubCapital">Request - Post</p>

            <p class="oDebugFrame_SubCapital_Sub">a list of post variables in request</p>

            <table class="oDebugFrame_List" align="center" cellspacing="0" cellpadding="0" border="1" bordercolor="#111111">

                <tr><th width="39%">Variable</th><th>Value</th></tr>

<?php

             
foreach ($_POST as $i => $j) print("\t\t\t\t<tr onmouseover=\"HoverIt(this)\" onmouseout=\"LeaveIt(this)\" title=\"\$_POST['$i']\"><td class=\"oDebugFrame_List_Key\">$i</td><td>$j</td></tr>\n");

?>

            </table>

<?php

        
}

        if (
$bug_lv[4]=="1") { // 0000100 $_SESSION 4

?>

            <!-- Display $_SESSION -->

            <p class="oDebugFrame_SubCapital">Request - Session</p>

            <p class="oDebugFrame_SubCapital_Sub">a list of session variables in request</p>

<?php

            
if (isset($_SESSION)) {

?>

            <table class="oDebugFrame_List" align="center" cellspacing="0" cellpadding="0" border="1" bordercolor="#111111">

                <tr><th width="39%">Variable</th><th>Value</th></tr>

<?php

            
foreach ($_SESSION as $i => $j) print("\t\t\t\t<tr onmouseover=\"HoverIt(this)\" onmouseout=\"LeaveIt(this)\" title=\"\$_SESSION['$i']\"><td class=\"oDebugFrame_List_Key\">$i</td><td>$j</td></tr>\n");

?>

            </table>

<?php

            
} else print("\t\t\t<div style=\"FONT:normal normal bold 8pt 'Verdana';COLOR:#990000;TEXT-INDENT:20pt;MARGIN-BOTTOM:15px\">\"Session\" has been not started !</div>\n");

?>

<?php

        
}

        if (
$bug_lv[3]=="1") { // 0001000 $_SERVER 8

?>

            <!-- Display $_SERVER -->

            <p class="oDebugFrame_SubCapital">PHP Web-Server</p>

            <p class="oDebugFrame_SubCapital_Sub">a list of PHP web-server variables</p>

            <table class="oDebugFrame_List" align="center" cellspacing="0" cellpadding="0" border="1" bordercolor="#111111">

                <tr><th width="39%">Variable</th><th>Value</th></tr>

<?php

             
foreach ($_SERVER as $i => $j) print("\t\t\t\t<tr onmouseover=\"HoverIt(this)\" onmouseout=\"LeaveIt(this)\" title=\"\$_SERVER['$i']\"><td class=\"oDebugFrame_List_Key\">$i</td><td>$j</td></tr>\n");

?>

            </table>

<?php

        
}

        if (
$bug_lv[2]=="1") { // 0010000 $_COOKIE 16

?>

            <!-- Display $_COOKIE -->

            <p class="oDebugFrame_SubCapital">Request - Cookie</p>

            <p class="oDebugFrame_SubCapital_Sub">a list of cookie variables in request</p>

            <table class="oDebugFrame_List" align="center" cellspacing="0" cellpadding="0" border="1" bordercolor="#111111">

                <tr><th width="39%">Variable</th><th>Value</th></tr>

<?php

             
foreach ($_COOKIE as $i => $j) print("\t\t\t\t<tr onmouseover=\"HoverIt(this)\" onmouseout=\"LeaveIt(this)\" title=\"\$_COOKIE['$i']\"><td class=\"oDebugFrame_List_Key\">$i</td><td>$j</td></tr>\n");

?>

            </table>

<?php

        
}

        if (
$bug_lv[1]=="1") { // 0100000 $_FILES 32

?>

            <!-- Display $_FILES -->

            <p class="oDebugFrame_SubCapital">Request - Files</p>

            <p class="oDebugFrame_SubCapital_Sub">a list of upload files variables in request</p>

            <table class="oDebugFrame_List" align="center" cellspacing="0" cellpadding="0" border="1" bordercolor="#111111">

                <tr><th width="39%">Variable</th><th>Value</th></tr>

<?php

             
foreach ($_FILES as $i => $j) print("\t\t\t\t<tr onmouseover=\"HoverIt(this)\" onmouseout=\"LeaveIt(this)\" title=\"\$_FILES['$i']\"><td class=\"oDebugFrame_List_Key\">$i</td><td>$j</td></tr>\n");

?>

            </table>

<?php

        
}

        if (
$bug_lv[0]=="1") { // 1000000 $_ENV 64

?>

            <!-- Display $_ENV -->

            <p class="oDebugFrame_SubCapital">Environment</p>

            <p class="oDebugFrame_SubCapital_Sub">a list of environment variables</p>

            <table class="oDebugFrame_List" align="center" cellspacing="0" cellpadding="0" border="1" bordercolor="#111111">

                <tr><th width="39%">Variable</th><th>Value</th></tr>

<?php

            
if (count($_ENV)) {

                foreach (
$_ENV as $i => $j) print("\t\t\t\t<tr onmouseover=\"HoverIt(this)\" onmouseout=\"LeaveIt(this)\" title=\"\$_ENV['$i']\"><td class=\"oDebugFrame_List_Key\">$i</td><td>$j</td></tr>\n");

            } else {

                
exec("set", $i);

                for (
$j=0,$k=count($i);$j<$k;$j++) {

                    
$l = $i[$j];

                    
$m = strpos($l, "=");

                    
$l = array(substr($l, 0, $m), substr($l, $m+1));

                    print(
"\t\t\t\t<tr onmouseover=\"HoverIt(this)\" onmouseout=\"LeaveIt(this)\" title=\"\$_ENV['{$l[0]}']\"><td class=\"oDebugFrame_List_Key\">{$l[0]}</td><td>{$l[1]}</td></tr>\n");

                }

            }

?>

            </table>

<?php

        
}

        unset(
$i, $j, $k, $l, $m);

?>

        </div></td></tr>

    </table>

    <!-- "PHP Debug Frame" Plugin Content : END  -->

<?php

    
return true;

    }



    if (
$_SERVER["SCRIPT_FILENAME"]==str_replace("\","/",__FILE__)) { // 如果直接请求此页面

        phpinfo(16+32);

    
}

?>

效果:

效果图

shelly 发表于  2004-03-27 11:12:16


   今天公司组织体检    |   阅读全文   |   评论(4)  |  引用(trackback0)  
/:! 害怕。要抽血哦。发抖中~~~~~~~~~~~~<BR>
唉,现在科技这么发达,为什么不发明一种不用抽血就可以化验的技术呢?<BR>
嗯,什么时候用GOOGLE找找这方面的资料~~ /:D
shelly 发表于  2004-03-27 08:01:18


   IE难缠故障排除手册    |   阅读全文   |   评论(0)  |  引用(trackback1)  
 IE难缠故障排除手册 <转自GSN>

从上面专题的名称,大家一定也看出来了.这里我们介绍的不是一般的IE浏览器的操作技巧问题,因为这方面的文章似乎已经太多了。从更实用,对网友们更有利的角度上,笔者选择了“难缠故障”这个着眼点。之所以称之为“难缠”恰恰表现在它发生的频繁性和解决的困难度上。
希望大家顺着笔者的思路,在解决疑难的时候,同时对IE也能有一个更加深刻的认识。

1> 去除被设定了的“分级审查”

分级审查大家都知道了,它是一种定性的控制浏览器中显示内容的方法,举个例子,如果在网页内容中包含性描写之类的黄色信息,“分级审查”系统能够自动识别出来并提示当前用户,该内容被限制浏览,当然所限制的内容并非仅限于此。
也正因为此,分级审查设定不当的话,往往给用户带来很多不必要的麻烦,所以笔者在这里并不提倡大家使用分级审查的方法来屏蔽过滤网页。那么如何解除它呢?
如果是你自己设定的分级审查,就相对简单些了,直接在最下的“密码”输入框内键入密码即可开始浏览。同时你还可以通过“监护人”的身份将该功能关闭掉,以避免总是来回出现提示窗口。

使用菜单“工具”-“Internet选项”,选择“内容”选项卡

单击分级审查设定框内的“禁用”按钮,这时IE会要求你输入监护人的密码
“确定”后,IE会弹出一个提示窗口告诉你当前分级审查已经关闭,现在你可以随便浏览网站了。
但是很多情况下,往往我们不知道“监护人密码”,这也是它的棘手之处。不管是由于不小心忘记了, 还是别人故意设置的,这时想去除它就要借助“注册表”了。

单击“开始”菜单,选择“运行”,在里面键入命令“regedit”,进入注册表编辑器。按顺序依次选择“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies”,如图

鼠标右击“Ratings”键将其删除,退出注册表编辑器,同时进入系统目录(Windows/System)下,将相应的文件Ratings.pol也删除掉。然后重新启动计算机。

故障提示:为了防止别人随便设定分级审查,你可以在开启该功能后关闭,这样当用户再次设定时,将需要提供上次的原始密码,否则不能完成。

2> IE小窗口,如何让它重新变大?

有时在我们使用IE浏览器中,不知道什么原因窗口就变小了。每次重新启动时,都是这样一个小窗口,即便是用“最大化”按钮,还是无济于事。

其实这是IE自身所具有的一种“记忆”效应,即下次重新开启的窗口默认依从最前一次关闭时的状态。当然问题严重时,也会出现类似上面这种情况。

同样进入注册表编辑器,依次选择“HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\”,在右边的窗口中删除“Window_Placement”键,如图



另外在“HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\Old Work-Areas”右边窗口中删除“OldWorkAreaRects”键,如图



关闭注册表,重新启动计算机,连续两次最大化IE窗口(“最大化”-“还原”-“最大化”),再次重新启动IE OK了。


3> 如何永久性的固定“HomePage”地址?

上网浏览时,经常遇到本来已经设定好的“主页”地址被更改的情况,当然你可以再次通过“工具”-“Internet选项”中的“常规”选项卡设定回来,然而变来变去终究够麻烦的。

那么有没有更彻底的办法呢?这里用到了一个叫做“MS Internet Explorer personal”的IE浏览器扩展插件,IEP(简称)是一个IE的增强工具软件,主要是用来定制个性化的浏览器显示外观,并对IE的工具选项进行一定的限制。通过它你可以将浏览器的主页地址彻底“锁死”!

到海阔天空下载站http://ilike.myrice.com/soft_browse...舳
shelly 发表于  2004-03-26 12:18:43


   回来??不回来???    |   阅读全文   |   评论(4)  |  引用(trackback1)  
正当决定放弃 BLOGBUS时,他又回来了。晕晕
我是回?还是不回,我喜欢这里的速度。还有上传文件管理。嗯,再等等看。
这个BLOGBUS不会再关闭了吧????????
shelly 发表于  2004-03-26 07:55:11


   BLOG 终于又重新开通了~~    |   阅读全文   |   评论(0)  |  引用(trackback1)  
呵呵,原以为,这里就这样停了。不过还好,又重新开通了。
日记锁变了,意味着什么呢?难过中~~~~~~~~~
shelly 发表于  2004-03-20 09:18:23


   嗯,今天的车(回家)    |   阅读全文   |   评论(4)  |  引用(trackback1)  
老是停电。晕晕,半夜里上网,不觉天就亮了~~~  下了首歌的伴奏及原唱,用U盘COPY回去,顺便做了WINAMP的歌词,唉~~~~~~~~
歌唱的太差了~~~~~~~~ 为什么我就莫有好得嗓子呢?~~~~~~~~~~
shelly 发表于  2004-03-01 04:21:09


   易字秀中抓到的有些有用的JS    |   阅读全文   |   评论(0)  |  引用(trackback0)  

用了很多正则.呵呵,正在学习中~~ 留着当资料用~~  嘿嘿,谢谢MM了~~`

<script language="javascript">
function copyCode(type){

var obj=document.Hidden.elementCode;
 
  SetVals();
 
  if (obj) {
    obj.select();
    js=obj.createTextRange();
    js.execCommand("Copy");
   
 alert ("转换后的秀字已经复制到剪切板中,按下“确定”键后该窗口将自动关闭。\n\n窗口关闭后,请将鼠标移动到你刚才输入文字的地方并删除原有文字,然\n后再单击鼠标右键,选择右键菜单中的“粘贴”一项。(如果“粘贴”菜\n单不可用,你也可以同时按住 CTRL+V 键粘贴)");
  if(type==0)
     window.close();
  }
 
}

function addPortrait(emMode) {
var imgurl;

    //if (! validateMode()) return;
   
    if (emMode=="small")
       imgurl = showModalDialog("../inc/dvbeditor/portraitSelect.html","", "font-family:Verdana; font-size:12; status:no; unadorned:yes; scroll:no; resizable:yes;dialogWidth:36em; dialogHeight:26em");

    if (emMode=="big")
       imgurl = showModalDialog("../inc/dvbeditor/portraitbig.html","", "font-family:Verdana; font-size:12; status:no; unadorned:yes; scroll:no; resizable:yes;dialogWidth:42em; dialogHeight:30em");

    if (imgurl != null)    format("InsertImage", imgurl);
    else IframeID.focus();
}

function format(what,opt)
{
  if (opt=="removeFormat")
  {
    what=opt;
    opt=null;
  }

  if (opt==null) Composition.document.execCommand(what);
  else IframeID.document.execCommand(what,"",opt);

  //pureText = false;
  IframeID.focus();
}


</script>

<script language="vbscript">
Dim bInit
Dim mTimer


bInit=False
mTimer=setInterval("initeditorCode",500,"vbscript")

function initeditorCode()
on error resume next

 if not bInit then
  Set IframeID=document.frames("Dvbbs_Composition")  
 
  if IsObject(IframeID.document.body) then
     IframeID.document.body.innerHTML=document.all.initCode.innerHTML
     if err.number=0 then
        bInit=True
        Call clearInterval(mTimer)
     end if    
  end if
 
 end if 
    
end function

function SetVals()     
on error resume next

Dim CodeType
Dim strCode
Dim IframeID
    
    Set IframeID=document.frames("Dvbbs_Composition")
     
   if not IsObject(IframeID) then
      msgbox "test"
      exit function
   end if    
     
   CodeType=document.editor.tagType.value 
    bbsType=document.hidden.bbsType.value    
    
   if CodeType=1 then   
      document.Hidden.elementCode.value =IframeID.document.body.innerHTML
   end if

   if CodeType=2 then   
      document.Hidden.elementCode.value =addHtmlAdv(preProcess(IframeID.document.body.innerHTML))
   end if   

   if CodeType=3 then
      document.Hidden.elementCode.value =ubbCode(preProcess(IframeID.document.body.innerHTML))
   end if   
  
    
    if document.Hidden.elementCode.value<>"" then
          
      strCode=document.Hidden.elementCode.value
     
    if CodeType=2 then   
          if bbsType="HTML" then
             strCode=Replace(strCode,"&nbsp;"," ",1,-1,1)
             strCode=Replace(strCode,"<BR>",chr(13),1,-1,1)

             adv=chr(13)&chr(13)&"-----------------------------------------------------------"&chr(13)
            adv=adv&"以上文字、图片由易我秀输出,你也想这么酷吗?"&chr(13)   
             adv=adv&"<a href=http://www.eoshow.com/download/install1.html?f=bbshtml target=_blank>http://www.eoshow.com/download/install1.html</a>"
          else
             'adv=chr(13)&chr(13)&"-----------------------------------------------------------"&chr(13)
            'adv=adv&"以上文字、图片由易我秀输出,你也想这么酷吗?"&chr(13)   
             'adv=adv&"<a href=http://www.eoshow.com/download/install1.html?fb=email target=_blank>http://www.eoshow.com/download/install1.html</a>"
          end if
       end if  
      
       if CodeType=3 then
         adv=chr(13)&chr(13)&"-----------------------------------------------------------"&chr(13)
         adv=adv&"以上文字、图由易我秀输出,你也想这么酷吗?"&chr(13)
       adv=adv&"http://www.eoshow.com/download/install1.html"
       end if

    document.Hidden.elementCode.value=strCode&adv
    'msgbox document.Hidden.elementCode.value        

   end if
   
end function

function addHtmlAdv(str)
Dim objRegExp
Dim strFrom
Dim bbsType

    bbsType=document.hidden.bbsType.value
 if bbsType="HTML" then   
       strFrom="bbshtml"
    else
       strFrom="email"
    end if
           
    Set objRegExp=new RegExp
    objRegExp.IgnoreCase =true
    objRegExp.Global=True 
   
    objRegExp.Pattern ="<IMG SRC=\""(\S+?)\"">"
    str=objRegExp.Replace(str,"<a href=""http://www.eoshow.com/download/install1.html?fb="&strFrom&""" target=""_blank""><img src=""$1"" border=""0""></a>")
   
    set objRegExp=nothing
    addHtmlAdv=str   
 
end function

function ubbCode(str)
Dim objRegExp
Dim Match,Matchs
Dim strReplace
   
 strReplace=str

 Set objRegExp=new RegExp
    objRegExp.IgnoreCase =true
    objRegExp.Global=True

    strReplace=Replace(strReplace,"&nbsp;"," ")   
    strReplace=Replace(strReplace,"<br>",chr(13))      
   
    objRegExp.Pattern ="<FONT (\S+?)=(\S+?)>(\S+?)</FONT>"
    strReplace=objRegExp.Replace(strReplace,"[$1=$2]$3[/$1]")

    objRegExp.Pattern ="<FONT (\S+?)=(\S+?) (\S+?)=(\S+?)>(.+?)</FONT>"
    strReplace=objRegExp.Replace(strReplace,"[$1=$2][$3=$4]$5[/$3][/$1]")

    objRegExp.Pattern ="<FONT (\S+?)=(\S+?) (\S+?)=(\S+?) (\S+?)=(\S+?)>(.+?)</FONT>"
    strReplace=objRegExp.Replace(strReplace,"[$1=$2][$3=$4][$5=$6]$7[/$5][/$3][/$1]")
   
    '粗体
    objRegExp.Pattern ="<STRONG>(.+?)</STRONG>"
    strReplace=objRegExp.Replace(strReplace,"[B]$1[/B]")

    '斜体
    objRegExp.Pattern ="<EM>(.+?)</EM>"
    strReplace=objRegExp.Replace(strReplace,"[I]$1[/I]")

    '下划线
    objRegExp.Pattern ="<U>(.+?)</U>"
    strReplace=objRegExp.Replace(strReplace,"[U]$1[/U]") 
   
    '链接替换   
    objRegExp.Pattern ="<a href=\""(\S+?)\"">(\S+?)</a>"
    strReplace=objRegExp.Replace(strReplace,"[URL $1]$2[/URL]")
   
    '图片替换
    objRegExp.Pattern ="<IMG SRC=\""(\S+?)\"">"
    strReplace=objRegExp.Replace(strReplace,"[IMG]$1[/IMG]")
       
    '位置替换
    objRegExp.Pattern ="<P align=(\S+?)>(\S+?)</P>"
    strReplace=objRegExp.Replace(strReplace,"[$1]$2[/$1]")
   
    objRegExp.Pattern ="<P>(.+?)</P>"
    strReplace=objRegExp.Replace(strReplace,"$1")

    'objRegExp.Pattern ="&nbsp;"
    'str=objRegExp.Replace(str," ")

    objRegExp.Pattern ="<br>"
    strReplace=objRegExp.Replace(strReplace,chr(10))
       
    Set objRegExp=Nothing   
    ubbCode=strReplace
    
end function

function preProcess(htmlCode)
Dim i,j
Dim strContent,strTmp,strReplace
Dim strSave
Dim Match
Dim iAsc

'转换库
    Dim strURLArray_EN(28,1)
Dim strURLArray_CN(210,1)
Dim strURLArray_EM1(23,1)
Dim strURLArray_EM2(95,1)
Dim strURL(6)

strURL(0)="http://www.eoshow.com/images/en/"
strURL(1)="http://www.eoshow.com/images/en3/"   
'strURL(2)="http://www.eoshow.com/images/en3/"   

strURL(3)="http://www.eoshow.com/images/cn/"
strURL(4)="http://www.eoshow.com/images/numberd/"
strURL(5)="http://www.eoshow.com/images/em1/"
strURL(6)="http://www.eoshow.com/images/em2/"

'-----------------------------------------------------------------------------------
'英文库   
'-----------------------------------------------------------------------------------

strURLArray_EN(0,0)="a"
strURLArray_EN(0,1)="a.gif"
strURLArray_EN(1,0)="b"
strURLArray_EN(1,1)="b.gif"
strURLArray_EN(2,0)="c"
strURLArray_EN(2,1)="c.gif"
strURLArray_EN(3,0)="d"
strURLArray_EN(3,1)="d.gif"
strURLArray_EN(4,0)="e"
strURLArray_EN(4,1)="e.gif"
strURLArray_EN(5,0)="f"
strURLArray_EN(5,1)="f.gif"
strURLArray_EN(6,0)="g"
strURLArray_EN(6,1)="g.gif"
strURLArray_EN(7,0)="h"
strURLArray_EN(7,1)="h.gif"
strURLArray_EN(8,0)="i"
strURLArray_EN(8,1)="i.gif"
strURLArray_EN(9,0)="j"
strURLArray_EN(9,1)="j.gif"
strURLArray_EN(10,0)="k"
strURLArray_EN(10,1)="k.gif"
strURLArray_EN(11,0)="l"
strURLArray_EN(11,1)="l.gif"
strURLArray_EN(12,0)="m"
strURLArray_EN(12,1)="m.gif"
strURLArray_EN(13,0)="n"
strURLArray_EN(13,1)="n.gif"
strURLArray_EN(14,0)="o"
strURLArray_EN(14,1)="o.gif"
strURLArray_EN(15,0)="p"
strURLArray_EN(15,1)="p.gif"
strURLArray_EN(16,0)="q"
strURLArray_EN(16,1)="q.gif"
strURLArray_EN(17,0)="r"
strURLArray_EN(17,1)="r.gif"
strURLArray_EN(18,0)="s"
strURLArray_EN(18,1)="s.gif"
strURLArray_EN(19,0)="t"
strURLArray_EN(19,1)="t.gif"
strURLArray_EN(20,0)="u"
strURLArray_EN(20,1)="u.gif"
strURLArray_EN(21,0)="v"
strURLArray_EN(21,1)="v.gif"
strURLArray_EN(22,0)="w"
strURLArray_EN(22,1)="w.gif"
strURLArray_EN(23,0)="x"
strURLArray_EN(23,1)="x.gif"
strURLArray_EN(24,0)="y"
strURLArray_EN(24,1)="y.gif"
strURLArray_EN(25,0)="z"
strURLArray_EN(25,1)="z.gif"
strURLArray_EN(26,0)="!"
strURLArray_EN(26,1)="!.gif"
strURLArray_EN(27,0)="?"
strURLArray_EN(27,1)="question.gif"

'-----------------------------------------------------------------------------------
'中文库   
'-----------------------------------------------------------------------------------
strURLArray_CN(0,0)="们"
strURLArray_CN(0,1)="men.gif"
strURLArray_CN(1,0)="呼"
strURLArray_CN(1,1)="hu.gif"
strURLArray_CN(2,0)="大"
strURLArray_CN(2,1)="da.gif"
strURLArray_CN(3,0)="我"
strURLArray_CN(3,1)="wo.gif"
strURLArray_CN(4,0)="的"
strURLArray_CN(4,1)="de.gif"
strURLArray_CN(5,0)="车"
strURLArray_CN(5,1)="che.gif"
strURLArray_CN(6,0)="倒"
strURLArray_CN(6,1)="dao.gif"
strURLArray_CN(7,0)="咯"
strURLArray_CN(7,1)="ge.gif"
strURLArray_CN(8,0)="奥"
strURLArray_CN(8,1)="ao.gif"
strURLArray_CN(9,0)="扁"
strURLArray_CN(9,1)="bian.gif"
strURLArray_CN(10,0)="眉"
strURLArray_CN(10,1)="mei1.gif"
strURLArray_CN(11,0)="金"
strURLArray_CN(11,1)="jin.gif"
strURLArray_CN(12,0)="偶"
strURLArray_CN(12,1)="ou.gif"
strURLArray_CN(13,0)="哈"
strURLArray_CN(13,1)="ha.gif"
strURLArray_CN(14,0)="她"
strURLArray_CN(14,1)="ta1.gif"
strURLArray_CN(15,0)="拉"
strURLArray_CN(15,1)="la.gif"
strURLArray_CN(16,0)="真"
strURLArray_CN(16,1)="zhen.gif"
strURLArray_CN(17,0)="阿"
strURLArray_CN(17,1)="a1.gif"
strURLArray_CN(18,0)="上"
strURLArray_CN(18,1)="shang.gif"
strURLArray_CN(19,0)="傻"
strURLArray_CN(19,1)="sha.gif"
strURLArray_CN(20,0)="哎"
strURLArray_CN(20,1)="ai1.gif"
strURLArray_CN(21,0)="好"
strURLArray_CN(21,1)="hao.gif"
strURLArray_CN(22,0)="猪"
strURLArray_CN(22,1)="zhu.gif"
strURLArray_CN(23,0)="是"
strURLArray_CN(23,1)="shi.gif"
strURLArray_CN(24,0)="笑"
strURLArray_CN(24,1)="xiao2.gif"
strURLArray_CN(25,0)="雖"
strURLArray_CN(25,1)="sui.gif"
strURLArray_CN(26,0)="下"
strURLArray_CN(26,1)="xia.gif"
strURLArray_CN(27,0)="利"
strURLArray_CN(27,1)="li.gif"
strURLArray_CN(28,0)="哦"
strURLArray_CN(28,1)="o.gif"
strURLArray_CN(29,0)="妳"
strURLArray_CN(29,1)="ni1.gif"
strURLArray_CN(30,0)="木"
strURLArray_CN(30,1)="mu.gif"
strURLArray_CN(31,0)="贱"
strURLArray_CN(31,1)="jian.gif"
strURLArray_CN(32,0)="笨"
strURLArray_CN(32,1)="ben.gif"
strURLArray_CN(33,0)="靠"
strURLArray_CN(33,1)="kao.gif"
strURLArray_CN(34,0)="不"
strURLArray_CN(34,1)="bu.gif"
strURLArray_CN(35,0)="北"
strURLArray_CN(35,1)="bei.gif"
strURLArray_CN(36,0)="唉"
strURLArray_CN(36,1)="ai2.gif"
strURLArray_CN(37,0)="小"
strURLArray_CN(37,1)="xiao1.gif"
strURLArray_CN(38,0)="朹"
strURLArray_CN(38,1)="chou.gif"
strURLArray_CN(39,0)="累"
strURLArray_CN(39,1)="lei.gif"
strURLArray_CN(40,0)="髮"
strURLArray_CN(40,1)="fa.gif"
strURLArray_CN(41,0)="中"
strURLArray_CN(41,1)="zhong.gif"
strURLArray_CN(42,0)="南"
strURLArray_CN(42,1)="nan.gif"
strURLArray_CN(43,0)="啊"
strURLArray_CN(43,1)="a2.gif"
strURLArray_CN(44,0)="左"
strURLArray_CN(44,1)="zuo.gif"
strURLArray_CN(45,0)="机"
strURLArray_CN(45,1)="ji.gif"
strURLArray_CN(46,0)="美"
strURLArray_CN(46,1)="mei2.gif"
strURLArray_CN(47,0)="么"
strURLArray_CN(47,1)="me.gif"
strURLArray_CN(48,0)="反"
strURLArray_CN(48,1)="fan.gif"
strURLArray_CN(49,0)="吗"
strURLArray_CN(49,1)="ma.gif"
strURLArray_CN(50,0)="帅"
strURLArray_CN(50,1)="shuai.gif"
strURLArray_CN(51,0)="正"
strURLArray_CN(51,1)="zheng.gif"
strURLArray_CN(52,0)="肥"
strURLArray_CN(52,1)="fei.gif"
strURLArray_CN(53,0)="了"
strURLArray_CN(53,1)="liao.gif"
strURLArray_CN(54,0)="右"
strURLArray_CN(54,1)="you.gif"
strURLArray_CN(55,0)="嗯"
strURLArray_CN(55,1)="en.gif"
strURLArray_CN(56,0)="弓"
strURLArray_CN(56,1)="gong.gif"
strURLArray_CN(57,0)="水"
strURLArray_CN(57,1)="shui.gif"
strURLArray_CN(58,0)="胖"
strURLArray_CN(58,1)="pang.gif"
strURLArray_CN(59,0)="什"
strURLArray_CN(59,1)="shen.gif"
strURLArray_CN(60,0)="吧"
strURLArray_CN(60,1)="ba.gif"
strURLArray_CN(61,0)="土"
strURLArray_CN(61,1)="tu.gif"
strURLArray_CN(62,0)="很"
strURLArray_CN(62,1)="hen.gif"
strURLArray_CN(63,0)="火"
strURLArray_CN(63,1)="huo.gif"
strURLArray_CN(64,0)="蠢"
strURLArray_CN(64,1)="chun.gif"
strURLArray_CN(65,0)="他"
strURLArray_CN(65,1)="ta.gif"
strURLArray_CN(66,0)="呢"
strURLArray_CN(66,1)="ne.gif"
strURLArray_CN(67,0)="在"
strURLArray_CN(67,1)="zai.gif"
strURLArray_CN(68,0)="心"
strURLArray_CN(68,1)="xin.gif"
strURLArray_CN(69,0)="爽"
strURLArray_CN(69,1)="shuang.gif"
strURLArray_CN(70,0)="西"
strURLArray_CN(70,1)="xi.gif"
strURLArray_CN(71,0)="你"
strURLArray_CN(71,1)="ni2.gif"
strURLArray_CN(72,0)="呵"
strURLArray_CN(72,1)="he.gif"
strURLArray_CN(73,0)="多"
strURLArray_CN(73,1)="duo.gif"
strURLArray_CN(74,0)="爱"
strURLArray_CN(74,1)="ai3.gif"
strURLArray_CN(75,0)="!"
strURLArray_CN(75,1)="gantan.gif"
strURLArray_CN(76,0)="字"
strURLArray_CN(76,1)="zi1.gif"
strURLArray_CN(77,0)="安"
strURLArray_CN(77,1)="an.gif"
strURLArray_CN(78,0)="拜"
strURLArray_CN(78,1)="bai.gif"
strURLArray_CN(79,0)="包"
strURLArray_CN(79,1)="bao1.gif"
strURLArray_CN(80,0)="抱"
strURLArray_CN(80,1)="bao2.gif"
strURLArray_CN(81,0)="鄙"
strURLArray_CN(81,1)="bi.gif"
strURLArray_CN(82,0)="表"
strURLArray_CN(82,1)="biao.gif"
strURLArray_CN(83,0)="冰"
strURLArray_CN(83,1)="bing1.gif"
strURLArray_CN(84,0)="病"
strURLArray_CN(84,1)="bing2.gif"
strURLArray_CN(85,0)="才"
strURLArray_CN(85,1)="cai1.gif"
strURLArray_CN(86,0)="踩"
strURLArray_CN(86,1)="cai2.gif"
strURLArray_CN(87,0)="陈"
strURLArray_CN(87,1)="chen1.gif"
strURLArray_CN(88,0)="晨"
strURLArray_CN(88,1)="chen2.gif"
strURLArray_CN(89,0)="臭"
strURLArray_CN(89,1)="chou1.gif"
strURLArray_CN(90,0)="错"
strURLArray_CN(90,1)="cuo.gif"
strURLArray_CN(91,0)="打"
strURLArray_CN(91,1)="da1.gif"
strURLArray_CN(92,0)="弹"
strURLArray_CN(92,1)="dan1.gif"
strURLArray_CN(93,0)="蛋"
strURLArray_CN(93,1)="dan2.gif"
strURLArray_CN(94,0)="刀"
strURLArray_CN(94,1)="dao1.gif"
strURLArray_CN(95,0)="滴"
strURLArray_CN(95,1)="di1.gif"
strURLArray_CN(96,0)="地"
strURLArray_CN(96,1)="di2.gif"
strURLArray_CN(97,0)="睇"
strURLArray_CN(97,1)="di3.gif"
strURLArray_CN(98,0)="东"
strURLArray_CN(98,1)="dong.gif"
strURLArray_CN(99,0)="对"
strURLArray_CN(99,1)="dui.gif"
strURLArray_CN(100,0)="伐"
strURLArray_CN(100,1)="fa1.gif"
strURLArray_CN(101,0)="髮"
strURLArray_CN(101,1)="fa2.gif"
strURLArray_CN(102,0)="烦"
strURLArray_CN(102,1)="fan1.gif"
strURLArray_CN(103,0)="疯"
strURLArray_CN(103,1)="feng.gif"
strURLArray_CN(104,0)="哥"
strURLArray_CN(104,1)="ge1.gif"
strURLArray_CN(105,0)="公"
strURLArray_CN(105,1)="gong1.gif"
strURLArray_CN(106,0)="瓜"
strURLArray_CN(106,1)="gua.gif"
strURLArray_CN(107,0)="乖"
strURLArray_CN(107,1)="guai.gif"
strURLArray_CN(108,0)="滚"
strURLArray_CN(108,1)="gun.gif"
strURLArray_CN(109,0)="寒"
strURLArray_CN(109,1)="han1.gif"
strURLArray_CN(110,0)="汗"
strURLArray_CN(110,1)="han2.gif"
strURLArray_CN(111,0)="何"
strURLArray_CN(111,1)="he1.gif"
strURLArray_CN(112,0)="嘿"
strURLArray_CN(112,1)="hei.gif"
strURLArray_CN(113,0)="坏"
strURLArray_CN(113,1)="huai.gif"
strURLArray_CN(114,0)="活"
strURLArray_CN(114,1)="huo1.gif"
strURLArray_CN(115,0)="杰"
strURLArray_CN(115,1)="jie.gif"
strURLArray_CN(116,0)="就"
strURLArray_CN(116,1)="jiu.gif"
strURLArray_CN(117,0)="咔"
strURLArray_CN(117,1)="ka.gif"
strURLArray_CN(118,0)="砍"
strURLArray_CN(118,1)="kan1.gif"
strURLArray_CN(119,0)="看"
strURLArray_CN(119,1)="kan2.gif"
strURLArray_CN(120,0)="可"
strURLArray_CN(120,1)="ke1.gif"
strURLArray_CN(121,0)="克"
strURLArray_CN(121,1)="ke2.gif"
strURLArray_CN(122,0)="苦"
strURLArray_CN(122,1)="ku1.gif"
strURLArray_CN(123,0)="酷"
strURLArray_CN(123,1)="ku2.gif"
strURLArray_CN(124,0)="狂"
strURLArray_CN(124,1)="kuang.gif"
strURLArray_CN(125,0)="啦"
strURLArray_CN(125,1)="la1.gif"
strURLArray_CN(126,0)="蓝"
strURLArray_CN(126,1)="lan1.gif"
strURLArray_CN(127,0)="懒"
strURLArray_CN(127,1)="lan2.gif"
strURLArray_CN(128,0)="老"
strURLArray_CN(128,1)="lao.gif"
strURLArray_CN(129,0)="乐"
strURLArray_CN(129,1)="le.gif"
strURLArray_CN(130,0)="类"
strURLArray_CN(130,1)="lei1.gif"
strURLArray_CN(131,0)="莉"
strURLArray_CN(131,1)="li1.gif"
strURLArray_CN(132,0)="力"
strURLArray_CN(132,1)="li2.gif"
strURLArray_CN(133,0)="聊"
strURLArray_CN(133,1)="liao1.gif"
strURLArray_CN(134,0)="淋"
strURLArray_CN(134,1)="ling.gif"
strURLArray_CN(135,0)="路"
strURLArray_CN(135,1)="lu.gif"
strURLArray_CN(136,0)="麻"
strURLArray_CN(136,1)="ma1.gif"
strURLArray_CN(137,0)="嗎"
strURLArray_CN(137,1)="ma2.gif"
strURLArray_CN(138,0)="嘛"
strURLArray_CN(138,1)="ma3.gif"
strURLArray_CN(139,0)="闷"
strURLArray_CN(139,1)="men1.gif"
strURLArray_CN(140,0)="們"
strURLArray_CN(140,1)="men2.gif"
strURLArray_CN(141,0)="梦"
strURLArray_CN(141,1)="meng.gif"
strURLArray_CN(142,0)="米"
strURLArray_CN(142,1)="mi1.gif"
strURLArray_CN(143,0)="眯"
strURLArray_CN(143,1)="mi2.gif"
strURLArray_CN(144,0)="那"
strURLArray_CN(144,1)="na.gif"
strURLArray_CN(145,0)="乃"
strURLArray_CN(145,1)="nai.gif"
strURLArray_CN(146,0)="难"
strURLArray_CN(146,1)="nan1.gif"
strURLArray_CN(147,0)="闹"
strURLArray_CN(147,1)="nao.gif"
strURLArray_CN(148,0)="呢"
strURLArray_CN(148,1)="ne1.gif"
strURLArray_CN(149,0)="弄"
strURLArray_CN(149,1)="nong.gif"
strURLArray_CN(150,0)="女"
strURLArray_CN(150,1)="nv.gif"
strURLArray_CN(151,0)="爬"
strURLArray_CN(151,1)="pa1.gif"
strURLArray_CN(152,0)="怕"
strURLArray_CN(152,1)="pa2.gif"
strURLArray_CN(153,0)="皮"
strURLArray_CN(153,1)="pi1.gif"
strURLArray_CN(154,0)="屁"
strURLArray_CN(154,1)="pi2.gif"
strURLArray_CN(155,0)="婆"
strURLArray_CN(155,1)="po.gif"
strURLArray_CN(156,0)="淇"
strURLArray_CN(156,1)="qi1.gif"
strURLArray_CN(157,0)="琦"
strURLArray_CN(157,1)="qi2.gif"
strURLArray_CN(158,0)="强"
strURLArray_CN(158,1)="qiang.gif"
strURLArray_CN(159,0)="巧"
strURLArray_CN(159,1)="qiao.gif"
strURLArray_CN(160,0)="切"
strURLArray_CN(160,1)="qie.gif"
strURLArray_CN(161,0)="亲"
strURLArray_CN(161,1)="qing.gif"
strURLArray_CN(162,0)="球"
strURLArray_CN(162,1)="qiu.gif"
strURLArray_CN(163,0)="然"
strURLArray_CN(163,1)="ran.gif"
strURLArray_CN(164,0)="仁"
strURLArray_CN(164,1)="reng.gif"
strURLArray_CN(165,0)="若"
strURLArray_CN(165,1)="ruo.gif"
strURLArray_CN(166,0)="色"
strURLArray_CN(166,1)="se.gif"
strURLArray_CN(167,0)="神"
strURLArray_CN(167,1)="sheng1.gif"
strURLArray_CN(168,0)="沈"
strURLArray_CN(168,1)="sheng2.gif"
strURLArray_CN(169,0)="视"
strURLArray_CN(169,1)="shi1.gif"
strURLArray_CN(170,0)="叔"
strURLArray_CN(170,1)="shu.gif"
strURLArray_CN(171,0)="死"
strURLArray_CN(171,1)="si.gif"
strURLArray_CN(172,0)="算"
strURLArray_CN(172,1)="suan.gif"
strURLArray_CN(173,0)="虽"
strURLArray_CN(173,1)="sui1.gif"
strURLArray_CN(174,0)="孙"
strURLArray_CN(174,1)="sun.gif"
strURLArray_CN(175,0)="它"
strURLArray_CN(175,1)="ta2.gif"
strURLArray_CN(176,0)="糖"
strURLArray_CN(176,1)="tang.gif"
strURLArray_CN(177,0)="陶"
strURLArray_CN(177,1)="tao.gif"
strURLArray_CN(178,0)="头"
strURLArray_CN(178,1)="tou.gif"
strURLArray_CN(179,0)="哇"
strURLArray_CN(179,1)="wa1.gif"
strURLArray_CN(180,0)="娃"
strURLArray_CN(180,1)="wa2.gif"
strURLArray_CN(181,0)="歪"
strURLArray_CN(181,1)="wai.gif"
strURLArray_CN(182,0)="丸"
strURLArray_CN(182,1)="wan1.gif"
strURLArray_CN(183,0)="玩"
strURLArray_CN(183,1)="wan2.gif"
strURLArray_CN(184,0)="晚"
strURLArray_CN(184,1)="wan3.gif"
strURLArray_CN(185,0)="旺"
strURLArray_CN(185,1)="wang.gif"
strURLArray_CN(186,0)="呜"
strURLArray_CN(186,1)="wu1.gif"
strURLArray_CN(187,0)="无"
strURLArray_CN(187,1)="wu2.gif"
strURLArray_CN(188,0)="系"
strURLArray_CN(188,1)="xi1.gif"
strURLArray_CN(189,0)="虾"
strURLArray_CN(189,1)="xia1.gif"
strURLArray_CN(190,0)="谢"
strURLArray_CN(190,1)="xie.gif"
strURLArray_CN(191,0)="醒"
strURLArray_CN(191,1)="xing1.gif"
strURLArray_CN(192,0)="性"
strURLArray_CN(192,1)="xing2.gif"
strURLArray_CN(193,0)="咻"
strURLArray_CN(193,1)="xiu.gif"
strURLArray_CN(194,0)="学"
strURLArray_CN(194,1)="xue.gif"
strURLArray_CN(195,0)="亚"
strURLArray_CN(195,1)="ya.gif"
strURLArray_CN(196,0)="瑶"
strURLArray_CN(196,1)="yao.gif"
strURLArray_CN(197,0)="耶"
strURLArray_CN(197,1)="ye1.gif"
strURLArray_CN(198,0)="叶"
strURLArray_CN(198,1)="ye2.gif"
strURLArray_CN(199,0)="幽"
strURLArray_CN(199,1)="you1.gif"
strURLArray_CN(200,0)="悠"
strURLArray_CN(200,1)="you2.gif"
strURLArray_CN(201,0)="油"
strURLArray_CN(201,1)="you3.gif"
strURLArray_CN(202,0)="有"
strURLArray_CN(202,1)="you4.gif"
strURLArray_CN(203,0)="鱼"
strURLArray_CN(203,1)="yu1.gif"
strURLArray_CN(204,0)="俞"
strURLArray_CN(204,1)="yu2.gif"
strURLArray_CN(205,0)="郁"
strURLArray_CN(205,1)="yu3.gif"
strURLArray_CN(206,0)="晕"
strURLArray_CN(206,1)="yun.gif"
strURLArray_CN(207,0)="怎"
strURLArray_CN(207,1)="zen.gif"
strURLArray_CN(208,0)="炸"
strURLArray_CN(208,1)="zha.gif"
strURLArray_CN(209,0)="卓"
strURLArray_CN(209,1)="zhuo.gif"
strURLArray_CN(210,0)="子"
strURLArray_CN(210,1)="zi2.gif"

'大图形表情库
strURLArray_EM1(0,0)="/傲慢 /;o /am"
strURLArray_EM1(0,1)="0.gif"
strURLArray_EM1(1,0)="/白眼 /;d /by"
strURLArray_EM1(1,1)="1.gif"
strURLArray_EM1(2,0)="/闭嘴 /:x /bz"
strURLArray_EM1(2,1)="2.gif"
strURLArray_EM1(3,0)="/呲牙 /:D /cy"
strURLArray_EM1(3,1)="3.gif"
strURLArray_EM1(4,0)="/大哭 /:'( /dk"
strURLArray_EM1(4,1)="4.gif"
strURLArray_EM1(5,0)="/得意 /8-) /dy"
strURLArray_EM1(5,1)="5.gif"
strURLArray_EM1(6,0)="/发呆 /:  /fd"
strURLArray_EM1(6,1)="6.gif"
strURLArray_EM1(7,0)="/发怒 /:@ /fn"
strURLArray_EM1(7,1)="8.gif"
strURLArray_EM1(8,0)="/困 /|-) /kun"
strURLArray_EM1(8,1)="7.gif"
strURLArray_EM1(9,0)="/鬼脸"
strURLArray_EM1(9,1)="9.gif"
strURLArray_EM1(10,0)="/害羞 /:$ /hx"
strURLArray_EM1(10,1)="10.gif"
strURLArray_EM1(11,0)="/惊讶 /:o /jy"
strURLArray_EM1(11,1)="11.gif"
strURLArray_EM1(12,0)="/可爱 /;-D /ka"
strURLArray_EM1(12,1)="12.gif"
strURLArray_EM1(13,0)="/流汗 /:L /lh"
strURLArray_EM1(13,1)="13.gif"
strURLArray_EM1(14,0)="/难过 /:( /ng"
strURLArray_EM1(14,1)="14.gif"
strURLArray_EM1(15,0)="/撇嘴 /:~ /pz"
strURLArray_EM1(15,1)="15.gif"
strURLArray_EM1(16,0)="/色 /:* /se"
strURLArray_EM1(16,1)="16.gif"
strURLArray_EM1(17,0)="/睡 /:z /shui"
strURLArray_EM1(17,1)="17.gif"
strURLArray_EM1(18,0)="/偷笑 /;P /tx"
strURLArray_EM1(18,1)="18.gif"
strURLArray_EM1(19,0)="晕 /;@ /yun"
strURLArray_EM1(19,1)="19.gif"
strURLArray_EM1(20,0)="/微笑 /:) /wx"
strURLArray_EM1(20,1)="20.gif"
strURLArray_EM1(21,0)="/疑问 /? /yiw"
strURLArray_EM1(21,1)="21.gif"
strURLArray_EM1(22,0)="/抓狂 /:Q /zk"
strURLArray_EM1(22,1)="22.gif"
strURLArray_EM1(23,0)="/酷 /:+ /kuk"
strURLArray_EM1(23,1)="23.gif"

'动态表情图库
strURLArray_EM2(0,0)="/惊讶 /:o /jy"
strURLArray_EM2(0,1)="0.gif"
strURLArray_EM2(1,0)="/撇嘴 /:~ /pz"
strURLArray_EM2(1,1)="1.gif"
strURLArray_EM2(2,0)="/色 /:* /se"
strURLArray_EM2(2,1)="2.gif"
strURLArray_EM2(3,0)="/发呆 /:  /fd"
strURLArray_EM2(3,1)="3.gif"
strURLArray_EM2(4,0)="/得意 /8-) /dy"
strURLArray_EM2(4,1)="4.gif"
strURLArray_EM2(5,0)="/流泪 /:< /ll"
strURLArray_EM2(5,1)="5.gif"
strURLArray_EM2(6,0)="/害羞 /:$ /hx"
strURLArray_EM2(6,1)="6.gif"
strURLArray_EM2(7,0)="/闭嘴 /:x /bz"
strURLArray_EM2(7,1)="7.gif"
strURLArray_EM2(8,0)="/睡 /:z /shui"
strURLArray_EM2(8,1)="8.gif"
strURLArray_EM2(9,0)="/大哭 /:'( /dk"
strURLArray_EM2(9,1)="9.gif"
strURLArray_EM2(10,0)="/尴尬 /:- /gg"
strURLArray_EM2(10,1)="10.gif"
strURLArray_EM2(11,0)="/发怒 /:@ /fn"
strURLArray_EM2(11,1)="11.gif"
strURLArray_EM2(12,0)="/调皮 /:P /tp"
strURLArray_EM2(12,1)="12.gif"
strURLArray_EM2(13,0)="/呲牙 /:D /cy"
strURLArray_EM2(13,1)="13.gif"
strURLArray_EM2(14,0)="/微笑 /:) /wx"
strURLArray_EM2(14,1)="14.gif"
strURLArray_EM2(15,0)="/难过 /:( /ng"
strURLArray_EM2(15,1)="15.gif"
strURLArray_EM2(16,0)="/酷 /:+ /kuk"
strURLArray_EM2(16,1)="16.gif"
strURLArray_EM2(17,0)="/非典 /:# /feid"
strURLArray_EM2(17,1)="17.gif"
strURLArray_EM2(18,0)="/抓狂 /:Q /zk"
strURLArray_EM2(18,1)="18.gif"
strURLArray_EM2(19,0)="/吐 /:t /tu"
strURLArray_EM2(19,1)="19.gif"
strURLArray_EM2(20,0)="/偷笑 /;P /tx"
strURLArray_EM2(20,1)="20.gif"
strURLArray_EM2(21,0)="/可爱 /;-D /ka"
strURLArray_EM2(21,1)="21.gif"
strURLArray_EM2(22,0)="/白眼 /;d /by"
strURLArray_EM2(22,1)="22.gif"
strURLArray_EM2(23,0)="/傲慢 /;o /am"
strURLArray_EM2(23,1)="23.gif"
strURLArray_EM2(24,0)="/饥饿 /:g /jie"
strURLArray_EM2(24,1)="24.gif"
strURLArray_EM2(25,0)="/困 /|-) /kun"
strURLArray_EM2(25,1)="25.gif"
strURLArray_EM2(26,0)="/惊恐 /:! /jk"
strURLArray_EM2(26,1)="26.gif"
strURLArray_EM2(27,0)="/流汗 /:L /lh"
strURLArray_EM2(27,1)="27.gif"
strURLArray_EM2(28,0)="/憨笑 /:> /hanx"
strURLArray_EM2(28,1)="28.gif"
strURLArray_EM2(29,0)="/大兵 /:; /db"
strURLArray_EM2(29,1)="29.gif"
strURLArray_EM2(30,0)="/奋斗 /;f /fendou"
strURLArray_EM2(30,1)="30.gif"
strURLArray_EM2(31,0)="/咒骂 /:-S /zhm"
strURLArray_EM2(31,1)="31.gif"
strURLArray_EM2(32,0)="/疑问 /? /yiw"
strURLArray_EM2(32,1)="32.gif"
strURLArray_EM2(33,0)="/嘘 /:x /xu"
strURLArray_EM2(33,1)="33.gif"
strURLArray_EM2(34,0)="/晕 /;@ /yun"
strURLArray_EM2(34,1)="34.gif"
strURLArray_EM2(35,0)="/折磨 /:8 /zhem"
strURLArray_EM2(35,1)="35.gif"
strURLArray_EM2(36,0)="/衰 /;! /shuai"
strURLArray_EM2(36,1)="36.gif"
strURLArray_EM2(37,0)="/骷髅 /!!! /kl"
strURLArray_EM2(37,1)="37.gif"
strURLArray_EM2(38,0)="/敲打 /xx /qiao"
strURLArray_EM2(38,1)="38.gif"
strURLArray_EM2(39,0)="/再见 /bye /zj"
strURLArray_EM2(39,1)="39.gif"
strURLArray_EM2(40,0)="/闪 /go /shan"
strURLArray_EM2(40,1)="40.gif"
strURLArray_EM2(41,0)="/发抖 /shake /fad"
strURLArray_EM2(41,1)="41.gif"
strURLArray_EM2(42,0)="/爱情 /love /aiq"
strURLArray_EM2(42,1)="42.gif"
strURLArray_EM2(43,0)="/跳 /jump /tiao"
strURLArray_EM2(43,1)="43.gif"
strURLArray_EM2(44,0)="/找 /find /zhao"
strURLArray_EM2(44,1)="44.gif"
strURLArray_EM2(45,0)="/美眉 /& /mm"
strURLArray_EM2(45,1)="45.gif"
strURLArray_EM2(46,0)="/猪头 /pig /zt"
strURLArray_EM2(46,1)="46.gif"
strURLArray_EM2(47,0)="/猫咪 /cat /maom"
strURLArray_EM2(47,1)="47.gif"
strURLArray_EM2(48,0)="/小狗 /dog /xg"
strURLArray_EM2(48,1)="48.gif"
strURLArray_EM2(49,0)="/拥抱 /hug /yb"
strURLArray_EM2(49,1)="49.gif"
strURLArray_EM2(50,0)="/钱 /$ /qian"
strURLArray_EM2(50,1)="50.gif"
strURLArray_EM2(51,0)="/灯泡 /(!) /dp"
strURLArray_EM2(51,1)="51.gif"
strURLArray_EM2(52,0)="/酒杯 /cup /bei"
strURLArray_EM2(52,1)="52.gif"
strURLArray_EM2(53,0)="/蛋糕 /cake /dg"
strURLArray_EM2(53,1)="53.gif"
strURLArray_EM2(54,0)="/闪电 /li /shd"
strURLArray_EM2(54,1)="54.gif"
strURLArray_EM2(55,0)="/炸弹 /bome /zhd"
strURLArray_EM2(55,1)="55.gif"
strURLArray_EM2(56,0)="/刀 /kn /dao"
strURLArray_EM2(56,1)="56.gif"
strURLArray_EM2(57,0)="/足球 /footb /zq"
strURLArray_EM2(57,1)="57.gif"
strURLArray_EM2(58,0)="/音乐 /music /yy"
strURLArray_EM2(58,1)="58.gif"
strURLArray_EM2(59,0)="/便便 /shit /bb"
strURLArray_EM2(59,1)="59.gif"
strURLArray_EM2(60,0)="/咖啡 /coffee /kf"
strURLArray_EM2(60,1)="60.gif"
strURLArray_EM2(61,0)="/饭 /eat /fan"
strURLArray_EM2(61,1)="61.gif"
strURLArray_EM2(62,0)="/药丸 /pill /yw"
strURLArray_EM2(62,1)="62.gif"
strURLArray_EM2(63,0)="/玫瑰 /rose /mg"
strURLArray_EM2(63,1)="63.gif"
strURLArray_EM2(64,0)="/凋谢 /fade /dx"
strURLArray_EM2(64,1)="64.gif"
strURLArray_EM2(65,0)="/吻 /kiss /wen"
strURLArray_EM2(65,1)="65.gif"
strURLArray_EM2(66,0)="/心 /heart /xin"
strURLArray_EM2(66,1)="66.gif"
strURLArray_EM2(67,0)="/心碎 /break /xs"
strURLArray_EM2(67,1)="67.gif"
strURLArray_EM2(68,0)="/会议 /meeting /hy"
strURLArray_EM2(68,1)="68.gif"
strURLArray_EM2(69,0)="/礼物 /gift /lw"
strURLArray_EM2(69,1)="69.gif"
strURLArray_EM2(70,0)="/电话 /TV /dh"
strURLArray_EM2(70,1)="70.gif"
strURLArray_EM2(71,0)="/时间 /time /sj"
strURLArray_EM2(71,1)="71.gif"
strURLArray_EM2(72,0)="/邮件 /email /yj"
strURLArray_EM2(72,1)="72.gif"
strURLArray_EM2(73,0)="/电视 /TV /ds"
strURLArray_EM2(73,1)="73.gif"
strURLArray_EM2(74,0)="/太阳 /sun /ty"
strURLArray_EM2(74,1)="74.gif"
strURLArray_EM2(75,0)="/月亮 /moon /yl"
strURLArray_EM2(75,1)="75.gif"
strURLArray_EM2(76,0)="/强 /strong /qiang"
strURLArray_EM2(76,1)="76.gif"
strURLArray_EM2(77,0)="/弱 /weak /tuo"
strURLArray_EM2(77,1)="77.gif"
strURLArray_EM2(78,0)="/握手 /share /ws"
strURLArray_EM2(78,1)="78.gif"
strURLArray_EM2(79,0)="/胜利 /v /shl"
strURLArray_EM2(79,1)="79.gif"
strURLArray_EM2(80,0)="/多多 /<D> /dd"
strURLArray_EM2(80,1)="80.gif"
strURLArray_EM2(81,0)="/美女 /<J> /mn"
strURLArray_EM2(81,1)="81.gif"
strURLArray_EM2(82,0)="/汉良 /<H> /hl"
strURLArray_EM2(82,1)="82.gif"
strURLArray_EM2(83,0)="/毛毛 /<M> /mamao"
strURLArray_EM2(83,1)="83.gif"
strURLArray_EM2(84,0)="/Q仔 /<QQ> /qz"
strURLArray_EM2(84,1)="84.gif"
strURLArray_EM2(85,0)="/飞吻 /<L> /fw"
strURLArray_EM2(85,1)="85.gif"
strURLArray_EM2(86,0)="/怄火 /<O> /oh"
strURLArray_EM2(86,1)="86.gif"
strURLArray_EM2(87,0)="/白酒 /<B> /bj"
strURLArray_EM2(87,1)="87.gif"
strURLArray_EM2(88,0)="/汽水 /<U> /qsh"
strURLArray_EM2(88,1)="88.gif"
strURLArray_EM2(89,0)="/西瓜 /<W> /xig"
strURLArray_EM2(89,1)="89.gif"
strURLArray_EM2(90,0)="/下雨 /<!!> /xy"
strURLArray_EM2(90,1)="90.gif"
strURLArray_EM2(91,0)="/多云 /<~> /duoy"
strURLArray_EM2(91,1)="91.gif"
strURLArray_EM2(92,0)="/雪人 /<Z> /xr"
strURLArray_EM2(92,1)="92.gif"
strURLArray_EM2(93,0)="/星星 /<*> /xixing"
strURLArray_EM2(93,1)="93.gif"
strURLArray_EM2(94,0)="/女 /<OO> /nv"
strURLArray_EM2(94,1)="94.gif"
strURLArray_EM2(95,0)="/男 /<11> /nan"
strURLArray_EM2(95,1)="95.gif"

'--------------------------------------------------------------------------------      
   
'   随机使用字库
    Randomize             
    iLib=Cint(Rnd())
              
    htmlCode=Replace(htmlCode,"&nbsp;"," ")   
   
    Dim strTempArray
   
    if iLib=0 then
   '大表情替换
    For i=0 to Ubound(strURLArray_EM1)
        strTempArray=split(strURLArray_EM1(i,0)," ")
        For j=0 to Ubound(strTempArray)
            htmlCode=Replace(htmlCode,strTempArray(j),"<img src="""&strURL(5)&strURLArray_EM1(i,1)&""">")
        Next  
    Next
   
    else   
  
   '动态表情替换
    For i=0 to Ubound(strURLArray_EM2)
        strTempArray=split(strURLArray_EM2(i,0)," ")
        For j=0 to Ubound(strTempArray)
            htmlCode=Replace(htmlCode,strTempArray(j),"<img src="""&strURL(6)&strURLArray_EM2(i,1)&""">")
        Next   
    Next
   
    end if
    
    Set objRegExp=new RegExp
    objRegExp.IgnoreCase =true
    objRegExp.Global=True
   
    '回复标签
    objRegExp.Pattern="(\[QUOTE\][\S\s]*\[\/QUOTE\])"
    strContent=objRegExp.Replace(htmlCode,"#&")       

    '网易、搜狐、新浪BBS
    'objRegExp.Pattern="【.*"
    'strContent=objRegExp.Replace(strContent,"#&")           

    'objRegExp.Pattern=">.*"
    'strContent=objRegExp.Replace(strContent,"#>")       

    'objRegExp.Pattern=":.*"
    'strContent=objRegExp.Replace(strContent,"#:")   

    '所有HTML标签内容
    objRegExp.Pattern="<[^>]*>"    
    strContent=objRegExp.Replace(strContent,"#@")   

    '自动识别http开头的网址
    objRegExp.Pattern = "((http|https|ftp|rtsp|mms):(\/\/|\\\\)[A-Za-z0-9\./=\?%\-&_~`@[\]\':+!]+)"
    strContent = objRegExp.Replace(strContent,"#^")
    'objRegExp.Pattern = "((http|https|ftp|rtsp|mms):(\/\/|\\\\)[A-Za-z0-9\./=\?%\-&_~`@[\]\':+!]+)$"
    'strContent = objRegExp.Replace(strContent,"#")
    'objRegExp.Pattern = "([^>=""])((http|https|ftp|rtsp|mms):(\/\/|\\\\)[A-Za-z0-9\./=\?%\-&_~`@[\]\':+!]+)"
 'strContent = objRegExp.Replace(strContent,"#")

 '自动识别www等开头的网址
 objRegExp.Pattern = "www.[A-Za-z0-9\./=\?%\-&_~`@[\]\':+!]+"
 strContent = objRegExp.Replace(strContent,"#$") 
 
    '自动识别Email地址,如打开本功能在浏览内容很多的帖子会引起服务器停顿
    objRegExp.Pattern = "([^(=)])((\w)+[@]{1}((\w)+[.]){1,3}(\w)+)"
    strContent = objRegExp.Replace(strContent,"#%")        
    
    'Response.Write strContent
    'Response.End 

    For i=1 to len(strContent)       
       strTmp= Mid(strContent,i,1)
       iAsc=asc(strTmp)
      
       if strTmp=" " then
          strTmp="&nbsp;"
       end if
         
       if strTmp=chr(13) then
          strTmp="<br>"
       end if
     
       if isNumeric(strTmp) then
           strTmp="<img src="""&strURL(4)&strTmp&".gif"&""">"
       else   
          
      
       if (iAsc>0) and (iAsc<123) then
         '英文库
         For j=0 to Ubound(strURLArray_EN)
           if Lcase(strTmp)=strURLArray_EN(j,0) then
              strTmp="<img src="""&strURL(iLib)&strURLArray_EN(j,1)&""">"
              exit for
           end if   
         Next     
                     
       else       
         '中文库
         For j=0 to Ubound(strURLArray_CN)
           if Lcase(strTmp)=strURLArray_CN(j,0) then
              strTmp="<img src="""&strURL(3)&strURLArray_CN(j,1)&""">"
              exit for
           end if   
         Next
        
       end if
     
      end if
       strReplace=strReplace&strTmp     

    Next  
   
    '还原回复标签中的内容
    objRegExp.Pattern="\[QUOTE\][\S\s]*\[\/QUOTE\]"
    Set Matches = objRegExp.Execute(htmlCode) 
   
    For Each Match in Matches    
        strReplace=Replace(strReplace,"#&",Match.value,1,1,1)
    Next
    '还原所有HTML标记内的内容
    objRegExp.Pattern="<[^>]*>"   
    Set Matches = objRegExp.Execute(htmlCode) 
   
    For Each Match in Matches    
        strReplace=Replace(strReplace,"#@",Match.value,1,1,1)
    Next   
   
    '还原http网址
    objRegExp.Pattern = "((http|https|ftp|rtsp|mms):(\/\/|\\\\)[A-Za-z0-9\./=\?%\-&_~`@[\]\':+!]+)"
    Set Matches = objRegExp.Execute(htmlCode) 
   
    For Each Match in Matches    
        strReplace=Replace(strReplace,"#^",Match.value,1,1,1)
    Next   

    '还原www网址
    objRegExp.Pattern = "www.[A-Za-z0-9\./=\?%\-&_~`@[\]\':+!]+"
    Set Matches = objRegExp.Execute(htmlCode) 
   
    For Each Match in Matches    
        strReplace=Replace(strReplace,"#$",Match.value,1,1,1)
    Next     
   
    '还原email地址
    objRegExp.Pattern = "([^(=)])((\w)+[@]{1}((\w)+[.]){1,3}(\w)+)"
    Set Matches = objRegExp.Execute(htmlCode) 
   
    For Each Match in Matches    
        strReplace=Replace(strReplace,"#%",Match.value,1,1,1)
    Next      

    preProcess=strReplace
    Set objRegExp=Nothing 

end function

</script>

shelly 发表于  2004-02-29 16:05:09


   关于NETMEETING的想法~~~    |   阅读全文   |   评论(1)  |  引用(trackback0)  

NETMEETING用的 1720 及 1503 端口,今天想,一定可以检测对方的NETMEETING是否有打开,这样,就可以用PHP做一个NETMEETING在线状态的页子。呵呵,就可以随时知道 是否可以同对方NETMEETING。呵呵,有道理。立马用TELNET 测试了一下。 /:~ 不懂NETMEETING用的什么协议,有没有这方面的资料~~(PS:知道的朋友请留个信哦~~) 但用TELNET 能连接上 对方的 1720 及 1503 端口,估计八成对方开了NETMEETING了~~ 呵呵,我就是想法太多,付之实践的太小,先在这里把想法写下来,将来一天,有时间了,慢慢地搞~~ :)

shelly 发表于  2004-02-28 08:24:13


   键盘抓取DX屏~~    |   阅读全文   |   评论(2)  |  引用(trackback1)  
从《三人行》看到,呵呵,不错的知识点:(未经测试,有测试成功的朋友请留个话话哦~~   原文件如下~~
  Print Screen键无法截取DirectX图,没关系,只要我们略施小计,就可以让它大展拳脚。在“开始”菜单的“运行”中输入Regedit,打开注册表编辑器,然后展开注册表HKEY_LOCAL_MACHINE\Software\Microsoft\DirectDraw分支,新建一个“DWORD”值,并将其重命名为“EnablePrintScreen”,填入键值“1”,即可使Print Screen键具有截取DirectX图的功能。.....

From: http://srx.8866.org/dispbbs.asp?boardid=4&id=38&star=1
shelly 发表于  2004-02-27 08:21:54


   郁闷~~ 无意中发现这张图片~~~    |   阅读全文   |   评论(4)  |  引用(trackback1)  
听海人的签名

巧合?亦或?郁闷~~~~~~~ 唉~~~~~~~~~~~~~~~
shelly 发表于  2004-02-27 08:00:30


   修正 《春》模板BUG    |   阅读全文   |   评论(0)  |  引用(trackback0)  
默认的《春》模板 的链接没有放在“我的链接”表格内。已修正~~~
shelly 发表于  2004-02-26 10:21:25


   用Uninstaller 做注册表监视器,成功~    |   阅读全文   |   评论(0)  |  引用(trackback1)  
有些恶意网站通常改掉注册表。除了用防病毒软件外,用Uninstaller 去监视注册表的改动,这样,就知道恶意网站对我们注册表做了些什么手脚。呵呵,不错的软件。希望哪天能做个FLASH CAM的教程出来。晕晕,莫时间啊~~~~~~
昨天被告知现有的库存系统要重做。晕晕,我痛苦,拟定三月份回老家一趟,不知能不能请到假。~~~唉~~~~~郁闷~~~~
shelly 发表于  2004-02-26 09:30:43


   DEBUG 的使用~~~    |   阅读全文   |   评论(0)  |  引用(trackback0)  
早在读书时,有些喜欢这个工具,收集了相关资料。汗,记性不好,把资料又放四川老家了,刚好在GSN小组上看到这篇文章,就转过来,留个存档~~~~
启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。
Debug [[drive:][path] filename [parameters]]
参数
[drive:][path] filename
指定要测试的可执行文件的位置和名称。
parameters
指定要测试的可执行文件所需要的任何命令行信息。
++
说明
使用 Debug 命令但不指定要测试的文件
如果使用没有位置和文件名的 Debug 命令,然后键入所有的 Debug 命令以响应 Debug 提示符,连字符 (-)。
Debug 命令
以下是 Debug 命令列表:
? 显示 Debug 命令列表。
a 汇编 8086/8087/8088 记忆码。
c 比较内存的两个部分。
d 显示部分内存的内容。
e 从指定地址开始,将数据输入到内存。
f 使用指定值填充一段内存。
g 运行在内存中的可执行文件。
h 执行十六进制运算。
i 显示来自特定端口的 1 字节值。
l 将文件或磁盘扇区内容加载到内存。
m 复制内存块中的内容
/n 为 l 或 w 命令指定文件,或者指定正在测试的文件的参数。
o 向输出端口发送 1 个字节的值。
p 执行循环、重复的字符串指令、软件中断或子例程。
q 停止 Debug 会话。
r 显示或改变一个或多个寄存器。
s 在部分内存中搜索一个或多个字节值的模式。
t 执行一条指令,然后显示所有寄存器的内容、所有标志的状态和 Debug 下一步要执行的指令的解码形式。
u 反汇编字节并显示相应的原语句。
w 将被测试文件写入磁盘。
xa 分配扩展内存。
xd 释放扩展内存。
xm 映射扩展内存页。
xs 显示扩展内存的状态。
分隔命令参数
所有 Debug 命令都接受参数,除了 q 命令之外。可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。因此,以下命令等价:
dcs:100 110
d cs:100 110
d,cs:100,110
指定有效地址项
Debug 命令中的 address 参数指定内存位置。Address 是一个包含字母段记录的二位名称或一个四位字段地址加上一个偏移量。可以忽略段寄存器或段地址。a,g,l,t,u 和 w 命令的默认段是 CS。所有其他命令的默认段是 DS。所有数值均为十六进制格式。
有效地址如下:
CS:0100
04BA:0100
在段名和偏移量之间要有冒号。
指定有效范围项
Debug 命令中的 range 参数指定了内存的范围。可以为 range 选择两种格式:起始地址和结束地址,或者起始地址和长度范围(由 l 表示)。
例如,下面的两个语法都可以指定从 CS:100 开始的 16 字节范围:
cs:100 10f
cs:100 l 10
++
Debug 子命令
选择 Debug 命令以获得详细信息。
Debug:A(汇编)
Debug:C(比较)
Debug(转储)
Debug:E(键入)
Debug:F(填充)
Debug:G(转向)
Debug:H(十六进制)
Debug:I(输入)
Debug:L(加载)
Debug:M(移动)
Debug:N(名称)
Debug:O(输出)
Debug:P(执行)
Debug:Q(退出)
Debug:r(寄存器)
Debug:s(搜索)
Debug:T(跟踪)
Debug:U(反汇编)
Debug:W(写入)
Debug:XA(分配扩展内存)
Debug:XD(取消分配扩展内存)
Debug:XM(映射扩展内存页)
Debug:XS(显示扩展内存状态)
***********************Debug子命令******************************
Debug:A(汇编)
直接将 8086/8087/8088 记忆码合并到内存。
该命令从汇编语言语句创建可执行的机器码。所有数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作代码(操作码)前指定前缀记忆码。
a [address]
参数
address
指定键入汇编语言指令的位置。对 address 使用十六进制值,并键入不以“h”字符结尾的每个值。如果不指定地址,a 将在它上次停止处开始汇编。
有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的 Debug E(键入)。
有关反汇编字节的信息,请单击“相关主题”列表中的 Debug U(反汇编)。
范例
a 命令支持所有形式的间接注册命令,如下例所示:
add bx,34[bp+2].[si-1]
pop [bp+di]
push [si] )
还支持所有操作码同义词,如下例所示:
loopz 100
loope 100
ja 200
jnbe 200
对于 8087 操作码,必须指定 wait 或 fwait 前缀,如下例所示:
fwait fadd st,st(3) ; this line assembles
; an fwait prefix
说明
使用记忆码
段的替代记忆码为 cs:、ds:、es: 和 ss:。远程返回的记忆码是 retf。字符串处理的记忆码必须明确声明字符串大小。例如,使用 movsw 可以移动 16 位的字串,使用 movsb 可以移动 8 位字节串。
汇编跳转和调用
汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。通过使用 near 或 far 前缀可以替代这样的跳转或调用,如下例所示:
-a0100:0500
0100:0500 jmp 502 ; a 2-byte short jump
0100:0502 jmp near 505 ; a 3-byte near jump
0100:0505 jmp far 50a ; a 5-byte far jump
可以将 near 前缀缩写为 ne。
区分字和字节内存位置
当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 word ptr 或者前缀 byte ptr 指定数据类型。可接受的缩写分别是 wo 和 by。以下范例显示两种格式:
dec wo [si]
neg byte ptr [128]
指定操作数
Debug 使用包括在中括号 ([ ]) 的操作数引用内存地址的习惯用法。这是因为另一方面 Debug 不能区分立即操作数和内存地址的操作数。以下范例显示两种格式:
mov ax,21 ; load AX with 21h
mov ax,[21] ; load AX with the
; contents of
; memory location 21h
使用伪指令
使用 a 命令提供两个常用的伪指令:db 操作码,将字节值直接汇编到内存,dw 操作码,将字值直接汇编到内存。以下是两个伪指令的范例:
db 1,2,3,4,"THIS IS AN EXAMPLE"
db 'THIS IS A QUOTATION MARK:"'
db "THIS IS A QUOTATION MARK:'"
dw 1000,2000,3000,"BACH"
++
Debug:C(比较)
比较内存的两个部分。
c range address
参数
range
指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。有关有效的 range 值的信息,请单击“相关主题”列表中的“Debug 说明”。
address
指定要比较的第二个内存区域的起始地址。有关有效 address 值的信息,请单击“相关主题”列表中的“Debug 说明”。
++
范例
以下命令具有相同效果:
c100,10f 300
c100l10 300
每个命令都对 100h 到 10Fh 的内存数据块与 300h 到 30Fh 的内存数据块进行比较。
Debug 响应前面的命令并显示如下信息(假定 DS = 197F):
197F:0100 4D E4 197F:0300
197F:0101 67 99 197F:0301
197F:0102 A3 27 197F:0302
197F:0103 35 F3 197F:0303
197F:0104 97 BD 197F:0304
197F:0105 04 35 197F:0305
197F:0107 76 71 197F:0307
197F:0108 E6 11 197F:0308
197F:0109 19 2C 197F:0309
197F:010A 80 0A 197F:030A
197F:010B 36 7F 197F:030B
197F:010C BE 22 197F:030C
197F:010D 83 93 197F:030D
197F:010E 49 77 197F:030E
197F:010F 4F 8A 197F:030F
注意列表中缺少地址 197F:0106 和 197F:0306。这表明那些地址中的值是相同的。
++
说明
如果 range 和 address 内存区域相同,Debug 将不显示任何内容而直接返回到 Debug 提示符。如果有差异,Debug 将按如下格式显示:
address1 byte1 byte2 addess2
++++
Debug(转储)
显示一定范围内存地址的内容。
d [range]
参数
range
指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。有关有效的 range 值的信息,请单击“相关主题”列表中的“Debug 说明”。如果不指定 range,Debug 程序将从以前 d 命令中所指定的地址范围的末尾开始显示 128 个字节的内容。
有关显示寄存器内容的信息,请单击“相关主题”列表中的 Debug R(寄存器)。
++
范例
假定键入以下命令:
dcs:100 10f
Debug 按以下格式显示范围中的内容:
04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER......
如果在没有参数的情况下键入 d 命令,Debug 按以前范例中所描述的内容来编排显示格式。显示的每行以比前一行的地址大 16 个字节(如果是显示 40 列的屏幕,则为 8 个字节)的地址开头。
对于后面键入的每个不带参数的 d 命令,Debug 将紧接在最后显示的命令后立即显示字节内容。
如果键入以下命令,Debug 将从 CS:100 开始显示 20h 个字节的内容:
dcs:100 l 20
如果键入以下命令,Debug 将显示范围从 CS 段的 100h 到 115h 中所有字节的内容:
dcs:100 115
++
说明
当使用 d 命令时,Debug 以两个部分显示内存内容:十六进制部分(每个字节的值都用十六进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII 码字符表示)。每个非打印字符在显示的 ASCII 部分由句号 (.) 表示。每个显示行显示 16 字节的内容,第 8 字节和第 9 字节之间有一个连字符。每个显示行从 16 字节的边界上开始。
++
Debug:E(键入)
将数据输入到内存中指定的地址。
可以按十六进制或 ASCII 格式键入数据。以前存储在指定位置的任何数据全部丢失。
e address [list]
参数
address
指定输入数据的第一个内存位置。
list
指定要输入到内存的连续字节中的数据。
有关集成记忆码的信息,请单击“相关主题”列表中的 Debug A(汇编)。
有关显示内存部分内容的信息,请单击“相关主题”列表中的 Debug D (转储)。
++
范例
假定键入以下命令:
ecs:100
Debug 按下面的格式显示第一个字节的内容:
04BA:0100 EB.
要将该值更改为 41,请在插入点键入 41,如下所示:
04BA:0100 EB.41_
可以用一个 e 命令键入连续的字节值。在键入新值后按 SPACEBAR(空格键),而不是按 ENTER 键。Debug 显示下一个值。在此范例中,如果按三次 SPACEBAR(空格键),Debug 将显示下面的值:
04BA:0100 EB.41 10. 00. BC._
要将十六进制值 BC 更改为 42,请在插入点键入 42,如下所示:
04BA:0100 EB.41 10. 00. BC.42_
假定决定值 10 应该是 6F。要纠正该值,请按 HYPHEN 键两次以返回到地址 0101(值 10)。Debug 显示以下内容:
04BA:0100 EB.41 10. 00. BC.42-
04BA:0102 00.-
04BA:0101 10._
在插入点键入 6f 更改值,如下所示:
04BA:0101 10.6f_
按 ENTER 停止 e 命令并返回到 Debug 提示符下。
以下是字符串项的范例:
eds:100 "This is the text example"
该字符串将从 DS:100 开始填充 24 个字节。
++
说明
使用 address 参数
如果在没有指定可选的 list 参数的值情况下指定 address 的值,Debug 将显示地址和内容,在下一行重复地址,并等待您的输入。此时,您可以执行下列操作之一:
· 替换字节值。为此,请在当前值后键入新值。如果您键入的值不是有效的十六进制值,或该值包含两个以上的数字,则 Debug 不会回显无效或额外的字符。
· 进入下一个字节。为此,请按 SPACEBAR(空格键)。要更改该字节中的值,请在当前值后键入新值。如果按 SPACEBAR(空格键)时,移动超过了 8 位界限,Debug 程序将显示新的一行并在行首显示新地址。
· 返回到前一个字节。为此,请按 HYPHEN 键 (-)。可以反复按 HYPHEN 键 (-) 向后移动超过多个字节。在按 HYPHEN 时,Debug 开始新行并显示当前地址和字节值。
· 停止执行 e 命令。为此,请按 ENTER 键。在任何字节位置都可以按 ENTER。
使用 list 参数
如果指定 list 参数的值,随后的 e 命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。
List 值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。
++++
Debug:F(填充)
使用指定的值填充指定内存区域中的地址。
可以指定十六进制或 ASCII 格式表示的数据。任何以前存储在指定位置的数据将会丢失。
f range list
参数
range
指定要填充内存区域的起始和结束地址,或起始地址和长度。关于有效的 range 值的信息,请单击“相关主题”列表中的“Debug 说明”。
list
指定要输入的数据。List 可以由十六进制数或引号包括起来的字符串组成。
++
范例
假定键入以下命令:
f04ba:100l100 42 45 52 54 41
作为响应,Debug 使用指定的值填充从 04BA:100 到 04BA:1FF 的内存位置。Debug 重复这五个值直到 100h 个字节全部填满为止。
++
说明
使用 range 参数
如果 range 包含的字节数比 list 中的数值大,Debug 将在 list 中反复指派值,直到 range 中的所有字节全部填充。
如果在 range 中的任何内存损坏或不存在,Debug 将显示错误消息并停止 f 命令。
使用 list 参数
如果 list 包含的数值多于 range 中的字节数,Debug 将忽略 list 中额外的值。
++
Debug:G(转向)
运行当前在内存中的程序。
g [=address] [breakpoints]
参数
=address
指定当前在内存中要开始执行的程序地址。如果不指定 address,Windows 2000 将从 CS:IP 寄存器中的当前地址开始执行程序。
breakpoints
指定可以设置为 g 命令的部分的 1 到 10 个临时断点。
有关执行循环、重复的字符串指令、软件中断或子程序的信息,请单击“相关主题”列表中的 Debug P(执行)。
有关执行指令的信息,请单击“相关主题”列表中的 Debug T(跟踪)。
范例
假定键入以下命令:
gcs:7550
Windows 2000 运行当前内存中的程序,直到执行到 CS 段中的断点地址 7550 为止。Debug 将显示寄存器的内容和标志的状态并结束 g 命令。
以下命令设置两个断点:
gcs:7550, cs:8000
如果在 Debug 遇到断点之后再次键入 g 命令,将从在断点之后的指令开始执行,而不是在通常的开始地址执行。
++
说明
使用 address 参数
必须在 address 参数之前使用等号 (=) 以区分开始地址 (address) 和断点地址 (breakpoints)。
指定断点
程序在它遇到的第一个断点处停止,而不论您在 breakpoint 列表的什么位置键入断点。Debug 在每个断点处用中断代码代替原始指令。
当程序到达断点时,Debug 将所有断点地址恢复到它们的最初指令并显示所有寄存器的内容、所有标记的状态以及最后执行指令的解码形式。Debug 显示的信息与使用 Debug r(寄存器)命令并指定断点时所显示的信息相同。
如果不在断点处停止程序,Debug 程序将不使用原始指令替换中断代码。
设置断点的限制
可以只在包含 8086 操作代码(操作码)的第一个字节的地址上设置断点。如果设置了 10 个以上的断点,Debug 将显示以下信息:
bp error
对用户堆栈指针的要求
用户堆栈指针必须有效且必须有 6 个字节可用于 g 命令。该命令使用 iret 指令跳转到正在被测试的程序。Debug 设置用户堆栈指针并将用户标志、代码段寄存器和指令指针压入用户堆栈。(如果用户堆栈无效或太小,操作系统可能会失败。)Debug 在指定的断点处设置中断代码 (0CCh)。
重新启动程序
不要在 Windows 2000 显示以下消息后尝试重新启动程序;
Program terminated normally
要正确地运行程序,必须通过使用 Debug n(名称)和 l(加载)命令重新加载该程序。
++++
Debug:H(十六进制)
对指定的两个参数执行十六进制运算。
h value1 value2
参数
value1
代表从 0 到 FFFFh 范围内的任何十六进制数字。
value2
代表从 0 到 FFFFh 范围内第二个十六进制数字。
++
范例
假定键入以下命令:
h19f 10a
Debug 执行运算并显示以下结果。
02A9 0095
++
说明
Debug 首先将指定的两个参数相加,然后从第一个参数中减去第二个参数。这些计算的结果显示在一行中:先计算和,然后计算差。
++++
Debug:I(输入)
从指定的端口读取并显示一个字节值。
i port
参数
port
按地址指定输入端口。地址可以是 16 位的值。
有关将字节值发送到输出端口的信息,请单击“相关主题”列表中的 Debug O(输出)。
++
范例
假定键入以下命令:
i2f8
同时假定端口的字节值是 42h。Debug 读取该字节,并将其值显示如下:
42
++
Debug:L(加载)
将某个文件或特定磁盘扇区的内容加载到内存。
要从磁盘文件加载 BX:CX 寄存器中指定的字节数内容,请使用以下语法:
l [address]
要略过 Windows 2000 文件系统并直接加载特定的扇区,请使用以下语法:
l address drive start number
参数
address
指定要在其中加载文件或扇区内容的内存位置。如果不指定 address,Debug 将使用 CS 寄存器中的当前地址。
drive
指定包含读取指定扇区的磁盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C 等。
start
指定要加载其内容的第一个扇区的十六进制数。
number
指定要加载其内容的连续扇区的十六进制数。只有要加载特定扇区的内容而不是加载 debug 命令行或最近的 Debug n(名称)命令中指定的文件时,才能使用 drive、start 和 number 参数。
有关指定用于 l 命令的文件的信息,请单击“相关主题”列表中的 Debug n(名称)。
有关写入调试到磁盘的文件的信息,请单击“相关主题”列表中的 Debug w(写入)。
++
范例
假定启动 Debug 并键入以下命令:
nfile.com
现在可以键入 l 命令以加载 File.com。Debug 将加载文件并显示 Debug 提示符。
假定需要从驱动器 C 将起始逻辑扇区为 15 (0Fh) 的 109 (6Dh) 个扇区的内容加载到起始地址为 04BA:0100 的内存中。为此,请键入以下命令:
l04ba:100 2 0f 6d
++
注意
使用不带参数的 l 命令
当使用不带参数的 l 命令时,在 debug 命令行上指定的文件将加载到内存中,从地址 CS:100 开始。Debug 同时将 BX 和 CX 寄存器设置为加载的字节数。如果不在 debug 命令行指定文件,所装入的文件将是最近使用 n 命令经常指定的文件。
使用具有 address 参数的 1 命令
如果使用带 address 参数的 l 命令,Debug 将从内存位置 address 开始加载文件或指定扇区的内容。
使用带全部参数的 l 命令
如果使用带所有参数的 l 命令,Debug 将加载指定磁盘扇区的内容而不是加载文件。
加载特定扇区的内容
指定范围内的每个扇区均从 drive 读取。Debug 从 start 开始加载,直到在 number 中指定的扇区数中的内容全部被加载。
加载 .exe 文件
Debug 忽略 .exe 文件的地址 address 参数。如果指定 .exe 文件,Debug 将文件重新定位到 .exe 文件的标题中指定的加载地址。在 .exe 文件被加载到内存前,标题自身从 .exe 文件脱离,因此磁盘上的 .exe 文件大小与内存中的不同。如果要检查整个 .exe 文件,请使用不同的扩展名重命名文件。
打开十六进制文件
Debug 将具有 .hex 扩展名的文件认为十六进制格式文件。键入不带参数的 l 命令,可以加载从十六进制文件中指定的地址处开始的十六进制文件。如果键入的 l 命令包含 address 参数,Debug 将把指定的地址加到在十六进制文件中找到的地址上,以确定起始地址。
++++
Debug:M(移动)
将一个内存块中的内容复制到另一个内存块中。
m range address
参数
range
指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。
address
指定要将 range 内容复制到该位置的起始地址。
++
范例
假定键入以下命令:
mcs:100 110 cs:500
Debug 首先将 CS:110 地址中的内容复制到地址 CS:510 中,然后将 CS:10F 地址中的内容复制到 CS:50F 中,如此操作直至将 CS:100 地址中的内容复制到地址 CS:500 中。要查看结果,请使用 Debug d(转储)命令,并使用 m 命令指定目标地址。
++
说明
复制操作对现有数据的影响
如果新数据没有写入正在被复制的数据块中的地址,则源数据将保持不变。但是,如果目标块已经包含数据(就象它在覆盖副本操作中一样),则将改写该数据。(覆盖复制操作是指那些目标数据块部分内容覆盖原数据块部分内容的操作。)
执行覆盖复制操作
m 命令执行目标地址的覆盖复制操作,而不丢失数据。将改写的地址内容首先复制。因此,如果将较高位地址的数据复制到较低位地址,则复制操作从原块的最低位地址开始并向最高位地址进行。反之,如果要将数据从低地址复制到高地址,复制操作从原块的最高地址开始,向最低地址进行。
++++
Debug:N(名称)
指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。
n [drive:][path] filename
要指定测试的可执行文件的参数,请使用以下语法:
n file-parameters
参数
如果在没有参数的情况下使用,则 n 命令清除当前规范。
[drive:][path] filename
指定要测试的可执行文件的位置和名称。
file-parameters
为正在测试的可执行文件指定参数和开关。
有关将文件或指定磁盘扇区的内容加载到内存中的信息,请单击“相关主题”列表中的 Debug L(加载)。
有关写入调试到磁盘的文件的信息,请单击“相关主题”列表中的 Debug W(写入)。
++
范例
假定已经启动 Debug,并加载了正在调试的程序 Prog.com。接着您决定为 Prog.com 指定两个参数并运行此程序。以下是此范例的命令序列:
debug prog.com
nparam1 param2
g
在这种情况下,Debug g(转向)命令会运行该程序,就好像您已在 Windows 2000 命令提示符后键入了如下命令:
prog param1 param2
所以,测试和调试反映 Prog.com 通常的运行时间环境。
在下面的命令序列中,第一个 n 命令将 File1.exe 指定为后接的 l(加载)命令的文件,该命令将 File1.exe 加载到内存。第二个 n 命令指定 File1.exe 将使用的参数。最后,g 命令将运行 File1.exe 文件,就好像您在 Windows 2000 命令行中键入了 File1 File2.dat File2.dat 一样。
nfile1.exe
l
nfile2.dat file3.dat
g
注意
· 不要在 n 命令的第二种形式后使用 l 命令。还要注意,如果现在使用 w(写入)命令,Windows 2000 将使用名称 File2.dat 保存正在调试的文件 File1.exe。为避免出现此结果,应该总是在 l 或 w 命令之前立即使用 n 命令的第一种形式。
++
说明
n 命令的两个用途
可以按两种方式使用 n 命令。首先,您可以使用它以指定后面的 l(加载)或 w(写入)命令所使用的文件。如果在没有命名所调试文件的情况下启动 Debug,必须在使用 l 命令加载文件之前使用命令 nfilename。在 CS:5C 为文件控制块 (FCB) 正确编排文件名的格式。其次,可以使用 n 命令指定被调试文件的命令行参数和开关。
内存区域
以下四个内存区域都会受到 n 命令的影响:
内存位置 内容
CS:5C 文件 1 的文件控制数据块 (FCB)
CS:6C 文件 2 的文件控制数据块 (FCB)
CS:80 n 命令行的长度(以字符表示)
CS:81 n 命令行字符的开头
为 n 命令指定的第一个文件名被放在 CS:5C 的 FCB 中。如果指定第二个文件名,此名称将放置到 CS:6C 的 FCB 中。n 命令行上键入的字符数(除第一个字符之外,n)存储在位置 CS:80。n 命令行上的实际字符(再次,除了字母 n 之外)存储在以 CS:81 开头的位置。注意这些字符可以是在 Windows 2000 命令提示符下键入的命令中有效的任何开关和分隔符。
++++
Debug:O(输出)
将字节值发送到输出端口。
o port byte-value
参数
port
通过地址指定输出端口。端口地址可以是 16 位值。
byte-value
指定要指向 port 的字节值。
有关从输入端口读取字节值的信息,请单击“相关主题”列表中的 Debug I(输入)。
++
范例
要将字节值 4Fh 发送到地址为 2F8h 的输出端口,请键入以下命令:
o2f8 4f
++++
Debug:P(执行)
执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。
p [= address] [number]
参数
=address
指定第一个要执行指令的位置。如果不指定地址,则默认地址是在 CS:IP 寄存器中指定的当前地址。
number
指定在将控制返回给 Debug 之前要执行的指令数。默认值为 1。
有关运行当前在内存中程序的信息,请单击“相关主题”列表中的 Debug G(转向)。
有关执行指令的信息,请单击“相关主题”列表中的 Debug T(跟踪)。
++
范例
假定正在测试的程序在地址 CS:143F 处包含一个 call 指令。要运行 call 目标位置的子程序然后将控制返回到 Debug,请键入以下命令:
p=143f
Debug 按以下格式显示结果:
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC
2246:1442 7505 JNZ 144A
++
说明
将控制传送到要测试的程序
当 p 命令将控制从 Debug 传送到要测试的程序时,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。控制返回到 Debug。
地址参数的限制
如果 address 参数没有指定段,Debug 将使用被测试程序的 CS 寄存器。如果省略 address,程序将从 CS:IP 寄存器所指定的地址开始执行。必须在 address 参数之前使用等号 (=) 以便将它与 number 参数区分。如果在指定地址处的指令不是循环、重复的字符串指令、软件中断或子例程,则 p 命令与 Debug t(跟踪)命令的作用相同。
使用 p 命令显示的邮件
当 p 执行完一段说明后,Debug 显示出程序的寄存器内容、标志的状态以及下一段将要被执行的指令的解码形式。
警告
· 不能使用 p 命令跟踪只读内存 (ROM)。
++++
Debug:Q(退出)
停止 Debug 会话,不保存当前测试的文件。
当您键入 q 以后,控制返回到 Windows 2000 的命令提示符。
q
参数
该命令不带参数。
有关保存文件的信息,请单击“相关主题”列表中的 Debug W(写入)。
++++
Debug:R(寄存器)
显示或改变一个或多个 CPU 寄存器的内容。
r [register-name]
参数

如果在没有参数的情况下使用,则 r 命令显示所有寄存器的内容以及寄存器存储区域中的标志。
register-name
指定要显示其内容的寄存器名。
有关显示内存部分内容的信息,请单击“相关主题”列表中的 Debug D(转储)。
有关反汇编字节的信息,请单击“相关主题”列表中的 Debug U(反汇编)。
++
范例
要查看所有寄存器的内容、所有标记的状态和当前位置的指令解码表,请键入以下命令:
r
如果当前位置是 CS:11A,显示外观将类似于以下内容:
AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000
DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC
04BA:011A CD21 INT 21
要只查看标志的状态,请键入以下命令:
rf
Debug 按以下格式显示信息:
NV UP DI NG NZ AC PE NC - _
现在,您可以按任意顺序键入一个或多个有效的标志值,其中可以有或没有空格,如下所示:
nv up di ng nz ac pe nc - pleicy
Debug 结束 r 命令并显示 Debug 提示符。要查看更改,请键入 r 或 rf 命令。Debug 将显示以下内容:
NV UP EI PL NZ AC PE CY - _
按 ENTER 返回到 Debug 提示符。
++
说明
使用 r 命令
如果指定了寄存器名称,Windows 2000 将显示以十六进制标记表示的寄存器的 16 位值,并将冒号显示为提示符。如果要更改包含在寄存器中的值,除非键入新值并按 ENTER 键;否则,请按 ENTER 键返回 Debug 提示符。
有效寄存器名
以下是 register-name 的有效值:ax、bx、cx、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc 及 f。ip 和 pc 都引用指令指针。
如果指定寄存器名称,而不是从前面的列表中指定,Windows 2000 将显示以下消息:
br error
使用 f 字符而不是寄存器名
如果键入 f 字符代替寄存器名,Debug 将每个标记的当前设置显示为两字母代码,然后显示 Debug 提示符。要更改标志的设置,请从下表中键入适当的两字母代码:
标志名 设置 清除
溢出 ov nv
方向 dn(减) up(增)
中断 ei(启用) di(禁用)
正负 ng(负) pl(正)
零 zr nz
辅助进位 ac na
奇偶校验 pe(偶校验) po(奇校验)
进位 cy nc
可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。要停止 r 命令,请按 ENTER 键。任何没有指定新值的标志保持不变。
用 r 命令显示的邮件
如果为标记指定了多个值,Debug 将显示以下消息:
df error
如果指定没有在前面的表中列出的标志代码,Debug 将显示以下消息:
bf error
在这两种情况下,Debug 将忽略所有在无效项目之后指定的设置。
Debug 的默认设置
在启动 Debug 时,会将段寄存器设置到空闲内存的低端,指令指针设置为 0100h,清除所有标志,并且将其余寄存器设置为零,除了被设置为 FFEEh 的 sp 之外。
++++
Debug:S(搜索)
在某个地址范围搜索一个或多个字节值的模式。
s range list
参数
range
指定要搜索范围的开始和结束地址。有关 range 参数有效值的信息,请单击“相关主题”列表中的 Debug。
list
指定一个或多个字节值的模式,或要搜索的字符串。用空格或逗号分隔每个字节值和下一个字节值。将字符串值包括在引号中。
++
范例
假定需要查找包含值 41 并且范围从 CS:100 到 CS:110 的所有地址。为此,请键入以下命令:
scs:100 110 41
Debug 按以下格式显示结果:
04BA:0104
04BA:010D
-
以下命令在 CS:100 到 CS:1A0 的范围内搜索字符串“Ph”。
scs:100 1a0 "Ph"
++
说明
如果 list 参数包含多个字节值,Debug 将只显示出现字节值的第一个地址。如果 list 只包含一个字节值,Debug 将显示指定范围内出现该值的所有地址。
++++
Debug:T(跟踪)
执行一条指令,并显示所有注册的内容、所有标志的状态和所执行指令的解码形式。
t [=address] [number]
参数
=address
指定 Debug 启动跟踪指令的地址。如果省略 address 参数,跟踪将从程序的 CS:IP 寄存器所指定的地址开始。有关 address 参数有效值的信息,请单击“相关主题”列表中的 Debug。
number
指定要跟踪的指令数。该值必须是十六进制数。默认值为 1。
有关执行循环、重复的字符串指令、软件中断或子例程的信息,请单击“相关主题”列表中的 Debug P(执行)。
有关执行当前内存中程序的信息,请单击“相关主题”列表中的 Debug G(转向)。
++
范例
要执行一个指令(CS:IP 指向的指令),然后显示寄存器的内容、标志的状态以及指令的解码形式,请键入以下命令:
t
如果程序中的指令位于 04BA:011A,Debug 可能显示下列信息:
AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000
DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC
04BA:011A CD21 INT 21
++
说明
跟踪只读内存中的指令
t 命令使用 8086 或 8088 微处理器的硬件跟踪模式。因此,也可以跟踪存储在只读内存 (ROM) 中的指令。
使用地址参数
必须在 address 参数之前使用等号 (=) 以便将它与 number 参数区分。
++++
Debug:U(反汇编)
反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码看起来象已汇编文件的列表。
u [range]
参数

如果在没有参数的情况下使用,则 u 命令分解 20h 字节(默认值),从前面 u 命令所显示地址后的第一个地址开始。
range
指定要反汇编代码的起始地址和结束地址,或起始地址和长度。有关 range 参数有效值的信息,请单击“相关主题”列表中的 Debug。
有关集成记忆码的信息,请单击“相关主题”列表中的 Debug A(汇编)。
有关显示内存部分内容的信息,请单击“相关主题”列表中的 Debug D(转储)。
++
范例
要反汇编 16 (10h) 字节,从地址 04BA:0100 开始,请键入以下命令:
u04ba:100l10
Debug 按以下格式显示结果:
04BA:0100 206472 AND [SI+72],AH
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370 AND [BP+DI+70],DH
04BA:0109 65 DB 65
04BA:010A 63 DB 63
04BA:010B 69 DB 69
04BA:010C 66 DB 66
04BA:010D 69 DB 69
04BA:010E 63 DB 63
04BA:010F 61 DB 61
如果只显示从 04BA:0100 到 04BA:0108 特定地址的信息,请键入以下命令:
u04ba:0100 0108
Debug 显示以下内容:
04BA:0100 206472 AND [SI+72],AH
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370 AND [BP+DI+70],DH
++++
Debug:W(写入)
将文件或特定分区写入磁盘。
要将在 BX:CX 寄存器中指定字节数的内容写入磁盘文件,请使用以下语法:
w [address]
要略过 Windows 2000 文件系统并直接写入特定的扇区,请使用以下语法:
w address drive start number
参数
address
指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定 address,Debug 程序将从 CS:100 开始。关于 address 参数有效值的信息,请在“相关主题”列表中单击 Debug。
drive
指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。
start
指定要写入第一个扇区的十六进制数。
number
指定要写入的扇区数。
有关指定用于 w 命令的文件的信息,请单击“相关主题”列表中的 Debug N(名称)。
有关将文件或文件扇区内容加载到内存中的信息,请单击“相关主题”列表中的 Debug L(加载)。
范例
假定要将起始地址为 CS:100 的内存内容写入到驱动器 B 的磁盘中。需要将数据从磁盘的逻辑扇区号 37h 开始并持续 2Bh 个扇区。为此,键入以下命令:
wcs:100 1 37 2b
当写操作完成时,Debug 再次显示 Debug 提示符。
++
说明
必须在启动 Debug 时或者在最近的 Debug n(名称)命令中指定磁盘文件的名字。这两种方法都可以将地址 CS:5C 处文件控制块的文件名正确地编排格式。
在使用不带参数的 w 命令之前重新设置 BX:CX
如果使用了 Debug g(转向)、t(跟踪)、p(执行)或 r(寄存器)命令,必须在使用无参数的 w 命令之前,将 BX:CX 寄存器复位。
将修改后的文件写入磁盘
如果修改文件但不更改文件名、长度或起始地址,Debug 仍然可以正确地将文件写入源磁盘位置。
w 命令的限制
不能用该命令写入 .exe 或 .hex 文件。
警告
· 因为略过 Windows 2000 文件句柄,所以写入特定的分区非常危险。如果键入错误的值,则磁盘文件结构很容易被损坏。
++++
Debug:XA(分配扩展内存)
分配扩展内存的指定页面数。
要使用扩展内存,必须安装符合 4.0 版的 Lotus/Intel/Microsoft 扩展内存规范 (LIM EMS) 的扩展内存设备驱动程序。
xa [count]
参数
count
指定要分配的扩展内存的 16KB 页数。
有关使用扩展内存的其他 Debug 命令的信息,请单击“相关主题”列表中的 XD(释放扩展内存)、XM(映射扩展内存页)或 XS(显示扩展内存状态)。
++
范例
要分配扩展内存的 8 个页面,请键入以下命令:
xa8
如果命令成功,Debug 将显示类似的以下消息:
Handle created=0003
++
说明
如果指定的页面数可用,则 Debug 将显示消息,此消息表明所创建的句柄的十六进制数;否则,Debug 将显示错误消息。
++++
Debug:XD(释放扩展内存)
释放指向扩展内存的句柄。
要使用扩展内存,必须安装符合 4.0 版的 Lotus/Intel/Microsoft 扩展内存规范 (LIM EMS) 的扩展内存设备驱动程序。
xd [handle]
参数
handle
指定要释放的句柄。
有关使用扩展内存的其他 Debug 命令的信息,请单击“相关主题”列表中 XA(分配扩展内存)、XM(映射扩展内存页) 或 XS(显示扩展内存状态)。
++
范例
要释放句柄 0003,请键入以下命令:
xd 0003
如果命令成功,Debug 将显示下列消息:
Handle 0003 deallocated
++++
Debug:XM(映射扩展内存页)
将属于指定句柄的扩展内存逻辑页映射到扩展内存的物理页。
要使用扩展内存,必须安装符合 4.0 版的 Lotus/Intel/Microsoft 扩展内存规范 (LIM EMS) 的扩展内存设备驱动程序。
xm [lpage] [ppage] [handle]
参数
lpage
指定要映射到物理页 ppage 的扩展内存的逻辑页面号。
ppage
指定将 lpage 映射到的物理页面号。
handle
指定句柄。
有关使用扩展内存的其他 Debug 命令的信息,请单击“相关主题”列表中的 XA(分配扩展内存)、XD(释放扩展内存)或 XS(显示扩展内存)。
++
范例
要将句柄 0003 的逻辑页 5 映射到物理页 2,请键入以下命令:
xm 5 2 0003
如果命令成功,Debug 将显示下列消息:
Logical page 05 mapped to physical page 02
++++
Debug:XS(显示扩展内存状态)
显示有关扩展内存状态的信息。
要使用扩展内存,必须安装符合 4.0 版的 Lotus/Intel/Microsoft 扩展内存规范 (LIM EMS) 的扩展内存设备驱动程序。
xs
参数
该命令不带参数。
有关使用扩展内存的其他 Debug 命令的信息,请单击“相关主题”列表中的 XA(分配扩展内存)、XD(释放扩展内存)或 XM(映射扩展内存页)。
++
范例
要显示扩展内存信息,请键入以下命令:
xs
Debug 显示与以下类似的信息:
Handle 0000 has 0000 pages allocated
Handle 0001 has 0002 pages allocated

Physical page 00 = Frame segment C000
Physical page 01 = Frame segment C400
Physical page 02 = Frame segment C800
Physical page 03 = Frame segment CC00
2 of a total 80 EMS pages have been allocated
2 of a total FF EMS handles have been allocated
++
说明
Debug 显示的信息有如下格式:
Handle xx has xx pages allocated
Physical page xx = Frame segment xx
xx of a total xx EMS pages have been allocated
xx of a total xx EMS handles have been allocated
++++
***********************Debug子命令完******************************
shelly 发表于  2004-02-25 23:19:04


   常用ASP代码,做个备份    |   阅读全文   |   评论(2)  |  引用(trackback0)  

一些ASP初学者常用的代码
 
 
作者:jjsir  来源:落伍者论坛  加入时间:2003-10-7 傲式资讯
 
1.获得系统时间:
<%=now()%>
2.取得来访用的IP:
<%=request.serverVariables("remote_host")%>
3.获得系统,浏览器版本:
<script>
window.document.write("版本:"+navigator.appName+navigator.appVersion+" browser.")
</script>
4.去除IE混动条:
<body scroll="no">
<body style="overflow-y:hidden">
5.进入网站,跳出广告:
<script language="javascript">
<!--
<!-- 注意更改文件所在路径-->
window.open(''http://www.XXXXXX.com&#39;','''',''height=200,width=300,top=0,left=30'');
// -->
</script>
6.随机数:
<%randomize%>
<%=(int(rnd()*n)+1)%>
N为可改变数
7.向上混动代码:
<marquee direction="up" scrolldelay="200" style="font-size: 9pt; color: #FF0000;
line-height: 150%; font-style:italic; font-weight:bold" scrollamount="2" width="206"
height="207" bgcolor="#FFFF00">hhhhhhhhhhhhhhhhhhh</marquee>
8.自动关闭网页:
<script LANGUAGE="javascript">
<!--
setTimeout(''window.close();'', 10000); //60秒后关闭
// -->
</script>
<p align="center">本页10秒后自动关闭,请注意刷新页面</p>
9.随机背景音乐:
<%randomize%>
<bgsound src="mids/<%=(int(rnd()*60)+1)%>.mid" loop="-1"> 

可以修改数字,限制调用个数,我这里是60个.
10.自动刷新本页面:
<script>
<!--  

var limit="0:10"  

if (document.images){
var parselimit=limit.split(":")
parselimit=parselimit[0]*60+parselimit[1]*1
}
function beginrefresh(){
if (!document.images)
return
if (parselimit==1)
window.location.reload()
else{
parselimit-=1
curmin=Math.floor(parselimit/60)
cursec=parselimit%60
if (curmin!=0)
curtime=curmin+"分"+cursec+"秒后重刷本页!"
else
curtime=cursec+"秒后重刷本页!"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}  

window.onload=beginrefresh
file://-->
</script>
11.ACCESS数据库连接:
<%
option explicit
dim startime,endtime,conn,connstr,db
startime=timer()
'更改数据库名字
db="data/dvBBS5.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
'如果你的服务器采用较老版本Access驱动,请用下面连接方法
'connstr="driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db)
conn.Open connstr
function CloseDatabase
Conn.close
Set conn = Nothing
End Function
%>
12.SQL数据库连接:
<%
option explicit
dim startime,endtime,conn,connstr,db
startime=timer()
connstr="driver={SQL Server};server=HUDENQ-N11T33NB;uid=sa;pwd=xsfeihu;database=dvbbs"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connstr
function CloseDatabase
Conn.close
Set conn = Nothing
End Function
%>
13.用键盘打开网页代码:
<script language="javascript">
function ctlent(eventobject)
{
if((event.ctrlKey && window.event.keyCode==13)||(event.altKey && window.event.keyCode==83))
{
window.open('网址','','')
}
}
</script> 

这里是Ctrl+Enter和Alt+S的代码 自己查下键盘的ASCII码再换就行
14.让层不被控件复盖代码:
<div z-Index:2><object ***></object></div> # 前面
<div z-Index:1><object ***></object></div> # 后面
<div id="Layer2" style="position:absolute; top:40;width:400px; height:95px;z-index:2"><table height=100% width=100% bgcolor="#ff0000"><tr><td height=100% width=100%></td></tr></table><iframe width=0 height=0></iframe></div>
<div id="Layer1" style="position:absolute; top:50;width:200px; height:115px;z-index:1"><iframe height=100% width=100%></iframe></div>
15.动网FLASH广告代码:
<object classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="468" height="60"><param name=movie value="images/yj16d.swf"><param name=quality value=high><embed src="images/dvbanner.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash";;; type="application/x-shockwave-flash" width="468" height="60"></embed></object>
16.VBS弹出窗口小代码:
<script language=vbscript>
msgbox"你还没有注册或登陆论坛","0","精品论坛"
location.href = "login.asp"
</script>
16.使用FSO修改文件特定内容的函数
function FSOchange(filename,Target,String)
Dim objFSO,objCountFile,FiletempData
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True)
FiletempData = objCountFile.ReadAll
objCountFile.Close
FiletempData=Replace(FiletempData,Target,String)
Set objCountFile=objFSO.CreateTextFile(Server.MapPath(filename),True)
objCountFile.Write FiletempData
objCountFile.Close
Set objCountFile=Nothing
Set objFSO = Nothing
End Function
17.使用FSO读取文件内容的函数
function FSOFileRead(filename)
Dim objFSO,objCountFile,FiletempData
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True)
FSOFileRead = objCountFile.ReadAll
objCountFile.Close
Set objCountFile=Nothing
Set objFSO = Nothing
End Function
18.使用FSO读取文件某一行的函数
function FSOlinedit(filename,lineNum)
if linenum < 1 then exit function
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
FSOlinedit = temparray(lineNum-1)
end if
end if
end function
19.使用FSO写文件某一行的函数
function FSOlinewrite(filename,lineNum,Linecontent)
if linenum < 1 then exit function
dim fso,f,temparray,tempCnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
temparray(lineNum-1) = lineContent
end if
tempcnt = join(temparray,chr(13)&chr(10))
set f = fso.createtextfile(server.mappath(filename),true)
f.write tempcnt
end if
f.close
set f = nothing
end function
20.使用FSO添加文件新行的函数
function FSOappline(filename,Linecontent)
dim fso,f
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),8,1)
f.write chr(13)&chr(10)&Linecontent
f.close
set f = nothing
end function
21.读文件最后一行的函数
function FSOlastline(filename)
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
FSOlastline = temparray(ubound(temparray))
end if
end function
利用FSO取得BMP,JPG,PNG,GIF文件信息(大小,宽、高等)
<%
'::: BMP, GIF, JPG and PNG ::: 

'::: This function gets a specified number of bytes from any :::
'::: file, starting at the offset (base 1) :::
'::: :::
'::: Passed: :::
'::: flnm => Filespec of file to read :::
'::: offset => Offset at which to start reading :::
'::: bytes => How many bytes to read :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function GetBytes(flnm, offset, bytes)
Dim objFSO
Dim objFTemp
Dim objTextStream
Dim lngSize
on error resume next
Set objFSO = CreateObject("Scripting.FileSystemObject") 

' First, we get the filesize
Set objFTemp = objFSO.GetFile(flnm)
lngSize = objFTemp.Size
set objFTemp = nothing
fsoForReading = 1
Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)
if offset > 0 then
strBuff = objTextStream.Read(offset - 1)
end if
if bytes = -1 then ' Get All!
GetBytes = objTextStream.Read(lngSize) 'ReadAll
else
GetBytes = objTextStream.Read(bytes)
end if
objTextStream.Close
set objTextStream = nothing
set objFSO = nothing
end function 

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: Functions to convert two bytes to a numeric value (long) :::
'::: (both little-endian and big-endian) :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function lngConvert(strTemp)
lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256)))
end function
function lngConvert2(strTemp)
lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256)))
end function 

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: This function does most of the real work. It will attempt :::
'::: to read any file, regardless of the extension, and will :::
'::: identify if it is a graphical image. :::
'::: :::
'::: Passed: :::
'::: flnm => Filespec of file to read :::
'::: width => width of image :::
'::: height => height of image :::
'::: depth => color depth (in number of colors) :::
'::: strImageType=> type of image (e.g. GIF, BMP, etc.) :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function gfxSpex(flnm, width, height, depth, strImageType)
dim strPNG
dim strGIF
dim strBMP
dim strType
strType = ""
strImageType = "(unknown)"
gfxSpex = False
strPNG = chr(137) & chr(80) & chr(78)
strGIF = "GIF"
strBMP = chr(66) & chr(77)
strType = GetBytes(flnm, 0, 3)
if strType = strGIF then ' is GIF
strImageType = "GIF"
Width = lngConvert(GetBytes(flnm, 7, 2))
Height = lngConvert(GetBytes(flnm, 9, 2))
Depth = 2 ^ ((asc(GetBytes(flnm, 11, 1)) and 7) + 1)
gfxSpex = True
elseif left(strType, 2) = strBMP then ' is BMP
strImageType = "BMP"
Width = lngConvert(GetBytes(flnm, 19, 2))
Height = lngConvert(GetBytes(flnm, 23, 2))
Depth = 2 ^ (asc(GetBytes(flnm, 29, 1)))
gfxSpex = True
elseif strType = strPNG then ' Is PNG
strImageType = "PNG"
Width = lngConvert2(GetBytes(flnm, 19, 2))
Height = lngConvert2(GetBytes(flnm, 23, 2))
Depth = getBytes(flnm, 25, 2)
select case asc(right(Depth,1))
case 0
Depth = 2 ^ (asc(left(Depth, 1)))
gfxSpex = True
case 2
Depth = 2 ^ (asc(left(Depth, 1)) * 3)
gfxSpex = True
case 3
Depth = 2 ^ (asc(left(Depth, 1))) '8
gfxSpex = True
case 4
Depth = 2 ^ (asc(left(Depth, 1)) * 2)
gfxSpex = True
case 6
Depth = 2 ^ (asc(left(Depth, 1)) * 4)
gfxSpex = True
case else
Depth = -1
end select 

else
strBuff = GetBytes(flnm, 0, -1) ' Get all bytes from file
lngSize = len(strBuff)
***Found = 0
strTarget = chr(255) & chr(216) & chr(255)
***Found = instr(strBuff, strTarget)
if ***Found = 0 then
exit function
end if
strImageType = "JPG"
lngPos = ***Found + 2
ExitLoop = false
do while ExitLoop = False and lngPos < lngSize 

do while asc(mid(strBuff, lngPos, 1)) = 255 and lngPos < lngSize
lngPos = lngPos + 1
loop
if asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, lngPos, 1)) > 195 then
lngMarkerSize = lngConvert2(mid(strBuff, lngPos + 1, 2))
lngPos = lngPos + lngMarkerSize + 1
else
ExitLoop = True
end if
loop
'
if ExitLoop = False then
Width = -1
Height = -1
Depth = -1
else
Height = lngConvert2(mid(strBuff, lngPos + 4, 2))
Width = lngConvert2(mid(strBuff, lngPos + 6, 2))
Depth = 2 ^ (asc(mid(strBuff, lngPos + 8, 1)) * 8)
gfxSpex = True
end if 

end if
end function 

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: Test Harness :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 

' To test, we'll just try to show all files with a .GIF extension in the root of C:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objF = objFSO.GetFolder("c:\")
Set objFC = objF.Files
response.write "<table border=""0"" cellpadding=""5"">"
For Each f1 in objFC
if instr(ucase(f1.Name), ".GIF") then
response.write "<tr><td>" & f1.name & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"
if gfxSpex(f1.Path, w, h, c, strType) = true then
response.write w & " x " & h & " " & c & " colors"
else
response.write " "
end if
response.write "</td></tr>"
end if
Next
response.write "</table>"
set objFC = nothing
set objF = nothing
set objFSO = nothing 

%>
24.点击返回上页代码:
<form>
<p><input TYPE="button" value="返回上一步" onCLICK="history.back(-1)"></p>
</form>
24.点击刷新代码:
<form>
<p><input TYPE="button" value="刷新按钮一" onCLICK="ReloadButton()"></p>
</form>
<script language="javascript"><!--
function ReloadButton(){location.href="allbutton.htm";}
// --></script> 

24.点击刷新代码2:
<form>
<p><input TYPE="button" value="刷新按钮二" onClick="history.go(0)"> </p>
</form> 

<form>
<p><input TYPE="button" value="打开一个网站" onCLICK="HomeButton()"></p>
</form>
<script language="javascript"><!--
function HomeButton(){location.href="http://nettrain.126.com";;;}
// --></script> 

25.弹出警告框代码:
<form>
<p><input TYPE="button" value="弹出警告框" onCLICK="AlertButton()"></p>
</form>
<script language="javascript"><!--
function AlertButton(){window.alert("要多多光临呀!");}
// --></script> 
26.状态栏信息
<form>
<p><input TYPE="button" value="状态栏信息" onCLICK="StatusButton()"></p>
</form>
<script language="javascript"><!--
function StatusButton(){window.status="要多多光临呀!";}
// --></script> 

27.背景色变换
<form>
<p><input TYPE="button" value="背景色变换" onClick="BgButton()"></p>
</form>
<script>function BgButton(){
if (document.bgColor=='#00ffff')
{document.bgColor='#ffffff';}
else{document.bgColor='#00ffff';}
}
</script> 

28.点击打开新窗口
<form>
<p><input TYPE="button" value="打开新窗口" onCLICK="NewWindow()"></p>
</form>
<script language="javascript"><!--
function NewWindow(){window.open("http://www.mcmx.com";;,"","height=240,width=340,status=no,location=no,toolbar=no,directories=no,menubar=no");}
// --></script></body>
29.分页代码:
<%''本程序文件名为:Pages.asp%>
<%''包含ADO常量表文件adovbs.inc,可从"\Program Files\Common Files\System\ADO"目录下拷贝%>
<!--#Include File="adovbs.inc"-->
<%''*建立数据库连接,这里是Oracle8.05数据库
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "Provider=msdaora.1;Data Source=YourSrcName;User ID=YourUserID;Password=YourPassword;"  

Set rs=Server.CreateObject("ADODB.Recordset") ''创建Recordset对象
rs.CursorLocation=adUseClient ''设定记录集指针属性
''*设定一页内的记录总数,可根据需要进行调整
rs.PageSize=10  

''*设置查询语句
StrSQL="Select ID,姓名,住址,电话 from 通讯录 Order By ID"
rs.Open StrSQL,conn,adOpenStatic,adLockReadOnly,adCmdText
%>
<HTML>
<HEAD>
<title>分页示例</title>
<script language=javascript>
//点击"[第一页]"时响应:
function PageFirst()
{
document.MyForm.CurrentPage.selectedIndex=0;
document.MyForm.CurrentPage.onchange();
}
//点击"[上一页]"时响应:
function PagePrior()
{
document.MyForm.CurrentPage.selectedIndex--;
document.MyForm.CurrentPage.onchange();
}
//点击"[下一页]"时响应:
function PageNext()
{
document.MyForm.CurrentPage.selectedIndex++;
document.MyForm.CurrentPage.onchange();
}
//点击"[最后一页]"时响应:
function PageLast()
{
document.MyForm.CurrentPage.selectedIndex=document.MyForm.CurrentPage.length-1;
document.MyForm.CurrentPage.onchange();
}
//选择"第?页"时响应:
function PageCurrent()
{ //Pages.asp是本程序的文件名
document.MyForm.action='Pages.asp?Page='+(document.MyForm.CurrentPage.selectedIndex+1)
document.MyForm.submit();
}
</Script>
</HEAD>
<BODY bgcolor="#ffffcc" link="#008000" vlink="#008000" alink="#FF0000""> 

<%IF rs.Eof THEN
Response.Write("<font size=2 color=#000080>[数据库中没有记录!]</font>")
ELSE
''指定当前页码
If Request("CurrentPage")="" Then
rs.AbsolutePage=1
Else
rs.AbsolutePage=CLng(Request("CurrentPage"))
End If  

''创建表单MyForm,方法为Get
Response.Write("<form method=Get name=MyForm>")
Response.Write("<p align=center><font size=2 color=#008000>")
''设置翻页超链接
if rs.PageCount=1 then
Response.Write("[第一页] [上一页] [下一页] [最后一页] ")
else
if rs.AbsolutePage=1 then
Response.Write("[第一页] [上一页] ")
Response.Write("[<a href=java script:PageNext()>下一页</a>] ")
Response.Write("[<a href=java script:PageLast()>最后一页</a>] ")
else
if rs.AbsolutePage=rs.PageCount then
Response.Write("[<a href=java script:PageFirst()>第一页</a>] ")
Response.Write("[<a href=java script:PagePrior()>上一页</a>] ")
Response.Write("[下一页] [最后一页] ")
else
Response.Write("[<a href=java script:PageFirst()>第一页</a>] ")
Response.Write("[<a href=java script:PagePrior()>上一页</a>] ")
Response.Write("[<a href=java script:PageNext()>下一页</a>] ")
Response.Write("[<a href=java script:PageLast()>最后一页</a>] ")
end if
end if
end if 

''创建下拉列表框,用于选择浏览页码
Response.Write("第<select size=1 name=CurrentPage onchange=PageCurrent()>")
For i=1 to rs.PageCount
if rs.AbsolutePage=i then
Response.Write("<option selected>"&i&"</option>") ''当前页码
else
Response.Write("<option>"&i&"</option>")
end if
Next
Response.Write("</select>页/共"&rs.PageCount&"页 共"&rs.RecordCount&"条记录</font><p>")
Response.Write("</form>") 

''创建表格,用于显示
Response.Write("<table align=center cellspacing=1 cellpadding=1 border=1")
Response.Write(" bordercolor=#99CCFF bordercolordark=#b0e0e6 bordercolorlight=#000066>") 

Response.Write("<tr bgcolor=#ccccff bordercolor=#000066>")  

Set Columns=rs.Fields  

''显示表头
For i=0 to Columns.Count-1
Response.Write("<td align=center width=200 height=13>")
Response.Write("<font size=2><b>"&Columns(i).name&"</b></font></td>")
Next
Response.Write("</tr>")
''显示内容
For i=1 to rs.PageSize
Response.Write("<tr bgcolor=#99ccff bordercolor=#000066>")
For j=0 to Columns.Count-1
Response.Write("<td><font size=2>"&Columns(j)&"</font></td>")
Next
Response.Write("</tr>") 


rs.movenext
if rs.EOF then exit for
Next 
Response.Write("</table>")
END IF
%>
</BODY>
</HTML> 
 
window.showModalDialogv("test.htm",window,"");  //把window对象当作第二个参数传递过去
在弹出页面,用dialogArguments.document.sipe.submit();window.close();即可实现 


 不刷新页面---刷新数据
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+  超级简单/方便--不刷新页面---刷新数据之--幕后黑手---XMLHTTP---介绍/用法
+
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

--------------就是下面这个很简单的javascript函数SEND(STR,URL)----------------------

使用到的是XMLDOM和XMLHTTP对象.用这种技术的好处是:全JS控制,方便/简单,比RDS
或者remote好多了.(前提:服务器端和客户端都必须安装IE5或者更高版本),在俺贴的
那个无刷新在线信息功能使用的也是这种技术.有兴趣的朋友可以看看..

function Send(Str,URL) 
//STR参数是传入的XML数据,你也可以传入其他文本数据.
//不过这个函数需要服务器端处理之后返回XML数据,你也可以修改一下
//URL参数表示你所要处理数据的ASP文件地址
{
var Http = new ActiveXObject("Microsoft.XMLHTTP") //建立XMLHTTP对象
var Dom = new ActiveXObject("Microsoft.XMLDOM") //建立XMLDOM对象
Http.open("POST",URL,false)
//第一个参数的意思是,用"POST"方式发送数据.可以大到4MB,也可以换为"GET".只能256KB
//第2个参数的意思是数据发送到哪个文件处理
//第3个参数意思是同步或异步方式.TRUE为异步,FALSE为同步
Http.send(Str) //开始发送数据.............嘟嘟..
Dom.async=false //设置为同步方式获取数据
Dom.loadXML(Http.responseText) 
//开始获取服务器端处理后返回的数据.我在这里设置必须为XML数据,否则出错.
//你也可以自己修改.使返回的是2进制或者记录集数据.................................
if(Dom.parseError.errorCode != 0) //检查是否发生获取数据时错误
{
            delete(Http)
            delete(Dom)
return(false)
}
else
{
var Back = Dom.documentElement.childNodes.item(0).text 
//得到返回的XML数据,我这里假设处理程序只返回一行XML数据(一个节点)
            delete(Http)
            delete(Dom)
return(Back) //函数返回数据.......................结束
}
}

VAR CAT = Send("<用户资料><姓名>谢柠檬</姓名></用户资料>","HTTP://WWW.CHINAASP.COM/VIVA.ASP";) //执行函数
IF(CAT == FALSE)
{
      ALERT("对不起.处理程序返回的是FALSE.数据处理已经失败........")
}
ELSE

IF(EVAL(CAT))
{
      ALERT("OK.数据已经发送成功.兼以处理完成!!!!!!")
}
ELSE
{
      ALERT("对不起.处理程序返回的是FALSE.数据处理已经失败........")
}
}

==========================================VIVA.ASP==========================================
ON ERROR RESUME NEXT
DIM BOBO
DIM MOMO
SET BOBO = SERVER.CREATEOBJECT("MICROSOFT.XMLDOM")
BOBO.ASYNC = FALSE
BOBO.LOAD REQUEST
IF BOBO.PARSEERROR.ERRORCODE <> 0 THEN
RESPONSE.WRITE("<程序处理结果><最终结果>FALSE</最终结果></程序处理结果>")
ELSE
SET MOMO = BOBO.DOCUMENTELEMENT
IF MOMO.CHILDNODES.ITEM(0).TEXT = "谢柠檬" THEN
RESPONSE.WRITE("<程序处理结果><最终结果>TRUE</最终结果></程序处理结果>")
ELSE
RESPONSE.WRITE("<程序处理结果><最终结果>FALSE</最终结果></程序处理结果>")
END IF
END IF
SET BOBO = NOTHING

shelly 发表于  2004-02-24 11:38:07


   关于SMS短消息编码I    |   阅读全文   |   评论(0)  |  引用(trackback1)  

1、  英文编码
缺省的GSM字符集为7位编码,ASCII码为8位编码,编码就是将8位ASCII编码转换为7位编码。
例如:1234 编码后得到31D98C06
2进制表示
8位编码 00110001 00110010 00110011 00110100
7位编码 00110001 11011001 10001100 00000110
通过例子可以看出,将ascii8位编码的Bit8去掉,依次将下7位编码的后几位逐次移到前面,形成新的8位编码。
以下是C++Builder的实现代码:
String __stdcall EncodeEnglish(String InputStr)
{
       int n,len,cur;
       String tempstr,returnstr;
       unsigned char mid1[2],mid2[2];
       len=InputStr.Length();
       n=0;
       for(int i=1;i<=len;i++)
       {
          if (i           {
            strcpy(mid1,InputStr.SubString(i,1).c_str());
            strcpy(mid2,InputStr.SubString(i+1,1).c_str());
            cur=(mid1[0]>>n)|((mid2[0]<<(7-n))& 0xff);
          }
          else
          {
            strcpy(mid1,InputStr.SubString(i,1).c_str());
            cur=(mid1[0]>>n)& 0x7f;
          }
          FmtStr(tempstr,"%2.2X",ARRAYOFCONST((cur)));
          returnstr=returnstr+tempstr;
          n=(n+1)%7;
          if (n==0)
                  i++;
            }
return returnstr;
}

2、  英文解码

简单地说就是将7位字符编码转换为8为字符编码
以下是C++Builder的实现代码:
int ReturnHex(int value)
{
       switch (value)
       {
         case 0:
               value=0x7f;
               break;
         case 1:
               value=0x3f;
               break;
         case 2:
               value=0x1f;
               break;
         case 3:
               value=0x0f;
               break;
         case 4:
               value=0x07;
               break;
         case 5:
               value=0x03;
               break;
         case 6:
               value=0x01;
               break;
         case 7:
               value=0x00;
               break;
       }
       return value;
}
String __stdcall DecodeEnglish (String InputStr)
{
       unsigned char InStr[300];
       char OutStr[300];
       String str;
       int j=0,i=0;
       int Point=0;
       int temp;
       memset(InStr,0,301);
       memset(OutStr,0,301);
       for(int i=0;i        {
               str="0x"+InputStr.SubString(i+1,2);
               InStr[i/2]=StrToInt(str);
       }
       while(j<=InputStr.Length()/2)
       {
               if(Point==0)
                       OutStr[i]=InStr[j]&ReturnHex(Point);
               else
OutStr[i]=((InStr[j]&ReturnHex(Point))<>(8-Point));
               if(Point%7==0&&Point!=0)
                       Point=0;
               else
                       Point=Point+1;
               i++;
               j=i-(i/8);

      }
       OutStr[12]=((InStr[12]&0x07)<<5)|(InStr[11]>>(8-5));
       return AnsiString(OutStr);
}

3、  中文编码

中文编码较为简单,就是将GB2312的中文编码转换为代码页为CP936的Unicode编码即可
以下是C++Builder的实现代码
String  EncodeChinese(String InputStr)
{
        int cur;
 String tempstr,returnstr;
 WideString ws;
 wchar_t  mid[2];
 ws=WideString(InputStr);
for(int i=1;i<=ws.Length();i++)
{
wcscpy(mid,ws.SubString(i,1).c_bstr());
cur=mid[0];
FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur)));
returnstr=returnstr+tempstr;
}
return returnstr;
}

4、  中文解码

将代码页为CP936的Unicode编码转换为GB2312的中文编码即可
以下是C++Builder的实现代码
String  DecodeChinese(String InputStr)
{
       wchar_t Buf[300];
       for(int i=0;i        {
               Buf[i/4]=StrToInt("0x"+InputStr.SubString(i+1,4));
       }
       Buf[InputStr.Length()/4]=0;
       return WideCharToString(Buf);
}

作者 :不详

shelly 发表于  2004-02-24 11:33:36


   IE客户端 剪贴板 操作JS代码    |   阅读全文   |   评论(2)  |  引用(trackback0)  

function JM_cc(theField) {
var tempval=theField
window.clipboardData.setData("Text",theField)
window.status="该图片地址:\" "+ theField +" \" 已经复制到剪贴板!"
setTimeout("window.status=''",6000)
}
/:D 从 BlogCn.com 素材库里偷来的~~~

 

function doClick(x) {
 alert(x);
};
for (var i=0;i<3;i++) {
 var o = document.createElement("input");
 o.setAttribute("idx", i);
 o.attachEvent("onclick", function(){ doClick(event.srcElement.idx); });
 document.body.appendChild(o);
}

shelly 发表于  2004-02-23 14:55:05


   更新 链接 ....    |   阅读全文   |   评论(0)  |  引用(trackback0)  
更新 水盟论坛 链接 .....&nbsp; <A href="http://shuimeng.8866.org/">http://shuimeng.8866.org/</A><BR>
更新 胡言乱语 链接.....&nbsp; <A href="http://www.blogbus.com/blogbus/blog/index.php?blogid=8995">http://www.blogbus.com/blogbus/blog/index.php?blogid=8995</A>
shelly 发表于  2004-02-23 14:00:11


   关于手机SMS短消息    |   阅读全文   |   评论(2)  |  引用(trackback1)  

SMS是由Etsi所制定的一个规范(GSM 03.40 和 GSM 03.38)。它可以发送最多160个字符,当使用7-bits编码的时候。8-bit编码(最多140个字符)通常无法直接通过手机显示;通常被用来作为数据消息,例如:smart messaging中的图片和铃声)和OTA WAP设置。16-bit信息(最多70个字符)被用来显示Unicode(UCS2)文本信息,可以被大多数的手机所显示。一个以class 0 开头的16-bit的文本信息将在某些手机上作为Flash SMS显示(闪烁的SMS和警告SMS)。
有两种方式来发送和接收SMS信息:使用文本模式或者使用PDU(protocol description unit) 模式。文本模式(可能某些手机不支持)实际上也是一种PDU编码的一种表现形式。在显示SMS信息,可能使用不同的字符集和不同的编码方式。最常见的选择是"PCCP437", "PCDN", "8859-1", "IRA" 和 "GSM". 这些都通过读取应用程序的at-command中的AT+CSCS指定。如果你想阅读手机上的信息,手机会为你选择一种合适的编码。那么一个可以阅读SMS消息的应用要么使用test模式,要么是PDU模式。如果使用text模式,那么应用将绑定(或限制在)一些可能的编码选择中。在某些情况下是不够的,如果使用PDU模式,那么就可以使用任何编码方式。
2.接收
PDU串不仅仅 包含了消息,而且还有很多发送者的元信息,他的SMS服务中心,时间标志等等。这些都是以8位字节的16进制数,或者半8位字节的十进制数。以下的字符书我从Nokia 6110 收到的信息,当从www.mtn.co.za发送的串是"hellohello"的时候。 07 917238010010F5 040BC87238880900F100009930925161958003C16010 ,这个八位串包含了三个部分:第一个8位表示SMSC信息的长度("07"),SMSC的信息 ("917238010010F5"),和SMS_DELIVER部分(GSM 03.40中指定)。
注意: 有些手机(例如:Ericssson 888?)头三个部分(被着色)在PDU模式下被省略。
8位 描述
07 SMSC信息的长度。(在这个例子里是7个八位)
91 SMSC的地址类型 (91意味着国际格式的电话号码)
72 38 01 00 10 F5 服务中心号码(半八位的十进制数)电话号码是一个奇数(11),因此加入F来保证8位。这个服务中心的号码是"+27381000015"
04 SMS_DELIVER的第一个8位。
0B 地址长度。发送号码的长度(0B hex = 11 dec)
C8 发送号码的地址类型
72 38 88 09 00 F1 发送号码(半八位的十进制数),有一个F结尾。
00 TP-PID.协议标识
00 TP-DCS 编码方式
99 30 92 51 61 95 80 TP-SCTS.时间邮戳(半8位)
0A TP-UDL.用户数据长度,信息的长度。TP-DCS域表明是7-bit格式的数据。因此长度在这里是一个10个7-bits。如果TP-DCS被设置成8-bit或者Unicode,那么长度就应该是9个八位长度。
E8329BFD4697D9EC37 TP-UD. 7-bit编码的信息。
所有的8位都是16进制编码,除了服务中心号码,发送号码和时间邮戳;他们都是十进制的半8位编码。在PDU串的结尾部分包含了一些16进制的8-bits数据,但他们实际7-bits数据。
十进制的半8位只需要将高位和地位交换就可以得到实际的数值。例如:"72 38 88 09 00 F1" 到 "27 83 88 90 00 1F"。因为电话号码是一个奇数,没有办法组成8位编码,所以使用F来补齐。在解析时间邮戳的时候("99 03 29 15 16 59 08"),前6位代表日期,后6位代表时间,最后2位是时区。
3.Flash SMS
在某些手机上(所有的Nokias,某些Siemens, Ericsson, Motorola 等等..)class 0信息将被显示为一种flash SMS信息。这些信息只要一到达,将立即显示在屏幕上,而不需要按任何按钮。如果数据的编码方式是设置成16-bit unicode (ucs2), 而且信息以"0001"开头,那么它将作为一个闪烁的flash message显示。

Octet Value Description
TP-DCS 18 16 bits (UCS2), message class 0
TP-VP AA Validity period
TP-UDL 0C User Data Length, 12 octets
TP-UD 00 01 00 41 00 6C 00 65 00 72 00 74 User Data, message "Alert"
这个表显示了Flash SMS中的相关信息。
第一个unicode字符("00 01")使能闪烁。这样的消息最长就是69个unicode字符。
4.Nokia ICON
这是一个OTA (On The Air) bitmap.
这个文件是从Nokia论坛下载而来。在"Smart Messaging"连接中。
PDU
type 44
RP:0 (no reply path)
UDHI:1 (UD begins with a header)
SRI:0 (no status report will be returned)
MMS:1 (no more messages)
MTI:00 (SMS-deliver)
OA 0B
91
6302752852F1
length:11 digit
type: international,E.164/E.163
number: 36 20 5782251
PID 00
PDU content: short message
DCS F5
data coding: 8 bit
message class: 1
SCTS 991012
114343
40
date: 99/01/21
time: 11:34:34
timezone: GMT+1
UDL 89
137 octets
UD UDH 06
05
04
1583
1583
length of header: 6 octets
information element type: NBS port addressing
information element length: 4 octets
destination port: CLI icon
source port: CLI icon
OTA bitmap
hdr 00
48
0E
01
infofield: last octet, no compression,
no palette, 8 bit, 0 animated icons
width: 72 pixel
height: 14 pixel
depth: 1 ?
image

data
3FF00110005B0001E8
7FF802A801A500021C
3FF80C470101000408
7FF808010081001C04
3FF008150081001304
7E10183F0058803A84
7DF030490064802C9C
7E501855002D80473C
3AD0082A8058404218
39B005010060C04930
105005BE0042203220
1A1007620046600C40
09E001BB003B900840
042000960001080EA0

5.7Bit编码
"hellohello"包含了10个字符,他们必须一个个将用7-bits来代表。
h e l l o h e l l o
104 101 108 108 111 104 101 108 108 111
1101000 1100101 1101100 1101100 1101111 1101000 1100101 1101100 1101100 1101111
1101000
110010 1
11011 00
1101 100
110 1111
11 01000
1 100101
1101100
1101100
110111 1

 

首先将字符转换为7位的二进制,然后,将后面字符的位调用到前面,补齐前面的差别。例如:h翻译成1101000,e翻译成1100101,显然h的二进制编码不足八位,那么就将e的最后一位补足到h的前面。那么就成了11101000(E8)。剩余地编码看下表:

1 1101000
00 110010
100 11011
1111 1101
01000 110
100101 11
1101100 1

1 1101100
110111
E8 32 9B FD 46 97 D9
EC 37


那么就变成了9个八进制数 E8 32 9B FD 46 97 D9 EC 37。
6.错误信息
错误编码 意义
0-127 GSM 04.11 Annex E-2 values
128-255 GSM 03.40 section 9.2.3.22 values
300 Phone failure
301 SMS service of phone reserved
302 Operation not allowed
303 Operation not supported
304 Invalid PDU mode parameter
305 Invalid text mode parameter
310 SIM not inserted
311 SIM PIN necessary
312 PH-SIM PIN necessary
313 SIM failure
314 SIM busy
315 SIM wrong
320 Memory failure
321 Invalid memory index
322 Memory full
330 SMSC (message service center) address unknown
331 No network service
332 Network timeout
500 Unknown error
512 Manufacturer specific

shelly 发表于  2004-02-23 10:38:26


   JS取得上传文件的大小    |   阅读全文   |   评论(0)  |  引用(trackback0)  
From http://www.phpx.com 作者未知
取得上传文件的大小,客户端检测~~
<script>
var img=null;
function s()
{
if(img)img.removeNode(true);
img=document.createElement("img");
img.style.position="absolute";
img.style.visibility="hidden";
img.attachEvent("onreadystatechange",orsc);
img.attachEvent("onerror",oe);
document.body.insertAdjacentElement("beforeend",img);
img.src=inp.value;
}
function oe()
{
alert("cant load img");
}
function orsc()
{
if(img.readyState!="complete")return false;
alert("图片大小:"+img.offsetWidth+"X"+img.offsetHeight);
alert("图片尺寸:"+img.fileSize);
}
</script>
<input id=inp type="file">
<br>
<button onclick="s()">Test</button>
shelly 发表于  2004-02-23 10:28:38


   Win9x 中程序自启动的种种方式    |   阅读全文   |   评论(0)  |  引用(trackback1)  

前言:
有时候人们往往会为了一个程序的启动而头痛,因为一些用户往往不知道那些文件是如何启动的。所以经常会有些没用的东西挂在系统上占用资源。有时候也会有人因为不知道如何启动某个文件而头痛。更有些特洛依木马的作者因为不清楚系统的自启动方式而使自己的木马轻松被别人发现……
Windows的自启动方式其实有许多方式。除了一些常见的启动方式之外,还有一些非常隐蔽的可用来启动文件的方式。本文总结如下,虽然不是全部,但我想应该会对大家有所帮助。文章全部以系统默认的状态为准,以供研究。
其中(English)代表英文操作系统,(Chinese)代表中文操作系统。本文没加说明说的全为中文Windows98操作系统。
警告:
文中提及的一些操作可能会涉及到系统的稳定性。例如如果不正确地使用注册表编辑器可以导致可能重新安装系统这样严重的问题。微软也不能保证因不正常使用注册表编辑器而造成的结果可以被解决。笔者不对使用后果负责,请根据自己的情况使用。
Windows的自启动方式: 注册表的基本使用
1.自启动目录:
1.第一自启动目录:
默认路径位于:
C:\windows\start menu\programs\startup(English)
C:\windows\start menu\programs\启动(Chinese)
这是最基本、最常用的Windows启动方式,主要用于启动一些应用软件的自启动项目,如Office的快捷菜单。一般用户希望启动时所要启动的文件也可以通过这里启动,只需把所需文件或其快捷方式放入文件夹中即可。
对应的注册表位置:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
Startup="%Directory%"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
Startup="%Directory%"
其中“%Directory%”为启动文件夹位置。
英文默认为:
C:\windows\start menu\programs\startup
中文默认为:
C:\windows\start menu\programs\启动
在开始菜单的“启动”文件夹是可更改的,如果用户更改了启动文件夹,则以上注册表的键值均会改变为相应的名称。
值得注意的是:开始菜单的“启动”文件夹中的内容虽然在默认的状态下可以被用户看得一清二楚。但通过改动还是可以达到相当隐蔽地启动的目的的:
首先,“启动”文件夹中的快捷方式或其他文件的属性可以改变为“隐藏”。这样可以达到系统不启动被隐藏的文件,等到需要启动的时候又可以通过更改回文件属性而恢复启动的作用。
其次,其实“启动”文件夹只是一个普通的文件夹,但是由于系统监视了这个文件夹,所以变得有些特殊,但文件夹有的功能该文件夹也是有的。譬如“启动”文件夹的名称是可以更改的,并且“启动”文件夹也可以设置属性。如果把属性设置为“隐藏”,则在系统中的【开始】&#61672;;【程序】菜单中是看不到“启动”文件夹的(即使在“文件夹选项”中已经设定了“显示所有文件”)。而系统还会启动这个被隐藏的文件夹中的非隐藏文件。
敏感的人们也许已经发现问题。举一个例子:
如果我想启动A木马的server端服务器,我可以把原来的“启动”菜单的名称更改为“StartUp”(这里是随便改的,注册表相应的键值也会自动更改。)之后再创建一个名为“启动”的文件夹,把“StartUp”菜单中的文件全部复制(这里用复制,可以骗过用户的检查)到“启动”菜单中,然后把A木马的server程序放入“StartUp”文件夹中,最后把“StartUp”文件夹隐藏。大功告成!
从外表看来,用户的【开始】&#61672;;【启动】目录还在,而且要启动的文件也在。但系统此时启动的文件不是名为“启动”的文件夹中的文件,而是名为“StartUp”的文件夹中的文件。如果木马做的好的话,完全可以在每次启动的时候把“StartUp”中的文件复制到“启动”目录中来达到实时更新启动目录的目的。由于“StartUp”文件夹被隐藏,从【开始】&#61672;;【程序】中是无法看到真正的启动菜单“StartUp”的,所以达到了隐蔽启动的目的!
这个启动方式虽然比较隐蔽,但通过msconfig依旧可以在“启动”页中看出来。
2.第二自启动目录:
是的,其实,Windows还有另外一个自启动目录,而且很明显但却经常被人们忽略的一个。
该路径位于:
C:\WINDOWS\All Users\Start Menu\Programs\StartUp(English)
C:\WINDOWS\All Users\Start Menu\Programs\启动(Chinese)
这个目录的使用方法和第一自启动目录是完全一样的。只要找到该目录,将所需要启动的文件拖放进去就可以达到启动的目的。
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\User Shell Folders]
"Common Startup"="%Directory%"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\Shell Folders]
"Common Startup"="%Directory%"
值得注意的是:该目录在开始菜单的“启动”目录中是完全不能被看见的。而伴随着每次启动,该目录下的非隐藏文件也会随之启动!
另外,在Msconfig中可以看到在这个目录下要启动的文件。


2.系统配置文件启动:
由于系统的配置文件对于大多数的用户来说都是相当陌生的;这就造成了这些启动方法相对来说都是相当隐蔽的,所以这里提到的一些方法常常会被用于做一些破坏性的操作,请读者注意。
1.WIN.INI启动:
启动位置(file.exe为要启动的文件名称):

[windows]
load=file.exe
run=file.exe
注意:load=与run=的区别在于:通过load=运行文件,文件会在后台运行(最小化);而通过run=来运行,则文件是在默认状态下被运行的。
2.SYSTEM.INI启动:
启动位置(file.exe为要启动的文件名称):
默认为:
[boot]
Shell=Explorer.exe
可启动文件后为:
[boot]
Shell=Explorer.exe file.exe
说明:
笔者记得在诺顿先生(就是开发出Norton系列软件的人)写的一本书里面曾经说过,1、2这两个文件的有无对系统没有什么影响,但由于时间的关系,笔者没有来得及试验,有兴趣者可以试一试。
不过有一点是可以肯定的,这样的启动方式往往会被木马或一些恶作剧程序(如,妖之吻)利用而导致系统的不正常。由于一般用户很少会对这两个文件关心,甚至有的人不知道这些文件是做什么用的,所以隐蔽性很好。但由于其使用的越来越频繁,这种启动方式也被渐渐的察觉了。用户可以使用msconfig这个命令实现检查是否有什么程序被加载。具体的是在看是菜单中的“运行”中输入msconfig回车,之后按照文字说明即可。
注意:
1.    和WIN.INI文件不同的是,SYSTEM.INI的启动只能启动一个指定文件,不要把Shell=Explorer.exe file.exe换为Shell=file.exe,这样会使Windows瘫痪!
2.    这种启动方式提前于注册表启动,所以,如果想限制注册表中的文件的启动,可是使用这种方法。
3.WININIT.INI启动:
Wininit.ini这个文件也许很多人不知道,一般的操作中用户也很少能直接和这个文件接触。但如果你编写过卸载程序的话,也许你会知道这个文件。
WinInit即为Windows Setup Initialization Utility。翻译成中文就是Windows安装初始化工具。这么说也许不明白,如果看到如下提示信息:
Please wait while Setup updates your configuration files.
This may take a few minutes...
大家也许就都知道了!这个就是Wininit.ini在起作用!
由于在Windows下,许多的可执行文件和驱动文件是被执行到内存中受到系统保护的。所以在Windows的正常状态下更改这些文件就成了问题,因此出现了Wininit.ini这个文件来帮助系统做这件事情。它会在系统装载Windows之前让系统执行一些命令,包括复制,删除,重命名等,以完成更新文件的目的。Wininit.ini文件存在于Windows目录下,但在一般时候我们在C:\Windows目录下找不到这个文件,只能找到它的exe程序Wininit.exe。原因就是Wininit.ini在每次被系统执行完它其中的命令时就会被系统自动删除,直到再次出现新的Wininit.ini文件……之后再被删除。
文件格式:
[rename]
file1=file2
file1=file2的意思是把file2文件复制为文件名为file1的文件,相当于覆盖file1文件。
这样启动时,Windows就实现了用file2更新file1的目的;如果file1不存在,实际结果是将file2复制并改名为file1;如果要删除文件,则可使用如下命令:
[rename]
nul=file2  
这也就是说把file2变为空,即删除的意思。
以上文件名都必须包含完整路径。
注意:1.由于Wininit.ini文件处理的文件是在Windows启动以前处理的,所以不支持长文件名。
2.以上的文件复制、删除、重命名等均是不提示用户的情况下执行的。有些病毒也会利用这个文件对系统进行破坏,所以用户如果发现系统无故出现:
Please wait while Setup updates your configuration files.
This may take a few minutes...
那么也许系统就有问题了。
3. 在Windows 95 Resource Kit中提到过Wininit.ini文件有三个可能的段,但只叙述了[rename]段的用法。
4.WINSTART.BAT启动:
这是一个系统自启动的批处理文件,主要作用是处理一些需要复制、删除的任务。譬如有些软件会在安装或卸载完之后要求重新启动,就可以利用这个复制和删除一些文件来达到完成任务的目的。如:
“@if exist C:\WINDOWS\TEMP\PROC.BAT call C:\WINDOWS\TEMP\PROC.BAT”
这里是执行PROC.BAT文件的命令;
“call filename.exe > nul”
这里是去除任何在屏幕上的输出。
值得注意的是WinStart.BAT文件在某种意义上有和AUTOEXEC.BAT一样的作用。如果巧妙安排完全可以达到修改系统的目的!
5.AUTOEXEC.BAT启动:
这个就没的说了,应该是用户再熟悉不过的系统文件之一了。每次重新启动系统时在DOS下启动。恶意的程序往往会利用这个文件做一些辅助的措施。
不过,在AUTOEXEC.BAT文件中会包含有恶意代码。如format c: /y等;由于BAT恶意程序的存在,这个机会大大地增加了。譬如最近很流行的SirCam蠕虫也利用了Autoexec.bat文件。
说明:
4、5这两个文件都是批处理文件,其作用往往不能完全写出来,因为批处理的用处在DOS时代的应用太广泛,它的功能相对来说也是比较强大。想利用这两个文件,需要对DOS有一定的了解。.
3.注册表启动:
注册表中的启动应该是被使用最频繁的启动方式,但这样的方式也有一些隐蔽性较高的方法,大致有三种。
1.常规启动:
其中\%path%\为任意路径,file.exe为要运行的程序。
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
"Anything"="\%path%\file.exe"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
"Anything"="\%path%\file.exe"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
"Anything"="\%path%\file.exe"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
"Anything"="\%path%\file.exe"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
   "Whatever"="c:\runfolder\program.exe"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
   "Whatever"="c:\runfolder\program.exe"
注意:
1.如果需要运行.dll文件,则需要特殊的命令行。
如:
Rundll32.exe C:\WINDOWS\FILE.DLL,Rundll32
2.解除这里相应的自启动项只需删除该键值即可,但注意不要删除如SystemTray、ScanRegistry等这样的系统键值。
3.如果只想不启动而保留键值,只需在该键值加入rem即可。如:
“rem  C:\Windows\a.exe”
4.在注册表中的自启动项中没有这项:
[HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\RunServices]
5.Run和RunServices的区别在于:Run中的程序是在每次系统启动时被启动,RunServices则是会在每次登录系统时被启动。
关于:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx]
有特殊的语法:
例如,运行notepad.exe
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
"Title"="My Setup Title"
"Flag"=dword:00000002

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001
"RunMyApp"="||notepad.exe"
语法为:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
Flags = 0x0000000
Title = "Status Dialog Box Title"

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\Depend
0001 = "xxx1"
000X = "xxxx"

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001
Entry1 = "MyApp1.exe"
EntryX = "MyApp2.exe"

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\000x
...
注意:
1.“xxx1,xxxx”是一个动态链接库(DLL)或.OCX文件名(如My.ocx或My.dll)。
2.“0001,000x”是部分名字。可以是数字和文字。
3.“entry1,entryX”是指向一个要运行的程序文件的注册表串值。
键值的说明:
Flags是一个定位在RunOnceEx键用来激活/禁止的DWORD值,具体如下:
值    功能    功能定义
0x00000000    默认    所有功能被禁止
0x00000004    检查壳状况    打开壳的读写校验准备接受OLE命令
0x00000008    无报错对话    错误对话框不显示
0x00000010    创建错误报告文件    创建 C:\Windows\RunOnceEx.err 文件如果有错误出现
0x00000020    创建执行报告文件    创建一个有命令状态的C:\Windows\RunOnceEx.log文件
0x00000040    无例外限制    当注册DLL时不限制例外
0x00000080    无状态对话    当RunOnceEx运行时状态对话框不显示

由于涉及篇幅较多,具体做法请浏览微软网页:
http://support.microsoft.com/support/kb/articles/Q232/5/09.ASP

2.特殊启动1:
在注册表中除了上述的普通的启动方式以外,还可以利用一些特殊的方式达到启动的目的:
[HKEY_CLASSES_ROOT\exefile\shell\open\command] @="%1" %*
[HKEY_CLASSES_ROOT\comfile\shell\open\command] @="%1" %*
[HKEY_CLASSES_ROOT\batfile\shell\open\command] @="%1" %*
[HKEY_CLASSES_ROOT\htafile\shell\open\command] @="%1" %*
[HKEY_CLASSES_ROOT\piffile\shell\open\command] @="%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\batfile\shell\open\command] @="%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\comfile\shell\open\command] @="%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\exefile\shell\open\command] @="%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\htafile\shell\open\command] @= "%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\piffile\shell\open\command] @="%1" %*

其实从注册表的路径上也许就隐约可以看出,这些都是一些经常被执行的可执行文件的键值。往往有些木马是可以更改这些键值从而达到加载的目的:
如果我把“”%1”%*”改为“file.exe”%1”%*”则文件file.exe就会在每次执行某一个类型的文件(要看改的是哪一个文件类型)的时候被执行!
当然,可以被更改的不一定只是可执行文件,譬如冰河就利用了TXT文件的键值:
[HKEY_CLASSES_ROOT\txtfile\shell\open\command]实现木马的一种启动方式。
3.特殊启动2:
在注册表中:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\
的位置上有这样的地址。该地址是系统启动VxD驱动文件放置的地址,就像PrettyPark这个蠕虫一样,可以建立一个主键之后把VxD文件添加到注册表中在这里。
注意:不可以直接把一个EXE文件改名为VxD文件,需要另外进行编程,生成的VxD文件。
4.其他启动方式:
1.C:\Explorer.exe启动方式:
这是一种特殊的启动方式,很少有人知道。
在Win9X下,由于SYSTEM.INI只指定了Windows的外壳文件EXPLORER.EXE的名称,而并没有指定绝对路径,所以Win9X会搜索EXPLORER.EXE文件。
搜索顺序如下:
1.    搜索当前目录。
2.    如果没有搜索到EXPLORER.EXE则系统会获取
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path]的信息获得相对路径。
3.    如果还是没有文件系统则会获取[HKEY_CURRENT_USER\Environment\Path]的信息获得相对路径。
其中:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path]和[HKEY_CURRENT_USER\Environment\Path]所保存的相对路径的键值为:“%SystemRoot%\System32;%SystemRoot%”和空。
所以,由于当系统启动时,“当前目录”肯定是\%SystemDrive%\(系统驱动器),这样系统搜索EXPLORER.EXE的顺序应该是:
1.    \%SystemDrive%\(例如C:\)
2.    \%SystemRoot%\System32(例如C:\WINNT\SYSTEM32)
3.    \%SystemRoot%\(例如C:\WINNT)
此时,如果把一个名为EXPLORER.EXE的文件放到系统根目录下,这样在每次启动的时候系统就会自动先启动根目录下的EXPLORER.EXE而不启动Windows目录下的EXPLORER.EXE了。
在WinNT系列下,WindowsNT/Windows2000更加注意了EXPLORER.EXE的文件名放置的位置,把系统启动时要使用的外壳文件(EXPLORER.EXE)的名称放到了:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Shell]
这个位置。
作为默认这个位置是不存在的,默认为是Explorer.exe。
具体请参考:http://www.microsoft.com/technet/security/bulletin/fq00-052.asp
注意:
一定要确定根目录下的EXPLORER.EXE要能启动Windows目录下的EXPLORER.EXE,否则会导致Windows无法启动!
现在流行的病毒CodeRed就会在C:\和D:\目录下放置两个约8KB的EXPLORER.EXE的文件!
在Windows 2000 SP2中微软已经更改了这一方式。
2.屏幕保护启动方式:
Windows的屏幕保护程序是一个.scr文件。这是一个PE格式的可执行文件。如果把屏幕保护程序.scr更名为.exe的文件,则该程序仍然可以正常启动。类似的.exe文件更名为.scr文件也是一样可以被运行!
.scr文件默认存在于C:\Windows目录中,他的名字就是在“显示”属性中的“屏幕保护程序”中的名称。在C:\Windows目录下的所有*.scr文件都会被Windows的“屏幕保护程序”显示,而文件路径本身保存在System.ini中的SCRNSAVE.EXE=的这条中。有意思的是在SCRNSAVE.EXE=这条中,其规定的路径也包含了目录名称。即如果我想安装一个.scr文件时,譬如安装路径为D:\SCR\1.scr,而D:\SCR\这个目录中还有2.scr,则在这个目录中的所有.scr(1.scr,2.scr)文件都会被显示在“屏幕保护程序”设置中。如果屏幕保护程序设为“(无)”,则SCRNSAVE.EXE=这条不存在。但如果SCRNSAVE.EXE=这条所指的文件或目录是错误的,则在“屏幕保护程序设置”中仍然会显示“(无)”。
屏幕保护程序的启动时间保存在注册表中的这个位置上:
HKEY_USERS\.DEFAULT\Control Panel\desktop\ScreenSaveTimeOut
时间单位为秒,不过虽然是秒,可启动时间却为分,即从60秒开始记录,如果记录时间小于60秒,则自动定为1分钟。
屏幕保护是否设置密码的键值为:
HKEY_USERS\.DEFAULT\Control Panel\desktop\ScreenSaveUsePassword
有密码则值为1没有密码则值为0。
由此可见,如果有人把自己所作的.exe程序更名为.scr的程序,并使程序能够在SYSTEM.INI中添加“SCANSAVE.EXE=/%Path%”f/ile.scr”(/%Path%/file.scr为所需要设置的文件的路径和文件名,如C:\Program files\trojan.scr),修改注册表中的HKEY_USERS\.DEFAULT\Control Panel\desktop\ScreenSaveTimeOut,定时间为60,则系统只要闲置一分钟该文件就会被启动!
另外一个简单的破坏方式就是可以随机产生屏幕保护密码并写入相应文件的相应位置,定时间为1分钟,则系统只要闲置一分钟则会被被锁!(由于涉及问题并非自启动问题,所以不加以讨论。)
注意:由于SCANSAVE.EXE=这里还会定义.scr文件的路径,所以最好不要把要启动的文件放置在.scr文件较多的一些目录,否则容易引起怀疑。(Windows目录除外)
3.依附启动:
这类启动方式已经有几分类似病毒了。这种方法是利用病毒的传染机制把要启动的EXE文件附着在另外的一个和多个EXE文件上,从而达到启动这个EXE文件就可以启动要启动的文件的目的。记得1999年YAI这个木马流行的时候,它就使用了依附一个EXE文件而达到启动的目的,但是由于BUGS和方式问题该木马的破坏作用却体现在了它“病毒”的一面。
使用这种启动方法一定要注意不能破坏EXE文件(否则会很容易被发现),而且最好把木马定位在固定的一个或者几个EXE文件上。如:IEXPLORE.EXE(IE的EXE文件),RNAPP.EXE(拨号网络的EXE文件)等等。
注意:这种方法的使用比较危险,技术上也需要相当功底,而且和病毒的距离很近,慎用。
4.计划任务启动方式:
Windows的计划任务是Windows的一个预置实现某些操作而使用的一个功能。但是如果利用这个功能也是能够实现自启动的目的的!由于很多电脑都会自动加载“计划任务”所以隐蔽性相对不错。
在Windows默认的情况下,计划任务是一个个保存在C:\Windows\Tasks\目录下的.job文件。.job文件里包括了启动方式、文件路径等一系列的信息。编制出或者使软件自己可以写出.job文件,则是关键。之后在相关地方写入标记启动即可。
由于时间关系,这个方法没有来得及试验,读者可以自己试验一下。
5.AutoRun.inf启动方式:
Autorun.inf这个标识也许大家都见过。是的,这个最常出现在光盘中,用于光盘自启动。每次把光盘放入光驱中的时候,系统会通过这个文件来决定是否自动启动光盘。但是有没有想过,这个文件也可以用来自启动一些文件!
Autorun.inf的内容通常是:
[AUTORUN]
OPEN=file.exe
ICON=icon.ico

OPEN中是插入光盘或者双击光盘盘符就会运行的可执行文件的名称。
ICON中是该光驱驱动器的图标文件。该文件可以是其他文件。如:
[AUTORUN]
OPEN=file.exe
ICON=icon.exe,2
其中icon.exe是一个有图标文件的可执行文件,“,2”则是该文件中的第3个图标。(“,0”是第一个图标,无数字则默认为第一个图标)。
最关键的是该Autorun.inf文件是可以被用在硬盘的驱动器上的。也就是说,如果把光盘上的所有文件及目录原封不动的复制到某一硬盘的根目录下,则双击盘符会出现自动运行文件!
如果是木马的话,打一个比方:一个木马如果执行后被命名为aaa.exe放置在C:\Windows\目录下。那么该木马可以生成一个autorun.inf
文件于C:\下,内容如下:
[AUTORUN]
OPEN=Windows\aaa.exe
ICON=aaa.exe
这样的话,盘符图标为aaa.exe的第一个图标文件。则在每次双击C盘的时候都会执行aaa.exe文件了。但要注意的是,aaa.exe文件
最好能够打开C盘目录。(比较容易伪装)

注意:
1.autorun.inf的属性被改为隐藏后仍可以正常使用。
2.autorun.inf中的路径对相对路径和绝对路径都是可以实现的。也就是说,如果autorun.inf被放在1盘符下,也可以2盘符上的文件!如:
如果把autorun.inf文件放在C盘根目录下,内容为
[AUTORUN]
OPEN=D:\CCC\bbb.exe
ICON=bbb.exe
则这时如果双击C盘则可以执行D盘CCC目录上的bbb.exe文件!
3.如果没有OPEN项目,则系统不执行任何文件,而去执行下一个命令。
4.如果没有ICON项目,则该盘符的图标为原Windows盘符图标,但如果有ICON项却设置错误,或者所设置的文件没有图标,则系统会显示为默认的空白图标。
5.自动启动相关:
1.代启动:
这种启动方式其实只是一个方法的问题。即可以用启动一个正常文件来启动另一个文件,SubSeven就用过启动Windos.exe从而启动SubSeven的Sever文件的方法。
2.Start启动:
在“运行“中或“MS-DOS”方式中输入start回车,则会显示
Runs a Windows program or an MS-DOS program.

START [options] program [arg...]
START [options] document.ext

/m[inimized] Run the new program minimized (in the background).
/max[imized] Run the new program maximized (in the foreground).
/r[estored]  Run the new program restored (in the foreground). [default]
/w[ait]      Does not return until the other program exits.
如果要启动的程序配合这个命令,则可以更加隐蔽,如:
start/m file.exe
但似乎有些有启动画面的软件(如金山词霸)对这条命令并没有反映。
3.控制面板启动:
这是利用控制面板程序可以被类似DLL执行,从而达到启动目的。
在控制面板中,.cpl文件是控制面板的原文件。默认的这些文件都会被放置在/%WINDOWS%/SYSTEM/目录下的,如desk.cpl是桌面属性、inetcpl.cpl是Internet选项之类。但这些.cpl文件全都是PE格式文件,也就是说如果用户把一个可执行的类似DLL的.cpl文件放入%\Windows%\System\中,则在控制面板中可看到其图标,并可执行!
由于.cpl文件的特殊性,需要使用rundll32.exe来启动该文件。rundll32.exe是Windows用来调用动态连接库函数时所使用的文件,在运行中输入:
rundll32 shell32.dll,Control_RunDLL /%path%/desk.cpl,,X
其中shell32.dll为被调用的DLL文件,意思为调用shell32.dll中的Control_RunDLL来打开desk.cpl文件;/%path%/为.cpl文件的路径,默认为C:\Windows\System;最后的X为desk.cpl文件的页数:从0开始,0为第一页(如“显示属性”的“背景”),1为第二页(如“桌面属性”的“屏幕保护程序”),依此类推。
但如果照上面的方法做,则该文件会在控制面板中被显示。有两种方法可以不让其显示:
1.    不要把自己的.cpl文件放在C:\WINDOWS\SYSTEM中。因为默认的情况下Windows会加载的所有.cpl文件。如果想让其显示则打开C:\WINDOWS\下的Control.ini文件,在[MMCPL]中写入类似:
file.cpl=D:\path\file.cpl
的命令,从而达到显示的目的。
2.    当你看到Control.ini文件的时候一定可以看到在[MMCPL]上面的[don't load]。是的,如果把你的文件以file.cpl=no的格式写入到这里面,那么文件就不被加载了。反之恢复。
4.其他:
注册表中:
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
的“HideFileExt”这个键值是确定Windows是不是显示扩展名的值,如果其值为1就隐藏扩展名,为0则不隐藏。
EXE文件中:
如SirCam蠕虫一样,*.EXE文件的扩展名可以改名称为.BAT、.COM、.PIF、.SCR等,并且运行效果一样,反过来不一定。但.EXE文件并不能更名为.LNK文件,这也许也是SirCam的一个BUG。
最后:
Windows的自启动方式有很多样式。这是Windows系统的一部分。一个隐蔽而又很少有人知道的自启动方式是远程监控软件成为一个优秀的软件的必要的条件。对于普通用户来说,了解这些信息也是非常必要的。笔者试图全面的介绍这些可以启动的方法和想法。文中提到的一些自启动方法有的很普通,有的则很少有人知道,有些方式甚至有可能是第一次被写出来。其中的许多方式笔者加入了自己的想法,使一些方式虽然普通但却很隐蔽。
其中所提的自启动方式全部在Windows98或提到的相应的系统中默认测试通过。对Windows ME和Windows2000只有部分适用。通过对不同平台的自启动方式测试,也可以发现Windows系统还是朝着越来越完善的方向发展。所以在未来的某个WINDOWS版本中,笔者不能保证这些能被使用。但总会有一些可以利用的地方。如果这篇涂鸦能给各位读者带来一些启发,那么笔者将会感到非常高兴!
由于时间仓促再加上笔者所学有限,文中错误之处一定不少,望读者海涵。

关于Windows的自启动方式的探讨可以与我联系,我的E-mail是snaix@yeah.net
本文转载请注明作者及出处。若用于商业,请与作者联系。
SnaiX完成于2001年8月15日

shelly 发表于  2004-02-23 10:22:40


   PHP 常见问题    |   阅读全文   |   评论(0)  |  引用(trackback1)  

在PHP4.2以后的版本中register_global默认为off
若想取得从另一页面提交的变量:
方法一:在PHP.ini中找到register_global,并把它设置为on.
方法二:在接收网页最前面放上这个extract($_POST);extract($_GET);(注意extract($_SESSION)前必须要有Session_Start()).
方法三:一个一个读取变量$a=$_GET["a"];$b=$_POST["b"]等,这种方法虽然麻烦,但比较安全.

PHP代码:

<?PHP
Ob_Start
();
Session_Start();
Echo
"<pre>";
Echo
"本页得到的_GET变量有:";
Print_R($_GET);
Echo
"本页得到的_POST变量有:";
Print_R($_POST);
Echo
"本页得到的_COOKIE变量有:";
Print_R($_COOKIE);
Echo
"本页得到的_SESSION变量有:";
Print_R($_SESSION);
Echo
"</pre>";
?>

为什么我向另一网页传送变量时,只得到前半部分,以空格开头的则全部丢失

PHP代码:

<?php
$Var
="hello php";//修改为$Var="     hello php";试试得到什么结果
$post= "receive.php?Name=".$Var;
header("location:$post");
?>


receive.php的内容:

PHP代码:

<?PHP
Echo "<pre>";
Echo   
$_GET["Name"];
Echo
"</pre>";
?>



正确的方法是:

PHP代码:

<?php
$Var
="hello php";
$post= "receive.php?Name=".urlencode($Var);
header("location:$post");
?>



在接收页面你不需要使用Urldecode(),变量会自动编码.

规范你的SQL语句


在表格,字段前面加上"`",这样就不会因为误用关键字而出现错误,
当然我并不推荐你使用关键字.

例如
$Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1, 'criterion your sql string ', '2003-07-11 00:00:00')"

我怎么知道系统默认支持什么函数

PHP代码:


<?php
$arr
= get_defined_functions();
Function
php() {
}
echo   
"<pre>";
Echo   
"这里显示系统所支持的所有函数,和自定以函数php\n";
print_r($arr);
echo   
"</pre>";
?>

 

如何比较两个日期相差几天

PHP代码:


<?PHP
$Date_1
="2003-7-15";//也可以是:$Date_1="2003-6-25 23:29:14";
$Date_2="1982-10-1";
$Date_List_1=explode("-",$Date_1);
$Date_List_2=explode("-",$Date_2);
$d1=mktime(0,0,0,$Date_List_1[1],$Date_List_1[2],$Date_List_1[0]);
$d2=mktime(0,0,0,$Date_List_2[1],$Date_List_2[2],$Date_List_2[0]);
$Days=round(($d1-$d2)/3600/24);
Echo   
"偶已经奋斗了 $Days 天^_^";
?>
数据放入数据库和取出来显示在页面需要注意什么

入库时
$str=addslashes($str);
$sql="insert into `tab` (`content`) values('$str')";
出库时
$str=stripslashes($str);
显示时
$str=htmlspecialchars(nl2br($str)) ;

shelly 发表于  2004-02-23 10:20:24


   开张~~~~    |   阅读全文   |   评论(3)  |  引用(trackback1)  
感谢您的光临,及感谢您的支持~~~
在这里收录了我在网络上的种种~~
欢迎加入收藏夹~~~~~~~~
shelly 发表于  2004-02-23 10:13:11