EnvSet("TEMP",EnvGet("systemdrive")&”WindowsTemp”)
;运行完成后,%TEMP%这个环境变量的值将被修改,如果系统盘为C盘,则%TEMP%的值为
“C:WindowsTemp”
======================================================================
DirCopy("C:Skyfree","D:Skyfree",1)
;[标志],为0(默认)时不覆盖已有的文件夹,为1则覆盖
======================================================================
DirCreate("C:Skyfree")
;创建文件夹
======================================================================
$Size=DirGetSize("C:")/1024/1024
;由于DirGetSize返回值的单位是字节,所以我们需要连续除以两次1024才能得到MB级
别的剩余空间
======================================================================
DirMove("C:Skyfree","D:Skyfree",1)
;移动指定目录及其所有子目录和文件,[标志],为0(默认)时不覆盖已有的文件夹,为1则
覆盖
======================================================================
DirRemove("C:Skyfree",1)
;语法:DirRemove("路径"[,递归遍历])。[递归遍历],0则不删除其子文件和文件夹,
1则删除
======================================================================
$Format=DriveGetFileSystem("C:")
;返回指定驱动器的文件系统类型:返回值:FAT/FAT32/NTFS/CDFS/UDF
======================================================================
$Type=DriveGetFileSystem("C:")
;返回指定驱动器的类型。返回值:"Unknown"(未知类型)、"Removable"(可移动)、"Fixed"
(固定的)、"Network"(网络)、"CDROM"(光驱)、"RAMDisk"(内存盘)
======================================================================
$FreeSpace=DriveSpaceFree("C:")/1024
;这样将获得GB级别的剩余体积.以MB(兆字节)为单位返回指定路径所在分区的剩余空间
======================================================================
创建快捷方式
FileCreateShortcut("D:",@DesktopCommonDir&"360安全卫
士.lnk","D:360safe")
;语法:FileCreateShortcut("目标文件","lnk文件"[,"工作目录"]),创建指定文件的
快捷方式(.lnk文件)
======================================================================
FileCopy("C:","D:",1)
;语法:FileCopy("源文件","目标路径"[,标志])
;参数:[标志]0=(默认)不覆盖存在的文件;1=覆盖存在的文件;8=如果目标文件夹
不存在,就先创建(查看注意部分)
======================================================================
FileDelete("C:")
;删除一个或多个文件
;====================================================
IfFileExists("C:")Then
MsgBox(0,"","存在")
El
MsgBox(0,"","不存在")
EndIf
;作用:检查指定文件或目录是否存在
;语法:FileExists("路径")
;返回值:存在则返回1(真),不存在则返回0(假)
;==================================================
FileMove("C:","D:",1)
;作用:移动一个或多个文件
;语法:FileMove("源文件","目标路径"[,标志])
;参数:[标志]0=(默认)不覆盖存在的文件1=覆盖存在的文件8=如果目标文件夹不
存在,就先创建(查看注意部分)
;作用:修改一个或多个文件的属性
;语法:FileSetAttrib("文件","+RASHNOT")
;参数:"R"=READONLY(只读)"A"=ARCHIVE(存档)"S"=SYSTEM(系统文件)"H"=HIDDEN
(隐藏文件)
;"N"=NORMAL(普通)"O"=OFFLINE(脱机文件)"T"=TEMPORARY(临时文件)
;+增加属性,例如+R、+S、+H
;去除属性,例如R、S、H
范例:
FileSetAttrib("C:","+RSH")
FileSetAttrib("C:","RSH")
;=========================================
IniRead("C:","PreSetup","Exe","NA")
这行语句的意思是从C:这个配置文件中寻找PreSetup段,
再从PreSetup这段下寻找Exe关键字,随后读取Exe关键字对应的值,如果Exe
关键字的值为空则返回“NA”。
;==========================================
IniWrite
作用:向某标准配置文件(*.ini)中写入某个数值
语法:IniWrite("文件名","字段名","关键字","数值")
范例:
IniWrite("C:","SK3","UnDev","True")
IniWrite和IniRead是对应的,IniWrite用来写配置文件,上面语句的意思是寻找
C:这个配置文件,并寻找SK3这一段,再由SK3段中寻找UnDev
项并把这项的值设置为True。
;=====================================================
语法:Random([最小值[,最大值[,标志]]])
参数:最小值,随机数的最小值,默认为0;最大值,随机数的最大值,默认为1;标志,
设为1则返回整数,默认则返回一个浮点数
$Rs=Random(2,5,1);上述语句将随机选取2到5之间的一个整数赋值给$Rs。
;=====================================================
$passwd=InputBox("权限核查","请输入密码:","","*")
;作用:显示以一个输入框以供用户输入数据
;语法:InputBox("标题","提示信息"[,"默认数据"[,"密码字符"[,宽度,高度[,
左边,上边[,超时时间]]]]])
;超时时间,[可选参数]以秒为单位。指定时间过后输入框将自动关闭
;=========================================================
MsgBox
作用:显示一个简单的对话框(可设置超时属性)
语法:MsgBox(标志,"标题","文本"[,超时时间])
参数:
标志,标志是几个值的加和,我只介绍最常用的两类值,如果有更多的需要请参阅
AU3帮助文件。一个是要显示的按钮的对应值,一个是要显示的提示图标对应的值。
这两个值的列表如下:
按钮对应的值:
0=确定
1=确定和取消
2=终止、重试、忽略
3=是、否、取消
4=是和否
5=重试和取消
6=取消、重试、继续
提示图标对应的值:
0=(无图标)
16=警告标志(一般用于错误提示)
32=问号图标
48=感叹号图标
64=由一个“i”和圆圈组成的图标(消息通知)
返回值:
这些返回值代表着所按下的按钮,
OK(确定)=1
CANCEL(取消)=2
ABORT(终止)=3
RETRY(重试)=4
IGNORE(忽略)=5
YES(是)=6
NO(否)=7
TRYAGAIN(重试)=10
CONTINUE(继续)=11
范例:
$Flag=MsgBox(4+32,"驱动包删除","是否要删除系统驱动包备份?")
If$Flag=6Then
DirRemove("C:Drivers",1)
EndIf
这个例子中,$Flag用来记录MsgBox执行后的返回值,MsgBox由于我的标志选
择了4+32,这将意味着这个MsgBox框中会有Yes和No两个按钮并且提示标志是一个
“?”,在随后的判断中,$Flag如果等于6,则代表我在MsgBox中单击了Yes这个按
钮,这将执行DirRemove("C:Drivers",1),否则将不执行。
;=========================================================
ToolTip
作用:在屏幕的任意位置显示一个工具提示
语法:ToolTip("文本"[,X坐标[,Y坐标[,"标题"[,图标[,选项]]]]])
参数:
文本,工具提示的文本(如果是空字符串则清除现有的工具提示)
X,Y坐标,[可选参数]工具提示出现位置地X和Y坐标标题,[可选参数]工具提示的标
题,需要IE5+支持图标,[可选参数]预定义标题显示的图标:需要IE5+支持.需要设置
一个标题,
0=没有图标,1=信息图标,2=警告图标,3=错误图标
选项=[可选参数]为不同的显示类型设置不同的显示选项:
1=显示气泡提示,需要IE5+支持
2=在X,Y坐标中,居中显示提示.而不是在左上角显示.
4=如果有必要,强制显示工具提示总是可见,如果有多个显示器并且工具提示显示
于屏幕边界,那么在另外的显示器上面也会显示.这个选项不能工作于Windows95或
者WindowsNT.在那些平台,工具提示只能限制在主显示器里面
范例:
TooTip可以很简单帮我们做出来一些提示,这些提示有些事后很有用。
ToolTip("正在安装AMD双核驱动...",@DesktopWidth-200,@DesktopHeight-80,"提
示:",1,1)
;======================================================
RunWait
作用:运行一个外部程序并暂停脚本的执行直至该程序执行完毕
语法:RunWait("文件名"[,"工作目录"[,标志]])
参数:
文件名,可执行文件的完整路径(文件格式为EXE、BAT、COM或PIF)。
工作目录,[可选参数]工作目录。
标志,[可选参数]启动程序时的初始状态:
@SW_HIDE=隐藏窗口
@SW_MINIMIZE=最小化窗口
@SW_MAXIMIZE=最大化窗口
范例:
RunWait("C:","",@SW_HIDE)
RunWait("C:","",@SW_HIDE)
隐藏运行,运行完毕再隐藏运行。
还有一个Run函数,和RunWait类似,只是Run函数只调用外部程序运行而不等待这个外
部程序的运行结束。
;========================================================
Shutdown
作用:关机操作
语法:Shutdown(参数)
参数:
0=Logoff(注销)
1=Shutdown(关机)
2=Reboot(重启)
4=Force(强制执行)
8=Powerdown(关机)
32=Suspend(待机)
64=Hibernate(休眠)
范例:
Shutdown(Reboot)
;==========================================================
RegDelete
作用:从注册表中删除指定键值
语法:RegDelete("键名"[,"值项"])
范例:RegDelete("HKEY_LOCAL_MACHINESOFTWARE","TestKey")
;清除运行记录
RegDelete("HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerRunMRU","")
::清除系统搜索记录
RegDelete("HKCUSoftwareMicrosoftSearchAssistantACMru","")
RegWrite("HKCUSoftwareMicrosoftSearchAssistantACmru","","","")
::清除IE地址栏中的上网记录
RegDelete("HKCUSoftwareMicrosoftInternetExplorerTypedURLs","")
;===========================================================
RegRead
作用:读取注册表指定的值
语法:RegRead("键名","值项")
范例:
$Reg
=RegRead("HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion","Program
FilesDir")
;=======================================================
RegWrite
作用:创建一个主键、子键或值项
语法:RegWrite("键名"[,"值项","类型",数据])
参数:
类型,[可选参数]目标值项的数据类型,比如:"REG_SZ"、"REG_MULTI_SZ"、
"REG_EXPAND_SZ"、"REG_DWORD"或"REG_BINARY"。
范例:
RegWrite("HKEY_LOCAL_MACHINESOFTWARETest","TestKey","REG_SZ","Hellothisisa
test")
;清除系统日志
RegWrite("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa","crashonaudit
fail","REG_DWORD","1")
;=========================================================
StringInStr
作用:检查某个字符串是否含有给定的子串
语法:StringInStr("字符串","子串"[,区分大小写[,出现次序]])
参数:
字符串,目标字符串。
子串,要搜索的子串。
区分大小写,[可选参数]指定匹配操作是否要区分大小写。
0=不区分大小写(默认)
1=区分大小写
2=不区分大小写,使用基本/快速的比较方法
出现次序,[可选参数]指定要提取目标字符串中第几个匹配的子串。若给定的是
负数则表示要从字符串右边开始搜索。默认值为1(搜索第一个匹配的子串)。
返回值:包含则返回1(真),不包含则返回0(假)
范例:
If
StringInStr("nVIDIAGeforce8600GTS","nVIDIA")Then
$SndName="nVIDIA"
EndIf
======================================================================
StringLen
作用:返回指定字符串的字符总数
语法:StringLen("字符串")
范例:
$Length=StringLen("Skyfree")
此时,$Length的值应该为7
======================================================================
StringMid
作用:取某个字符串的部分字符
语法:StringMid("字符串",起始位置[,数量])
范例:
$S=StringMid("Skyfree",4,4)
此时,$S的值应该为“free”
=====================================================================
Sleep
作用:使脚本暂停指定时间段
语法:Sleep(延迟)
范例:
Sleep(3000)
暂停脚本运行3秒,注意,参数里的“延迟”是以毫秒为单位的
=====================================================================
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
==========【顺序结构、选择结构、循环结构入门】=======================
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1>顺序结构
顺序结构是十分简单的结构,就像批处理一样,一条一条的运行所写下的代码,脚本运
行时,就会一条一条的运行代码,例如:
Dim$S,$a,$b
$a=1
$b=2
$S=$a+$b
MsgBox(0,"运算结果",$S)
这是个简单的程序,定义了变量$S,$a,$b,再分别将1和2赋值给$a,$b,然后计算$a
和
$b的和,并将这个和复制给$S,最后使用一个窗口将这个和显示出来。
程序从第一行定义变量到最后一行显示$S的值依次执行下来,这就是顺序结构,也是
一个程序里最基本的结构。
=========================================================================
2>顺序结构
Dim$a
$a=5
If$a>3Then
MsgBox(0,"选择结构示例","大于3")
El
MsgBox(0,"选择结构示例","小于或等于3")
EndIf
运行这个程序,则会出现一个对话框,对话框中显示为“大于3”。
随后我们可以将一个小于3的数例如2复制给$a,如下:
Dim$a
$a=2
If$a>3Then
MsgBox(0,"选择结构示例","大于3")
El
MsgBox(0,"选择结构示例","小于或等于3")
EndIf
再运行这个程序,对话框将显示为“小于或等于3”。
只要理解了If„Then„这个最基本的选择结构语句,就能做一些简单的判断了。其实
If„Then„语句还有很多其他模式,例如If„Then„ElIf„Then„.El„Endif等,不
过只
要理解了If„Then„一切都迎刃而解。
=============================================================================
3>循环结构
循环结构我只介绍最常用的While„Wend循环和For„Next循环,其他的循环结构控
制语句,如果有需要可以参考AU3帮助文档。
While„Wend,语法:
While[条件]
[语句段]
Wend
这个语句中,While后的[条件]只要为真,则会循环执行[语句段],直到[条件]为假才
结
束循环,如果无论怎么循环[条件]都始终为真,则这个循环会成为死循环,这样会造成系
统
资源耗尽而死机或者其他情况。
举个例子,例如我们想计算1+2+3+„..+100的结果,如下:
Dim$i,$Sum
$i=1
$Sum=0
While$i<=100
$Sum=$Sum+$i
$i=$i+1
WEnd
MsgBox(0,"计算1+2+...+100的和",$Sum)
这个例子中,我们首先定义了$i和$Sum这两个变量,随后我们将他们赋以最初值,$i=1、
$Sum=0,然后进入了While循环,在每次循环中$Sum会被赋予当前$Sum的值与$i值的和,
而每次循环结束后$i的值都会被+1,这样,$i会依次表示1、2、3„这些值(注意,这
些$i
的值都<=100,所以循环会继续执行),而$Sum会记录从1+2+3+„的值。在第100次循环结
束时,也就是$i=$i+1运行到第100次时,此时$i的值为101,那么第101此循环运行
前检
测While后的条件$i<=100时,这个条件将不符合,不符合While后面的条件,也就是
While
后面的条件为假时,则退出循环。退出循环后运行MsgBox这一行,这样就将$Sum的值,
也就是1+2+3+„+100的值显示在弹出的对话框中。
下面,我们来看一下For„Next循环
For„Next,语法:
For[变量]=[初值]To[终值][Step[步进值]]
[语句段]
Next
For„Next循环结构经常与数组一起使用,
例如:
Dim$Sky[5],$i,$Sum
$Sky[0]=10
$Sky[1]=20
$Sky[2]=30
$Sky[3]=40
$Sky[4]=50
$Sum=0
For$i=0To4
$Sum=$Sum+$Sky[$i]
Next
MsgBox(0,"For...Next循环结构范例",$Sum)
这个例子中,首先我们定义了$Sky数组,这个数组包含5个元素,然后我们又定义了
$i和$Sum这两个变量,分别用来计数和计算和值。接着我们为$Sky中的5个元素赋了初
始
值,以及为$Sum赋了初始值。进入For循环,循环一共进行了5次,5次中$i分别等于0、
1、2、3、4,在这5次循环中,$Sum依次记录$Sky[0]、$Sky[1]、„$Sky[4]的和值。5次
循
环结束后,使用MsgBox语句将$Sum结果显示在对话框中。
================================================================================
=======
Dim$Skyfree
$Skyfree就是一个变量,Dim是定义变量的意思。
================================================================================
=======
定义一个常量,例如,
Const$Skyfree=1
常量一旦被赋值,在整个程序运行过程中其值将不能被改变。
================================================================================
======
数组
数组这个概念可能稍微难理解一些,我们先来看一个简单的例子:
Dim$Sky[3]
$Sky[0]=17
$Sky[1]=21
$Sky[2]=65
最初,我们以Dim
$Sky[3]定义了一个包含三个元素的数组Sky[3],这三个元素的名字
分别为Sky[0]、Sky[1]、Sky[2],然后我们分别将17、21、65赋值给他们。
到这里,大家也大概看出来什么是数组了,所谓数组,就是以一个名字命名一组变量,
就像Sky这个数组名,这个数组包含从0到(数组元素数量1),
例如Sky[3],那么其中的
元素就是从Sky[0]~Sky[31]。
================================================================================
=====
运算符
数据运算:
=赋值运算,将“=”右边部分的值赋给左边
+加法运算,$S=2+3
减法运算,$S=23
*乘法运算,$S=2*3
/除法运算,$S=2/3
&字符串连接运算,$St=”ABC”&“DEF”&“123”
^冥运算,$S=2^3(2的三次方)
布尔运算:(返回True或者Fal值)
=判断左右两侧的值是否相等,如果左右两侧为字符串,则不区分大小写比较
==判断左右两侧的值是否相等,如果左右两侧为字符串,则区分大小写比较
<>判断左右两侧是否不等于
>判断左侧是否大于右侧
>=判断左侧是否大于等于右侧
<判断左侧是否小于右侧
<=判断左侧是否小于等于右侧
逻辑运算:
AND与运算,只有“AND”两侧的值都为“真”时,才返回“真”,否则返回“假”[++,
+]
OR或运算,当“OR”两侧只要有一侧为“真”时就返回“真”,否则返回“假”[+-,+]
NOT非运算,NOT真为假,NOT假为真[-,+;+,-]
这些运算符是有优先级一说的,就像我们小学所学的“先乘除后加减”一样,这些运算
符的优先级如下,自上而下优先级依次降低,同级自左向右优先级依次降低:
NOT^*/+&<><=>==<>==ANDOR
牢记这些优先级,否则很容易在以后的编程中造成混淆。
================================================================================
=========
AU3中的宏
什么是宏,不要被这个术语吓到了,宏的意思简单的来说,就是一些系统预先命名好的
常量。写程序的过程中可以使用这些宏所代表的数据,但是不可对这些宏进行赋值操作。
常用的宏有如下这些:
@AppDataCommonDir,公共ApplicationData文件夹所在路径
@AppDataDir,当前用户ApplicationData文件夹所在路径
@ComSpec,%comspec%的值,指定的第二个命令解释程序(SPECifiedcondaryCOMmand
interpreter),主要用于命令行使用,如.Run(@ComSpec&"/khelp|more")
@CR,回车符,用于换行
@LF,换行符,用于换行
@CRLF,@CR+@LF,回车换行符,用于换行
@DesktopCommonDir,公共Desktop文件夹路径(桌面)
@DesktopDir,当前用户Desktop文件夹路径(桌面)
@DesktopHeight,桌面高度(像素)(垂直分辨率)
@DesktopWidth,桌面宽度(像素)(水平分辨率)
@DesktopDepth,像素颜色位深度(如32Bit)
@DesktopRefresh,屏幕刷新率.(如75HZ)
@DocumentsCommonDir,公共Documents文件夹路径(我的文档)
@FavoritesCommonDir,公共Favorites文件夹路径
@FavoritesDir,当前用户的Favorites文件夹路径
@HomeDrive,当前用户主目录所在的驱动器号(主要用于确定系统所在分区)
@MyDocumentsDir,我的文档的路径.
@OSServicePack,系统已安装的Servicepack信息,比如"ServicePack3",若是
Windows95则可能返回"B"
@OSVersion,返回操作系统的版本,如:"WIN_2003","WIN_XP","WIN_2000",
"WIN_NT4","WIN_ME","WIN_98","WIN_95"
@ProgramFilesDir,返回ProgramFiles文件夹路径.
@ProgramsCommonDir,「开始」菜单程序目录所在路径(例:C:Documents
andSettingsAllUrs「开始」菜单程序)公共用户
@ProgramsDir,「开始」菜单程序目录所在路径(例:C:Documentsand
SettingsAllUrs「开始」菜单程序)当前用户
@ScriptDir,脚本所在目录.(不包含反斜杠符号"")
@ScriptName,当前运行的脚本的长文件名
@ScriptFullPath,等价于@ScriptDir&""&@ScriptName
@StartMenuCommonDir,公共用户「开始」菜单目录所在路径(例:C:Documentsand
SettingsAllUrs「开始」菜单)
@StartMenuDir,当前用户的「开始」菜单目录所在路径
@StartupCommonDir,公共用户的启动目录所在路径(例:C:DocumentsandSettings
AllUrs「开始」菜单程序启动)
@StartupDir,当前用户的启动目录所在路径
@WindowsDir,Windows文件夹所在路径,(例:C:WINDOWS)
以上的AU3的宏只是所有AU3的宏中比较常用的一部分
AutoIt3的安装与自动化安装软件制作(有AU3Record3.1软件)
本人不会写脚本,也没用过什么,对于脚本也不太懂,这个教程是本人刚刚使用AutoIt3后
的一点点经验,供大家参考,如果有什么不对的地方,欢迎大家指正。
AutoIt究竟是用来干嘛的?可能很多人会问这样的问题,此文将尝试给您一个解答:此程序
(指AutoIt)当初被开发出来的目的是为了让广大用户能拥有一个强大的工具,这个工具应
该能有力地支持用户在Windows下实现各种自动化任务(比如自动安装目标程序、完成各种
自动化操作等),而且它还要能够提供一个GUI(用户界面)以便获得更好的交互效果,而
AutoIt就是一个这样的工具。
一:autoit3下载(全都免费的)
点击下载1:免安装版
点击下载2:免安装版
点击下载3:免安装版
二:autoit3安装
;1:将解压到D:ProgramFilesAutoIt3目录下.
2:将解压到D:ProgramFilesAutoIt3SciTE目录下(替换文件全部选
是).
3:将解压到D:ProgramFilesAutoIt3SciTecvsWrapper。.
三:autoit3简要说明(祥细见AutoIt_说明)
1:D:
-----AutoIt的主程序,脚本文件仅需它即可得以解释运行!
2:D:
-----窗口信息工具(AutoItWindowInfoTool).
3:D:
-----把AutoIt的.au3脚本文件编译成可独立运行的.EXE程序.
4:D:
-----把编译成.EXE程序文件编译成.au3脚本文件.
5:D:ProgramFilesAutoIt3Extrasv2_to_v3_
-----.aut文件转换成.au3文件.
6:D:
-----编辑纯文本的软件.
7:D:
-----AU3Record3.1键盘鼠标记录.
1:设置AutoItv3.0的安装目录路径
我们用的是AutoIt绿色版,AutoIt程序路径要手动设置。
点击菜单Options,在弹出的菜单中再点击ties,打开ties
文件
在打开ties的前面部分,
设置如下:autoit3dir=D:ProgramFilesAutoIt3
2.设置中文支持
打开菜单,Options,OpenUrOptionsFile,加上=936然后保存.
经过上面设置,已经可以用SciTE4AutoIt3程序了.
四:自动化安装软件的简法
在软件存放目录中(例:E:1新系统软件安装2Web迅雷Web迅雷.exe)用记事本新建一个名
为Web迅雷.au3文件.
双击打开Web迅雷.au3文件
按Alt+F6出现AU3Record3.1-(MadeforAutoItv3)
点(Alt+T)勾选RecordWindowText和RecordMou二行,
点击Brow选择E:1新系统软件安装2Web迅雷Web迅雷.exe后.
点击AutoIt3图标(ClickToRecor)开始安装Web迅雷---------安装完成后
点击AutoIt3图标(ClickToStop)结束键盘鼠标记录.
这时SciTE界面己记下键盘鼠标代码生成脚本,点击保存退出SciTE.
打开按(Alt+B)选择E:1新系统软件安装2Web迅雷Web迅雷.au3文件,
按(Alt+r)选择Web迅雷自动安装.exe文件存放地址(例E:1新系统软件安装2Web迅雷Web
迅雷自动安装.exe),
按(Alt+o)选择Web迅雷自动安装.exe文件图标选好后
按(Alt+C)转换成可独立运行的.EXE程序文件,转换成功确认退出.
这时自动化安装Web迅雷的EXE程序文件已制作成功.这样可用来实现大多数程序的自动化
安装
本文发布于:2022-11-27 07:30:26,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/29614.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |