我的儿子3岁,化验肝功多少钱,碱性磷酸酶 2000多。正常是50-136,请问有没有类似情况的,跟我说一下,多谢了!

我儿子15岁今天化验肝功能碱性磷酸酶高医...
我儿子15岁今天化验肝功能碱性磷酸酶高医...
我儿子15岁今天化验肝功能碱性磷酸酶高医生又叫做B超有何关系
当肝硬化患者腹水过多的时候,可适当少量放些腹水,并配合利尿药。利尿药的使用,必须在医生指导下进行。注意观察情况,经常抽血化验,防止尿过多..
医院出诊医生
擅长:肝硬化、肝腹水、丙肝、肝炎
擅长:乙肝、大三阳、小三阳
提问者采纳
因不能面诊,医生的建议及药品推荐仅供参考
职称:医师
专长:血液病 肾病
&&已帮助用户:74973
您好.处在生长发预期的儿童及青少年的碱性磷酸酶会增高,不用担心,是正常现象.给孩子加强营养,多吃奶,蛋类,海产品等含钙锌的食品.
生养宝宝不容易,寻医问药交流群中答疑解惑
如遇商品下架,请咨询对方药师或客服
碱性磷酸酶
职称:医师
专长:血液病 肾病
&&已帮助用户:74973
你好,女性,1-12岁小于500U/L;大于15岁,40-150U/L;
病理性降低:见于重症慢性肾炎,儿童甲状腺机能不全,贫血等.你女儿的情况应该正常,如果不放心的话,就进一步检查.
问我儿子的碱性磷酸酶偏高有问题吗?
职称:医师
专长:消化不良、婴儿腹泻、婴儿湿疹等
&&已帮助用户:128386
指导意见:碱性磷酸酶升高主要见于: 1.肝胆疾病:阻塞性黄疸、原发性肝癌、继发性肝癌、胆汁淤积性肝炎等。 2.由于骨组织中此酶亦很活跃。因此,孕妇、骨折愈合期、骨软化症。佝偻病、骨细胞癌、骨质疏松等血清碱性磷酸酶会升高。 3.白血病、甲状腺机能亢进时,血清碱性磷酸酶亦可升高。
问碱性磷酸酶396u/l
职称:医师
专长:擅长新生儿科疾病的诊治
&&已帮助用户:26358
病情分析:你好,成长期的孩子,化验碱性磷酸酶都会偏高。
意见建议:
问碱性磷酸酶偏高
职称:国家二级心理咨询师
专长:从事多年精神科,健康心理咨询
&&已帮助用户:24578
你好!孩子的症状碱性磷酸酶偏高有一定的关系,建议给孩子做进一步检查及时治疗.
问碱性磷酸酶高
职称:医师
专长:儿科
&&已帮助用户:87661
您好,骨碱性磷酸酶高,多见于骨形成活跃,缺钙常见的,孩子骨骼处于不断发育中, 可补充钙片,注意饮食,含钙的食物多吃。不用担心的。
问肝功能中,碱性磷酸酶为31.7,参与最低值为37,对身体...
职称:医师
专长:急性上呼吸道感染,变应性咳嗽,哮喘,肾及输尿管结石,尿路感染,包皮龟头炎,男性不育症,狐臭,荨麻疹,壮阳
&&已帮助用户:3329
问题分析:您好,碱性磷酸酶主要分布在肝脏、骨骼、肾、小肠及胎盘中,血清中碱性磷酸酶是以游离的形式纯在的。意见建议:一般有肝内外胆管阻塞性疾病,或者是一些肝炎,肝硬化之类的疾病碱性磷酸酶会升高,您现在的如果只有这个项目下降是 没有临床意义的。
关注此问题的人还看了
大家都在搜:
关注健康生活!
治疗乙肝的办法有很多,由于病情感染的严重性不同,发病的原因
小量腹水通常不引起症状,但大量腹水可引起腹部膨隆和不适,出现
定期体检,避免各种诱因,积极预防和治疗可能出现的并发症,...
基本上没有什么区别,乙肝小二阳属于不稳定状态,大部分乙肝小二阳
可导致肝脏慢性炎症坏死和纤维化,部分患者可发展为肝硬化甚至..
由于长期大量饮酒导致的肝脏疾病,戒酒是治疗中最关键的
不同患者因病情及其发病原因不同,需详细检查制定合理方案
治疗应注意因人而异,不同患者病情不同,采用的治疗方案也不同
不可以随意停药,否则易出现停药反弹的现象,加重病情,建议
乙肝是否需要治疗,要看自身的肝功情况以及病毒数量,综合情况分析
百度联盟推广
身高相关标签
免费向百万名医生提问
填写症状 描述信息,如:小孩头不发烧,手脚冰凉,是怎么回事?
无需注册,10分钟内回答
搜狗联盟推广
百度联盟推广
医生在线咨询
评价成功!12岁的男孩碱性磷酸酶159,本地参考值为50-136,有问题吗?_百度知道
12岁的男孩碱性磷酸酶159,本地参考值为50-136,有问题吗?
我有更好的答案
相差16.91%,很正常的,这个数据表明,你的孩子已经进入发育期了,发育期的孩子这个数据是会偏高的,不必担心。如果是成年人,则宜对其它项目做检查了。
为您推荐:
其他类似问题
碱性磷酸酶的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。一个人最大的竞争对手不是别人而是自己,时常审视内心中的自己才能进步!!!...
AU3学习笔记
1. AU3是什么?能做什么?
2. 乱学AU3中的命令(语言相关)?
3. 通过简单示例学习AU3?
4. 正则表达式的学习(对大小写敏感)
5.对于GUI的相关学习
1.& & & & AU3是什么?能做什么?
答:AU3是一个类似BASIC的免费脚本语言;AU3能进行GUI操作、能模拟键盘/鼠标事件、能对窗口及窗口中的标准控件进行互动操作(如窗口移动、控件响应等)、能直接调用外部DLL和WINAPI、支持COM和正则表达式、拥有大量功能函数、支持主流Microsoft OS、可编译成EXE独立运行。
2.& & & & 乱学AU3中的命令(语言相关)?
AU3的数据类型是Variant,可以是数值型、字符型或布尔型等。
窗口句柄(HWnd)是一个指针类型数据;
变量:理解成在内存中的某区域指针,可以根据这个指针对该内存区域进行读和写数据。$是变量的前缀,可以是字母、数字和_下划线的混合。
常量:可由Const关键字定义和Enum关键字枚举。用Enum枚举常量时,默认值为0,之后常量进行加1或指定步长操作,例Enum step +3 $Const1,$Const2,$Const3,则它们对应的值分别是0,3,6,当使用步进进行倍乘运算时,第1个常量必须是1,其余的倍乘于早先的常量,例Enum step *3 $Const1,$Const2,$Const3,则它们对应的值分别是1,3,9.
Enum $const1=1,$const2,$const3
MsgBox(0,&&,$const1 & &:& &$const2 & &:& & $const3) ;1 2 3
Enum Step 2 $incr0,$incr2,$incr4
MsgBox(0,&&,$incr0 & &:& &$incr2 & &:& & $incr4) ;0 2 4
Enum Step *2 $mult1,$mult2,$mult4
MsgBox(0,&&,$mult1 & &:& &$mult2 & &:& & $mult4) ;1 2 4
数组:使用前必须用Dim定义它的维数。一个数组包含的数据类型可以不止一种,但尽量只包含一种,否则严重影响脚本运行速度。数组可以作为参数传递给函数,但必须使用ByRef。
宏:AU3定义的宏是只读的变量,以@为前缀。
% :是 字符串的前缀。
_&&:空格 加上_即 _是“续行”的意思,就是一条语句可以在多行内书写。
注释符号:简短内容用 ; 分号注释,长篇大论用 #comments-start … #comments-end(缩写为#cs … #ce)注释,注意后者自己不能对自己进行注释。
#include :包含文件到脚本,语法 #include “[path\]文件名”&&或#include &文件名&,前一个文件名是用户定义的,后一个是AU3自带的库文件。执行时它们的搜索顺序不同。文件名只能是字符串不能是变量。
#include-once :如果某脚本被另一个脚本多次包含,别忘了在该脚本上使用该该关键字。
#NoTrayIcon&&:执行时不显示托盘图标。
Opt(“TrayIconHide”,1) :执行时显示托盘图标再隐藏;Opt(“TrayIconHide”,0) 显示托盘。
#OnAutoitStartRegister “函数” :注册AU3启动时调用的函数。
#NoAutoit3Execute :指定当前编译的脚本不能运行 /Autoit3ExecuteLine或 /Autoit3ExecuteScript参数运行。
#RequireAdmin :当前运行的脚本需要完整的管理员权限。
AutoitSetOption(“MustDeclareVars”,1) :变量使用前必须先声明。
ContinueLoop :继续While/Do/For循环,
例:For $i = 1 to 10
& & If $i = 7 Then ContinueLoop
& & MsgBox(0, &$i 的当前值为:&, $i)
Next&&;显示除7之外的9个数字
@ComSpec 该宏执行命令解释器的全路径,例:RunWait(@ComSpec&” /c dir c:\”),参数/c是在命令解释器下执行后面的字符串命令“dir c:\”。
Run 运行可单独执行的命令,例:Run(“notepad”),exe、bat、com、pif直接运行的文件由Run执行,诸如.txt、.msi文件不能单独执行,他们都是依靠其他程序执行,如.msi依靠msiexec.exe执行,因此Run(“msiexec example.msi”),也可以ShellExecCute(“example.msi”)。
StringFormat() 将多个变量插入到某个字符串中,例:
Local $var1=1,$var2=2,$var3=3,$var4=4,$var5=5
$msg = StringFormat(&变量1是 %s, 变量2是 %s, 变量3是 %s, V变量4是 %s, 变量5是 %s&, $var1, $var2, $var3, $var4, $var5)
MsgBox(0, &示例&, $msg),注意字符串前必须有 % 。@是宏前缀,$是变量前缀,%是字符串前缀。
Send() 如用 Send发送带特殊符号的变量的内容,如!^+{SPACE},使用send的原文模式发送,例:DIM $Var=”!zgk” Send($Var,1),其flag为 1表示按原文模式发送。
#AutoIt3Wrapper_Icon=自定义一个图标 编译时可使用该语句自定义一个图标。
$CmdLine[] 当AU3接收命令行参数时会初始化一个特殊的数组就是$CmdLine[],$CmdLine[0] 表示接收的命令行参数的个数,$CmdLine[1]表示第1个接收的参数。
$CmdLineRaw&&表示一个完整的未被拆分的语句,例:Autoit3.exe example.au3 参数1 “其他内”,那么$CmdLineRaw会返回:example.au3参数1 “其他内”,编译后,$CmdLineRaw会返回: 参数1 “其他内” ,注意example.au3没有返回。
#requireadmin&&:脚本默认执行权限是标准用户,如需管理员权限使用该语句。
@ScriptName :代表脚本的文件名。
HWND 表示控件句柄,由ControlGetHandle()函数确定。对控件可以进行多种操作,如ControlSend(&无标题 - 记事本&, &&, &[CLASS:E INSTANCE:1]&, &这是测试文本&) ;ControlClick(&我的窗口&, &&, 254);ControlSetText(&我的窗口&, &&, &[NAME:textBoxFolder]&, &C:\Some\Folder&)。
Exit[返回值] :终止程序运行。[返回值]为整数,0表示脚本正常退出,1表示脚本异常终止,如被任务管理器终止。可书写为Exit、Exit0或Exit(1),但Exit()是错误的。
ExitLoop [等级] :退出循环。[等级]默认值为1,表示退出当前循环。
For&&&$变量& in &表达式&&&… Next :列出对象集合中的对象或数组中的元素。表达式可以是对象集合或数组,变量无须定义,自动生成Local变量,如下例中的$Window。
$oShell=ObjCreate(“shell.application”) ;定义对象
$oShellWindows=$oShell.定义对象集合
if IsObj($oShellWindows)&&then
& &&&$string=””
& & for $Window in $oShellWindows
& && &&&$string=$string & $Window.LocationName &&&@crlf
Msgbox(0,””,”你打开了下列窗口: “&@crlf & $string)
& && && &Msgbox(0,””,”你没有打开任何窗口”)
& &&&Func 函数名 … EndFunc :用户自定义函数。通过“返回值”和 @error 来判断函数是否执行成功,以 @error 为优先
3.& & & & 通过简单示例学习AU3?
例1:新建立一文本文件并保存指定内容?
代码如下:
Send(&#r&) ;#&&表示Windows徽标,即发送 Win+R
WinWaitActive(&运行&) ;等待击活‘运行’窗口
Send(&notepad.exe{Enter}&) ;在‘运行’窗口输入notepad.exe并按回车
WinWaitActive(&无标题 - 记事本&)&&;等待击活‘运行无标题 - 记事本’窗口
Send(&这里是通过WIN+R打开运行窗口,再自动输入notepad.exe后,在打开记事本程序自动输入指定内容后保存并退出 {F5}&)
;向打开的记事本输入内容
WinClose(&无标题 - 记事本&)
WinWaitActive(&记事本&)&
Send(&!Y&)
WinWaitActive(&另存为&,&保存在(&I):&)
;ControlClick(&另存为&,&保存在(&I):&,1137)
ControlClick(&另存为&,&保存在(&I):&,&ComboBox1&)
ControlSetText(&另存为&,&保存在(&I):&,&ComboBox1&,&c:\&)
ControlClick(&另存为&,&保存在(&I):&,&ComboBox1&)
;ControlClick(&另存为&,&保存在(&I):&,1137)
ControlSetText(&另存为&,&保存在(&I):&,&Edit1&,&testautonotepad222.txt&)
Send(&!S&)
我想用ControlSetText(&另存为&,&保存在(&I):&,&ComboBox1&,&c:\&)设置存储路径
用ControlSetText(&另存为&,&保存在(&I):&,&Edit1&,&testautonotepad1.txt&)设置要建立的文件
但实际用& &Send(&c:\testautonotepad.txt !S&)就搞定了!
不过ControlSetText(&另存为&,&保存在(&I):&,&ComboBox1&,&c:\&)根本没起作用?
在该语句前后都加上 ControlClick(&另存为&,&保存在(&I):&,&ComboBox1&)就OK!
补充方法:
Local $FileName=&c:\zgk.txt&
Local $FileContents=&My name is zgk!Welcome to&&you!&
Local $Open=FileOpen($FileName,2) ;记住有2
FileWrite($Open,$FileContents)
FileClose($Open)
4.& & & & 正则表达式的学习(对大小写敏感)
语法:StringRegExp( &字符串& , &表达式& [, 标志 ] [, 偏移量 ]] )
就是在“字符串”中找到你希望能看到的“表达式”或者从“字符串”中返回你希望的 “值”。
[…]匹配其中的任何字符
例:MsgBox(0, &SRE 示例 2 结果&, StringRegExp(&text&, 'te[sx]t'))
[^ ... ]不匹配其中的任何字符,如果要匹配^,用(\^)
&{匹配的数量}& 或指定一个范围 &{最小,最大}&.
例;MsgBox(0, &SRE 示例 3 结果&, StringRegExp(&text&, 't{1}e{1}[sx]{1}t{1}'))
()分组,此时的标志 为 1,不仅能返回匹配的结果,还能将“分组”的 字符以数组形式返回
例:$asResult = StringRegExp(&This is a test example&, '(test)', 1)
If @error == 0 Then
& & MsgBox(0, &SRE 示例 4 结果&, $asResult[0])
$asResult = StringRegExp(&This is a test example&, '(te)(st)', 1)
; (te)(st)分2个组,但它们必须是“连续”的字符
;红色的1表示仅返回第一个匹配的结果
If @error == 0 Then
& & MsgBox(0, &SRE 示例 4 结果&, $asResult[0] & &,& & $asResult[1])
& & ;分别返回第1个分组字符$asResult[0]和第2个分组字符$asResult[1]
例:$Str = &You deflect 36 of Gnarly 25Monster's 279 damage 379 damage&
$sR = StringRegExp($Str, '([0-9]{1,3})(?: damage)', 3)
;红色的3表示返回所有匹配的结果
;$sR = StringRegExp($Str, '(\d+)\h+damage', 3)
If Not @Error Then MsgBox(0, 'SRE 示例 6 结果', $sR[0] & ',' & $sR[1])
5.对于GUI的相关学习
对于GUI操作必须使用库文件&&#include &GUIConstantsEx.au3&
GUI响应事件有2种模式:消息循环(MessageLoop)和事件模式(OnEvent),默认是MessageLoop,可通过Opt(“GuiOnEventMode”,1)更改为OnEventMode。
MessageLoop模式 :当以GUI操作为第一要务时,建议用该模式,该模式下是通过GUIGetMsg()函数不断返回消息事件来响应,该函数返回的事件类型是“无事件、控件事件(如用GUICtrlCreateButton创建的控件响应的事件)、系统事件(如$GUI_EVENT_CLOSE、$GUI_EVENT_MINIMIZE等)。
GUIGetMsg()函数还可以在多窗口中操作,因为无论多少窗口它的ID是唯一的,此时可以使用GUIGetMsg(1),这里的1不仅代表被截获的各个事件(它们都存储于$array[0]中),还包括各个窗口的ID(他们都存储于$array[1]中)。
MessageLoop基本语法框架:
& & $nMsg=GUIGetMsg()
& & …具体代码
例:创建2个窗口,用GUIGetMsg(1)来操作
#include &GUIConstantsEx.au3&
;创建第1个窗口
$FirstWindow=GUICreate(&第1个窗口&,200,200,-1,-1)
GUICtrlCreateLabel(&第一个窗口的LABEL: &,10,10,150,20)
$Button1=GUICtrlCreateButton(&确定&,10,30,50,20)
;创建第2个窗口
$SecondWindow=GUICreate(&第2个窗口&,200,200,-1,-1)
GUISwitch($FirstWindow) ;切换哪个窗口使用 GUI函数,本例将$FirstWindow设置为当前窗口进行各种操作GUISetState(@SW_SHOW) ;可以用GUISetState(@SW_SHOW,$FirstWindow)代替GUISwitch($FirstWindow)
Local $nMsgs=GUIGetMsg(1)
& & Select
& && &Case $nMsgs[0]=$Button1
& && && &&&MsgBox(0,&选择的是第1个窗口的按钮&,&你按了“确定”按钮&)
& && &Case $nMsgs[0]=$gui_event_close And $nMsgs[1]=$FirstWindow
& && && &&&MsgBox(0,&第1窗口操作&,&你选择了关闭窗口操作,正在关闭&)
& && && &&&ExitLoop
& && &EndSelect
OnEvent模式:只有在事件被触发时才调用相关函数执行,执行后在返回主程序。返回的事件包括控件事件和系统事件,这2类事件发生时均调用用户自定义的函数,系统事件调用的函数是GUISetOnEvent(),控件事件调用的是GUICtrlSetOnEvent()。
OnEvent模式基本语法框架:
& &&&Sleep(1000)
Func Ownfunc()
Func Ownfunc()
#include &GUIConstantsEx.au3&
;Opt(&GUIONEVENTMODE&,1)
Opt(&GUIOnEventMode&, 1)&&; 切换为 OnEvent 模式&
$FirstWindow=GUICreate(&普通事件模式窗口调试&,200,200,-1,-1)
GUISetOnEvent($GUI_EVENT_CLOSE,&CloseWindow&)
GUICtrlCreateLabel(&你好,OnEvent Mode: &,10,10)
$Button=GUICtrlCreateButton(&OK!&,20,30)
GUICtrlSetOnEvent($Button,&ClickOk&)
$DummyWindow=GUICreate(&虚拟窗口,不会被显示&,200,200,-1,-1)
GUISetOnEvent($GUI_EVENT_CLOSE,&CloseWindow&)
GUISetState(@SW_SHOW,$FirstWindow)
&&Sleep(1000)&&; 不做任何事
Func ClickOk()
& & & & MsgBox(0,&OK!按钮&,&你点击了OK!按钮&)
Func CloseWindow()
&&;注意: 此时 @GUI_CTRLID 的值将等于 $GUI_EVENT_CLOSE,&
&&;而 @GUI_WINHANDLE 则等于 $FirstWindow&
&&If @GUI_WinHandle=$FirstWindow Then
& & & && &MsgBox(0, &窗口事件&, &您选择了关闭!正在退出...&)
& && &Exit
AU3学习笔记
newuser&发表于
[b]回复 [url=http://www.autoitx.com/redirect.php?goto=findpost&pid=196303&ptid=17702]1#[/url] [i]newuser[/i] [/b]
Zougk&&重新学习基础知识
一.基础部分
1.variables(变量)、constants(常量)、arrays(数组)、字符串变量与变量转换
2.#include和fileinstall()
3.消息循环模式和事件模式
4.函数(跳过)
5.条件与循环语句
6.程序运行为功能(CrossDoor)
7.函数的参数传递
8.函数的嵌套与递归
9.正则表达式(必须要理解啊!!!)
10.注册表操作
11.文件读写(包括对二进制文件内容的替换)
二.进阶部分
1.GUI操作示例讲解
2.AU3中的DLL应用
一.基础部分
& & & & Variables
在AU3中,变量使用前是否必须声明,没有严格限制,但如果强制变量声明,使用Opt(&MustDeclareVars&,1)。建议在用DEBUG代码时,必须显示声明所有变量,以方便调试程序,其实我根本就不会DEBUG,呵呵!
变量前缀必须是$,名称部分可由数字、字母和下划线 _ 组成,如$My_variable。
定义变量的关键字分别是Dim、Local、Global,注意它们所定义的变量范围。
例:Global定义的变量与函数内Dim定义的变量重名时,Glbal定义的变量将被复写
Global $FILE=@SCRIPTDIR & &\win7book.exe&
FUNCTION()
FUNC FUNCTION()
DIM $FILE=@ScriptDir & &\Exe2AutV3.exe&
RUN($FILE) ; 最终脚本执行的是Dim定义的变量
如果改成:
Global $FILE=@SCRIPTDIR & &\win7book.exe&
DIM $FILE=@ScriptDir & &\Exe2AutV3.exe&
RUN($FILE) ; 最终脚本执行的还是Dim定义的变量
将Global更改成Local,结果依旧。
加强理解:Global定义的变量是全局变量,在整个程序内都有效,如果在函数内有同名的变量且值被修改,那么Global定义的变量自然会发生变化。如果是局部变量,只是在自己负责的范围内有影响,而不管外部是否有与其通明的变量。
AU3中,数组是存储一组相同类型或不同类型的数。通过下标来访问数组中的元素。
例:$Day可以是0-6中任意1个
Dim $Week[7]=[&星期一&,&星期二&,&星期三&,&星期四&,&星期五&,&星期六&,&星期日&] ;定义一个一维的7个元素的数组来存储一周的每一天
Dim $Day=2;这个变量表示我们要查看哪个数组元素
If&&$Day & 6 Then $Day = 6
If&&$Day & 0 Then $Day = 0&&;以上2个if语句来判断$Day变量的大小是否超出数组
MsgBox(0,&今天是?&,$Week[$Day])
Dim $Week[4][3]=[[&周一&,&周二&,&周三&],[&语文&,&数学&,&数学&],[&英语&,&语文&,&体育&],[&历史&,&音乐&,&班会&]]&&;定义一个二维数组
$Rows=UBound($Week,1) ;UBound ( 数组 [, 维度] ) 维度默认值为 1,表示第一维.此例表示 行数
$Cols=UBound($Week,2) ;此例表示 列数
$Dims=UBound($Week,0) ;若此参数为0,则返回数组的下标数(维数).
MsgBox(0,&当前&&$Dims&&维数组有&,$Rows&& 行, &&$Cols&& 列&)
例:二维数组的输出不完善?
Dim $sMsg3
Dim $Week[4][3]=[[&周一&,&周二&,&周三&],[&语文&,&数学&,&数学&],[&英语&,&语文&,&体育&],[&历史&,&音乐&,&班会&]]
ReDim $Week[5][3] ;上面是1天3节课,现在多加了1行,既每天增加了1节课
For $i=0 To 2
& & & & $Week[4][$i]=&美术& ;因为行数是从0开始,新加的第5行下标自然就是[4],这里表示加的课都是美术
For $x=0 To 2
& & & & For $y=0 To 4
& & & & & & & & MsgBox(0,&&,$Week[$y][$x]&@CRLF)
& & & & Next
例:修正上例-感谢3mile
Dim $Week[4][3]=[[&周一&,&周二&,&周三&],[&语文&,&数学&,&数学&],[&英语&,&语文&,&体育&],[&历史&,&音乐&,&班会&]]
ReDim $Week[5][3] ;上面是1天3节课,现在多加了1行,既每天增加了1节课
Local $str
For $i=0 To 2
& && &&&$Week[4][$i]=&美术& ;因为行数是从0开始,新加的第5行下标自然就是[4],这里表示加的课都是美术
For $i=0 To 4
& && &&&For $n=0 To 2
& && && && && & $str&=$week[$i][$n]&@TAB
& && &&&Next
& && &&&$str&=@CRLF
MsgBox(0,0,$str)
例:同样是修正上例(行列互换就好多了)---感谢Kxing
Dim $Week[3][4]=[ _
[&周一&,&语文&,&数学&,&数学&], _
[&周二&,&英语&,&语文&,&体育&], _
[&周三&,&历史&,&音乐&,&班会&]]
For $i=0 To 2
MsgBox(0,$Week[$i][0],$Week[$i][1]&& - &&$Week[$i][2]&& - &&$Week[$i][3])
字符串部分(向CroosDoor学习):
Dim $Var1=&'zougk&
Dim $Var2='&zougk'
MsgBox(0,&&,&first value is: &&$Var1&@CRLF&&second value is: &&$Var2)
Dim $Var3=$Var1&$Var2
MsgBox(0,&&,$Var3)
StringLen(字符串)&&:该函数获取的是“字符串的字符数而不是字节数”。
StringReplace(字符串,”被替换的字符”, ”用于替换的字符”,替换次数)
Dim $var=&love me for ever love&
MsgBox(0,&&,StringReplace($var,&love&,&I love&,1)) ;仅第一个love被替换成I love
StringSplit() :拆分字符串
Dim $Var=&中国人 韩国人 日本人,都是亚洲人&
$Split_Var=StringSplit($Var,& &)
MsgBox(0,&&,&被拆分的字符串的数量是: &&$Split_Var[0]&&;&&&它们依次是: &&$Split_Var[1]&& : &&$Split_Var[2]&& : && _
$Split_Var[3])
;stringsplit()函数拆分成功后,将产生1个数组,第1个元素存储被拆分的字符串的数量,第2个元素是第一个被拆分的字符串,依次类推
$Split_Var1=StringSplit($Var,&;&)
MsgBox(0,&&,&被拆分的字符串的数量是: &&$Split_Var1[0]&&;&&&它们依次是: &&$Split_Var1[1])
;stringsplit()函数拆分失败后,也将产生1个数组,第1个元素是1,第2个元素存储的是整个字符串
例:获取指定文件的相关属性(加强理解)
$Attrib=FileGetAttrib(&F:\temp\卷C1.txt&) ;获取脚本目录的文件夹属性
;MsgBox(0,&文件的属性分别有: &,$Attrib)
If @error Then
& & & & MsgBox(4096,&错误&,&无法获得属性&)
$Input=StringSplit(&R,A,S,H,N,D,O,C,T&,&,&)
$Output=StringSplit(&只读/,存档/,系统/,隐藏/,普通/,目录/,脱机/,压缩/,临时/&,&,&)
;以上2个变量只是为了在“替换字符串时将文件(夹)的英文属性标识转换成中文”
For $i=1 To 9
& & & & $Attrib=StringReplace($Attrib,$Input[$i],$Output[$i],0,1) ;stringreplace()中的1表示替换字符时区分大小写
$Attrib=StringTrimRight($Attrib,1) ;移除末尾的反斜杠
MsgBox(0,&完整的文件属性: &,$Attrib)
变量转换(由字符串转换成其它类型变量)
转换为指针:
何谓指针:变量用来存储数据,数据被存放在内存中,为有效通过变量来访问内存中的数据,对变量进行编号,那么编号就是变量在内存中的地址,即这个编号就是指针。
何谓指针变量:就是存储变量地址的变量。
转换函数:Ptr(字符串)
转换为句柄:
通常指的是窗口句柄的转换。窗口句柄是一个整数,AU3中用一个十六进制数来表示它。
转换函数:HWND(字符串)。
例:句柄不能是字符串
窗口、控件、程序都有句柄
$hWnd=WinGetHandle(&[class:Shell_TrayWnd]&) ;获取任务栏句并
WinSetState($hWnd,&&,@SW_HIDE) ;使用任务栏句炳隐藏任务栏
Sleep(1000) ;隐藏1秒
WinSetState($hWnd,&&,@SW_SHOW)
MsgBox(0,&&,&把句炳转换成字符串后再进行以上操作&)
$sWnd=String($hWnd)
WinSetState($sWnd,&&,@SW_HIDE)
Sleep(1000)
WinSetState($sWnd,&&,@SW_SHOW)
MsgBox(0,&&,&上面实验失败,说明句并不能是字符串,我们再把字符串转换成句柄试一下!&)
$sWnd=HWnd($sWnd)
WinSetState($sWnd,&&,@SW_HIDE)
Sleep(1000)
WinSetState($sWnd,&&,@SW_SHOW)&&;成功显示
转换为整数:
转换函数:Int(字符串)。
非数字字符串转换成整数时都是0。
转换为二进制数据:
二进制数据就是字符串编码。
转换函数:StringToBinary()和BinaryToString()。
& & & & Constants
常量就是值不能被更改的变量,也不能把已经存在的变量更改成常量。
常量通过Const定义,也可在Const前加Dim 、Local、 Global,例Const $Num=1 或
Dim Const $Num=1。
另外,常量也可以通过Enum关键字枚举,如不指定枚举的默认值通常是0,但如果用倍乘的话,默认值必须是1。
Enum $const1=1,$const2,$const3
MsgBox(0,&&,$const1 & &:& &$const2 & &:& & $const3) ;自加1,结果是1&&2&&3
Enum Step 2 $incr0,$incr2,$incr4
MsgBox(0,&&,$incr0 & &:& &$incr2 & &:& & $incr4) ;自加指定步长,结果是0&&2&&4
Enum Step *2 $mult1,$mult2,$mult4
MsgBox(0,&&,$mult1 & &:& &$mult2 & &:& & $mult4) ;1 2 4
& & & & Arrays
数组就是数的矩阵,矩阵里的元素应该是同类型和大小的,但在变体矩阵中,类型可以多种多样,但使用了变体数组尤其是在数组中套用了变体数组,那么在脚本执行过程中将是非常消耗资源和运行缓慢,依次不推荐使用变体数组。反正我是用不上它!
数组可以作为参数传递给函数,但必须使用ByRef。
& & & & #inclued 和 fileinstall()
它们很类似,都是将指定的文件在脚本编译的时候包含到被编译的脚本中。但使用fileinstall()预装需要包含的文件在编译后会导致脚本的体积过大。
#include可以将预先写好的函数或现有常量包含到脚本中,例#include &array.au3&或 #include &buttonconstants.au3&。
fileinstall的语法:fileinstall(“sourcefilepath”,”destinationpath”[,flag]) ,其中flag可是0或1,0表示如果目的路径下有相同文件不覆盖,反之覆盖。
& & & & 消息循环模式
对于GUI操作必须使用库文件&&#include &GUIConstantsEx.au3&
GUI响应事件有2种模式:消息循环(MessageLoop)和事件模式(OnEvent),默认是MessageLoop,可通过Opt(“GuiOnEventMode”,1)更改为OnEventMode。
MessageLoop模式 :当以GUI操作为第一要务时或GUI作为主焦点(main focus),建议用该模式,该模式下是通过GUIGetMsg()函数不断返回消息事件来响应,该函数返回的事件类型是“无事件、控件事件(如用GUICtrlCreateButton创建的控件响应的事件)、系统事件(如$GUI_EVENT_CLOSE、$GUI_EVENT_MINIMIZE等)。
GUIGetMsg()函数还可以在多窗口中操作,因为无论多少窗口它的ID是唯一的,此时可以使用GUIGetMsg(1),这里的1不仅代表被截获的各个事件(它们都存储于$array[0]中),还包括各个窗口的ID(他们都存储于$array[1]中)。
MessageLoop基本语法框架:
& & $nMsg=GUIGetMsg()
& & …具体代码
例:创建2个窗口,用GUIGetMsg(1)来操作
#include &GUIConstantsEx.au3&
;创建第1个窗口
$FirstWindow=GUICreate(&第1个窗口&,200,200,-1,-1)
GUICtrlCreateLabel(&第一个窗口的LABEL: &,10,10,150,20)
$Button1=GUICtrlCreateButton(&确定&,10,30,50,20)
;创建第2个窗口
$SecondWindow=GUICreate(&第2个窗口&,200,200,-1,-1)
GUISwitch($FirstWindow) ;切换哪个窗口使用 GUI函数,本例将$FirstWindow设置为当前窗口进行各种操作GUISetState(@SW_SHOW) ;可以用GUISetState(@SW_SHOW,$FirstWindow)代替GUISwitch($FirstWindow)
Local $nMsgs=GUIGetMsg(1)
& & Select
& && &Case $nMsgs[0]=$Button1
& && && &&&MsgBox(0,&选择的是第1个窗口的按钮&,&你按了“确定”按钮&)
& && &Case $nMsgs[0]=$gui_event_close And $nMsgs[1]=$FirstWindow
& && && &&&MsgBox(0,&第1窗口操作&,&你选择了关闭窗口操作,正在关闭&)
& && && &&&ExitLoop
& && &EndSelect
& & & & OnEvent模式:只有在事件被触发时才调用相关函数执行,执行后在返回主程序。返回的事件包括控件事件和系统事件,这2类事件发生时均调用用户自定义的函数,系统事件调用的函数是GUISetOnEvent(),控件事件调用的是GUICtrlSetOnEvent()。
OnEvent模式基本语法框架:
& &&&Sleep(1000)
Func Ownfunc()
Func Ownfunc()
#include &GUIConstantsEx.au3&
;Opt(&GUIONEVENTMODE&,1)
Opt(&GUIOnEventMode&, 1)&&; 切换为 OnEvent 模式&
$FirstWindow=GUICreate(&普通事件模式窗口调试&,200,200,-1,-1)
GUISetOnEvent($GUI_EVENT_CLOSE,&CloseWindow&)
GUICtrlCreateLabel(&你好,OnEvent Mode: &,10,10)
$Button=GUICtrlCreateButton(&OK!&,20,30)
GUICtrlSetOnEvent($Button,&ClickOk&) ;为指定控件的点击行为定义函数ClickOk
$DummyWindow=GUICreate(&虚拟窗口,不会被显示&,200,200,-1,-1)
GUISetOnEvent($GUI_EVENT_CLOSE,&CloseWindow&)
GUISetState(@SW_SHOW,$FirstWindow)
&&Sleep(1000)&&; 不做任何事
Func ClickOk()
& & & & MsgBox(0,&OK!按钮&,&你点击了OK!按钮&)
Func CloseWindow()
&&;注意: 此时 @GUI_CTRLID 的值将等于 $GUI_EVENT_CLOSE,&
&&;而 @GUI_WINHANDLE 则等于 $FirstWindow&
&&If @GUI_WinHandle=$FirstWindow Then
& & & && &MsgBox(0, &窗口事件&, &您选择了关闭!正在退出...&)
& && &Exit
4.函数(先跳过)
5.条件与循环语句
& & 它们都可以多层嵌套。
& & 利用条件和循环语句可以简化代码并完成复杂的任务。
& & & & 条件语句
if…then…else
Global&&$Num=2
& & & & If @OSVersion=&WIN_XP& Then
& & & & & & & & If @UserName=&Administrator& Then
& & & & & & & & & & & & If $Num=2 Then&
& & & & & & & & & & & & & & & & MsgBox(0,&$Num值的判断消息&,&$Num的值是:& & $Num)
& & & & & & & & & & & & Else
& & & & & & & & & & & & & & & & MsgBox(0,&$Num值的判断消息&,&$Num的值不是2&)
& & & & & & & & & & & & & & & & Exit
& & & & & & & & & & & & EndIf
& & & & & & & & Else
& & & & & & & & & & & & MsgBox(0,&&,&不是以Administrator用户身份登陆&)
& & & & & & & & EndIf
& & & & Else
& & & & & & & & MsgBox(0,&&,&该系统不是WIN_XP系统&)
& & & & EndIf
If @OSVersion=&WIN_VISTA& Then
& & & & & & & & MsgBox(0,&&,&你的系统是WIN_VISTA&)
& & & && &&&ElseIf @OSVersion=&WIN_2003& Then
& & & & & & & && &&&MsgBox(0,&&,&你的系统是WIN_2003&)
& & & & & & & & ElseIf @OSVersion=&WIN_XP& Then
& & & && && && &MsgBox(0,&&,&你的系统是WIN_XP&)
& & & & & & & & ElseIf @OSVersion=&WIN_2000& Then
& & & & & & & & & & & & MsgBox(0,&&,&你的系统是WIN_2000&)
& & & & Else
& & & & EndIf
select…case语句
该选择语句同时能进行多个条件的判断。
& & & && &&&Case& & & & @OSVersion=&WIN_VISTA&&
& & & & & & & & MsgBox(0,&&,&你的系统是WIN_VISTA&)
& & & && &&&Case @OSVersion=&WIN_2003&&
& & & & & & & && &&&MsgBox(0,&&,&你的系统是WIN_2003&)
& & & & & & & & Case @OSVersion=&WIN_XP&&
& & & && && && &MsgBox(0,&&,&你的系统是WIN_XP&)
& & & & & & & & Case @OSVersion=&WIN_2000&&
& & & & & & & & & & & & MsgBox(0,&&,&你的系统是WIN_2000&)
& & & & Case Else
& & & & EndSelect
switch…case选择语句
该选择语句1次只能进行一个条件的判断。
Switch @OSVersion
& & & & & & & & Case &WIN_VISTA&&
& & & & & & & & & & & & MsgBox(0,&&,&你的系统是WIN_VISTA&)
& & & & & & & & Case &WIN_2003&&
& & & & & & & & & & & & MsgBox(0,&&,&你的系统是WIN_2003&)
& & & & & & & & Case @OSVersion=&WIN_XP&&
& & & & & & & & & & & & MsgBox(0,&&,&你的系统是WIN_XP&)
& & & & & & & & Case @OSVersion=&WIN_2000&&
& & & & & & & & & & & & MsgBox(0,&&,&你的系统是WIN_2000&)
& & & & & & & & Case Else
& & & & EndSwitch
循环语句(5种)
A.For…Next
语法结构:for &variable&=startvalue to &stop&&&[step]
& && && && && &statement
& && && &&&next
For $x=10 To 1 Step -1&&;步长默认值为1
& & & & & & & & SplashTextOn(&标题&,$x,100,50) ;splashtexton()用于创建一个自定义的文本闪平窗口
& & & & & & & & Sleep(1000)&&;延迟1秒
& & & & Next
& & & && &&&;SplashOff() ;当然是关闭闪屏窗口
& & & & & & & & MsgBox(0,&闪屏10秒后...&,&大家好,我是邹国奎,很高兴通过AU3让我们在这里结识!希望我们能成为朋友&)
B.For &variable& In &expression&
& && &statements
该循环常用于“数据的阵列-an array of date”或“COM对象”,如果表达市不是以上两种类型,脚本结束并有错误提示,如果COM对象是一个没有任何元素的空对象集合,脚本会跳出循环执行下面语句。
了解COM Object,首先要了解COM的Object名称及它的properties(属性)和methods(方法)。
Global $Array[5]
& & & & $Array[0]=&我&
& & & & $Array[1]=&叫&
& & & & $Array[2]=&邹&
& & & & $Array[3]=&国&
& & & & $Array[4]=&奎&
& & & & For $Element In $Array
& & & & & & & & For $x=3 To 1 Step -1
& & & & & & & & & & & & SplashTextOn(&&,$x,100,50)
& & & & & & & & & & & & Sleep(1000)
& & & & & & & & Next
& & & & & & & & SplashOff()
& & & & & & & & MsgBox(0,&$Array every element is: &,$Element)
& & & & & & & & WinActivate(&$Array every element is: &)
& & & & & & & & ;ControlClick(&$Array every element is: &,$Element,&Button1&)
& & & & & & & & SendKeepActive(&$Array every element is: &)
& & & & & & & & Send(&{Enter}&)
& & & & Next
&&statements
&&… Until &expression&
该循环语句至少先执行1次循环体内的代码,再判断条件是否满足来决定是否继续执行循环体代码。
Dim $Variable=10
& & & & Do
& & & & & & & & SplashTextOn(&标题&,$Variable,100,50) ;splashtexton()用于创建一个自定义的文本闪平窗口
& & & & & & & & $Variable -=1
& & & & & & & & Sleep(1000)&&;延迟1秒
& & & & Until $Variable=0
& & & & SplashOff()
& & & & MsgBox(0,&闪屏10秒后...&,&大家好,我是邹国奎,很高兴通过AU3让我们在这里结识!希望我们能成为朋友&)
D.While &expression&
&&statements
该循环语句先判断条件再决定是否执行循环体内的代码,可以一次循环体代码都不执行。
Dim $Variable=10
& & & & While $Variable&0
& & & & & & & & SplashTextOn(&标题&,$Variable,100,50) ;splashtexton()用于创建一个自定义的文本闪平窗口
& & & & & & & & $Variable -=1
& & & & & & & & Sleep(1000)&&;延迟1秒
& & & & WEnd
& & & & SplashOff()
& & & & MsgBox(0,&闪屏10秒后...&,&大家好,我是邹国奎,很高兴通过AU3让我们在这里结识!希望我们能成为朋友&)
F.With &expression&
&&注意expression表达式必须是Object类型
&&该语句常被用来简化脚本代码
& & & & 下列代码没有使用With...EndWith语句
& & & & #ce
& & & & $Object=ObjCreate(&InternetExplorer.Application.1&)
& & & & $Object.visible=1
& & & & $Object.height=768
& & & & $Object.width=1024
& & & & $Object.navigate(&http://www.baidu.com&)
用With…EndWith简化后
$Object=ObjCreate(&InternetExplorer.Application.1&)
& & & & With $Object
& & & & & & & & .visible=1
& & & && &&&.height=768
& & & && &&&.width=1024
& & & & & & & & .navigate(&http://www.baidu.com&)
& & & & EndWith
6.程序运行为功能(CrossDoor)
即程序运行于其它帐户下。不是很理解,是以某个用户身份编写的AU3程序在其他用户身份不管是本地还是远程计算机上都可以执行的意思吗?
7.函数的参数传递
函数的参数传递有“值传递”和“址传递”2种。值就是数值传递,如下列形式:
Function(2,4)
fucn Function($X,$Y) … EndFunc
Function(2,4,$x)
func Function($x,$y,ByRef $x) … EndFunc
还是来个例子:
MsgBox(0,&&,&zhouchang is: & & fucntion(2,4,$x))
Func fucntion($y,$z,ByRef&&$x)
& & & & $x=($y+$z)*2
& & & & Return $x
8.函数的嵌套与递归
嵌套就是在某个函数中调用其它的函数;递归就是函数自己调用函数,借用CroosDoor 的例子:
MsgBox(0,&递归阶乘&,_Dg(5))
Func _Dg($n)
& & & & If $n=1 Then
& & & & & & & & Return 1
& & & & Else
& & & & & & & & Return $n * _Dg($n-1)
& & & & EndIf
第一步:$n=5 返回 5* _Dg(4)
第2步:$n=4 返回4* _Dg(3)
第3步:$n=3 返回 3* _Dg(4)
第4步:$n=2 返回4* _Dg(1)
第5步:$n=1 返回1
结果就是:5*4*3*2*1
9.正则表达式(必须要理解啊!!!)
正则表达式的目的:判断字符串是否符合某个语法规则和截获符合规则的字符串及对符合规则的字符串进行替换。
常用函数:StrintgRgeExp()和StringRegExpReplace()。
10.注册表操作
注意注册表中“键名”“值项”的理解
例:读取指定键名下具体值项的值
$var=RegRead(&HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion&,&ProgramFilesDir&)
;绿色部分是键名,兰色部分是值项
MsgBox(4096,&Program files are in:&, $var)
例:学习RegEnumVal()---枚举指定键名Run下的所有值项
For $i=1 To 100
& & & & Dim $var=RegEnumVal(&HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&,$i)
& & & & ;RegEnumVal(&键名&,序数) 序数默认值为1
& & & & If @error && 0 Then ExitL玫举指定“键名下的值项失败就退出循环”
& & & & MsgBox(0,&第&&$i&&个&&&开机启动项是&,$var)
例:学习RegEnumKey---枚举指定键名下的所有子键
For $i=1 To 100
& & & & $var=RegEnumKey(&HKEY_LOCAL_MACHINE\SOFTWARE&,$i)
& & & & $var1=RegEnumKey(&HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services&,$i)
& & & & If @error&&&& 0 Then ExitLoop
& & & & MsgBox(4096,&计算机上已经安装第&&$i&&个程序是:&,$var)
& & & & MsgBox(4096,&计算机上已经安装第&&$i&&个服务是:&,$var1)
写、读、删注册表
例:普通文件的读写常规操作
RegWrite(&HKEY_CURRENT_USER\Software\Testzgk&,&testzgk1&,&REG_MULTI_SZ&,&My name is zgk!&&@LF&&Welcome to you!&)
MsgBox(0,&新建新键名Testzgk,它包含的值项是testzgk1,类型是REG_SZ&,RegRead(&HKEY_CURRENT_USER\Software\Testzgk&,&testzgk1&))
RegDelete(&HKEY_CURRENT_USER\Software\Testzgk&)
11.文件读写(包括对二进制文件内容的替换)
当对少量文件进行读写操作时,可以使用文件名,当对大量文件进行读写操作时,用文件句柄,文件句柄通过fileopen()函数获得,别忘了完成对文件的操作后用fileclose()关闭他,否则会严重影响脚本执行效率。
filewrite()和filewriteline()对不存在的文件操作时可以新建该文件,但如果文件路径错误的话,就不会建立新的文件。
例:FileWriteLine(@DesktopDir&&\testzgk.txt&,&第一行&) ;按行写入并自动换行
FileWrite(@DesktopDir&&\testzgk.txt&,&test&) ;按行写入
FileWrite(@DesktopDir&&\testzgk.txt&,&test1&) ;接着按行写入
$var1=FileRead(@DesktopDir&&\testzgk.txt&,4) ;读取testzgk.txt的前4个字节内容,默认读取整个文本内容
$var3=FileRead(@DesktopDir&&\testzgk.txt&)
$var2=FileReadLine(@DesktopDir&&\testzgk.txt&,2)
MsgBox(0,&前4个字节:&,&&&$var1&@LF&&第2行:&&$var2&@LF&&整个文本内容是:&&@LF&$var3)
注意fileopen(文件名,模式)的选择,有只读模式和写入到文件末尾模式及删除原文见内容再写模式等。
例:没有写和读模式并存的可能性吗?
$file=FileOpen(@DesktopDir&&\testzgk.txt&,2+8)&
;注意第2个参数,2表示先清除原文件内容在进行写操作,8表示打开的文件不存在将强行建立
;0是只读模式,1是接着原文件内容进行写操作&
;检查打开的文件是否 可读
If $file = -1 Then
& & & & MsgBox(0,&错误&,&不能打开文件&)
& & & & Exit
FileWriteLine($file,&行&) ;写入一个字符串并以换行符结尾,也就是按行写
FileWrite($file,&t&)
MsgBox(0,&全部数据&,FileRead($file)) ;句并是写模式,所以读取数据会失败
FileClose($file)
例:对某文件的IP地址进行二进制的替换(文本内容仅1行:10.600.58.32)
#include &WinAPI.au3&
#include &WindowsConstants.au3&
#include &GuiConstantsEx.au3&
Global $sFile, $hFile, $sText, $nBytes, $tBuffer
$sFile = @DesktopDir & '\test.txt' ;要读取文件的路径
$sText = Binary(FileRead($sFile)) ;读文件内容并将内容转换成二进制
$tBuffer = DllStructCreate(&byte[& & StringLen($sText) & &]&) ;创建1个C/C++样式数据结构供dllcall()使用
;语法:DllStructCreate ( &数据结构& [,指针] )
$Search=StringTrimLeft(Binary(&58.32&),2) ;将文本中准备替换的内容转换成二进制并从字符串左开始删除指定数量的字符
$Replace=StringTrimLeft(Binary(&85.23&),2)
$re=BinaryToString(StringReplace($sText,$Search,$Replace)) ;实现替换过程并将替换后的内容转换成字符
;MsgBox(0,0,$re)
DllStructSetData($tBuffer, 1, $re) ;设置数据结构中部分元素的数据。语法:DllStructSetData ( 数据结构, 元素, 值 [, 索引 ] )
$hFile = _WinAPI_CreateFile($sFile, 2) ;为其它设备创建或者打开一个文件.
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($re), $nBytes) ;写入数据到文件指定位置
_WinAPI_CloseHandle($hFile) ;关闭打开文件的句柄
至于.ini文件的读写,记住Iniread() iniwrite() inidelete()
IniReadSection(&INI文件名&,&字段&) ;从某标准配置文件(*.ini)中读取某个节中的所有关键字或值.
IniReadSectionNames( &文件名& ) ;从某标准配置文件(*.ini)中读取所有字段的信息.
newuser&发表于
[b]回复 [url=http://www.autoitx.com/redirect.php?goto=findpost&pid=196304&ptid=17702]2#[/url] [i]newuser[/i] [/b]
二.进阶部分
1.GUI操作示例讲解
例:读取控件输入框内容并显示
#include &guiconstants.au3&
Opt(&GUIOnEventMode&,1)
GUICreate(&我的第一个窗口&)
GUISetOnEvent($GUI_EVENT_CLOSE,&_Exit&)
$Input=GUICtrlCreateInput(&,300,20)
$Btn=GUICtrlCreateButton(&读取输入框&,40,75,90,20)
GUICtrlSetOnEvent($Btn,&_ReadInput&)
GUISetState(@SW_SHOW)
& & & & Sleep(1000)
Func&&_Exit()
& & & & Exit
Func _ReadInput()
& & & & $Message=GUICtrlRead($Input)
& & & & MsgBox(0,&&,&读取的输入框的信息是:&&$Message)
例:读取输入框内容并随机显示窗口背景颜色
#include &guiconstants.au3&
;Global Const $GUI_EVENT_CLOSE=-3 ;窗口关闭消息的值
Opt(&GUIOnEventMode&,1) ;从默认的消息模式更改为事件模式
GUICreate(&创建我的第一个窗口&)
GUISetOnEvent($GUI_EVENT_CLOSE,&main&)&&;点击窗口的关闭后函数main进行处理
$Input=GUICtrlCreateInput(&,300,20)
$Btn=GUICtrlCreateButton(&读取输入框&,40,75,90,20)
GUICtrlSetOnEvent($Btn,&main&) ;点击按钮后函数main负责响应处理
GUISetState(@SW_SHOW)
& & & & GUISetBkColor(RandomColor())
& & & & Sleep(3000)
Func main()
& & & & Switch @GUI_CtrlI根据宏@GUI_CtrlId来判断消息
& & & & & & & & Case $GUI_EVENT_CLOSE&&
& & & & & & & & & & & & Exit
& & & & & & & & Case $Btn
& & & & & & & & & & & & $D=GUICtrlRead($Input)
& & & & & & & & & & & & MsgBox(0,&输入框的数据是&,$D)
& & & & EndSwitch
Func&&RandomColor()
& & & & Return &0x&&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2)
EndF产生一个随机的RGB颜色值
; Hex(表达式[,长度])
; Random([最小值[,最大值[,标志]]]) 标志为1表示返回整数,默认返回浮点数
例:读取输入框内容并随机显示窗口背景颜色
本例重点理解:对已知Windows消息代码的拦截
同时注意学习GUIRegisterMsg()和WinSetTrans()函数的学习
注释:对自己编写的脚本代码中的窗口可以容易的进行窗口消息的拦截,但对于外部程序的窗口进行消息拦截就必须注入到对方的进程中去
;#include &guiconstants.au3&
Global Const $GUI_EVENT_CLOSE=-3 ;窗口关闭消息的值
Global Const $WM_ENTERSIZEMOVE=0X0231 ;窗口移动消息的值
Global Const $WM_EXITSIZEMOVE=0X0232 ;窗口结束移动消息的值
Opt(&GUIOnEventMode&,1) ;从默认的消息模式更改为事件模式
$Gui=GUICreate(&创建我的第一个窗口&)
GUISetOnEvent($GUI_EVENT_CLOSE,&main&)&&;点击窗口的关闭后函数main进行处理
$Input=GUICtrlCreateInput(&,300,20)
$Btn=GUICtrlCreateButton(&读取输入框&,40,75,90,20)
GUICtrlSetOnEvent($Btn,&main&) ;点击按钮后函数main负责响应处理
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_ENTERSIZEMOVE,&WM_ENTERSIZEMOVE&) ;当有窗口移动消息产生时,用自定义的函数WM_ENTERSIZEMOVE来响应处理
;GUIRegisterMsg(msgID,自定义函数) 该函数是为“已知的Windows消息代码注册一个用户自定义函数”,我理解是“用户自定义一个函数
;来响应窗口GUI所产生的已知的Windows消息代码,比如窗口移动、关闭或对控件各种点击动作等
GUIRegisterMsg($WM_EXITSIZEMOVE,&WM_EXITSIZEMOVE&) ;当有结束窗口移动消息产生时,用自定义的函数WM_EXITSIZEMOVE来响应处理
& & & & GUISetBkColor(RandomColor())
& & & & Sleep(3000)
Func main()
& & & & Switch @GUI_CtrlI根据宏@GUI_CtrlId来判断消息
& & & & & & & & Case $GUI_EVENT_CLOSE&&
& & & & & & & & & & & & Exit
& & & & & & & & Case $Btn
& & & & & & & & & & & & $D=GUICtrlRead($Input)
& & & & & & & & & & & & MsgBox(0,&输入框的数据是&,$D)
& & & & EndSwitch
Func&&RandomColor()
& & & & Return &0x&&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2)
EndF产生一个随机的RGB颜色值
; Hex(表达式[,长度])
; Random([最小值[,最大值[,标志]]]) 标志为1表示返回整数,默认返回浮点数
Func WM_ENTERSIZEMOVE($hWndGUI,$MsgID,$WParam,$LParam)
& & & & WinSetTrans($Gui,&&,130) ;设置指定窗口的透明度 WinSetTrans(&窗口标题&,&窗口文本&,透明度)
EndF窗口移动时,设置窗口透明值为130
Func WM_EXITSIZEMOVE($hWndGUI,$MsgID,$WParam,$LParam)
& & & & WinSetTrans($Gui,&&,255)
EndF窗口结束移动时,设置窗口透明值为255,也就是不透明
例:父窗口与子窗口的学习
此处要加强(控件)标识和(控件)句柄的理解
;#include &guiconstants.au3&
Global Const $GUI_EVENT_CLOSE=-3 ;窗口关闭消息的值
Dim $Child_G定义一个变量存储子窗口的句柄
Opt(&GUIOnEventMode&,1) ;从默认的消息模式更改为事件模式
$Gui=GUICreate(&创建我的第一个窗口&) ;该窗口是 === 父窗口
GUISetOnEvent($GUI_EVENT_CLOSE,&main&)&&;点击窗口的关闭后函数main进行处理
$Input=GUICtrlCreateInput(&,300,20)
$Btn=GUICtrlCreateButton(&读取输入框&,40,75,90,20)
GUICtrlSetOnEvent($Btn,&main&) ;点击按钮后函数main负责响应处理
$Show_Child_Btn=GUICtrlCreateButton(&显示子窗口&,40,100,90,20) ;点击该按钮显示 --- 子窗口
GUICtrlSetOnEvent($Show_Child_Btn,&main&)
GUISetState(@SW_SHOW)
& & & & GUISetBkColor(RandomColor()) ;GUISetBkColor ( 背景色 [, 窗口句柄] )
& & & & Sleep(3000)
Func main()
& & & & Switch @GUI_CtrlI根据宏@GUI_CtrlId标识来判断消息
& & & & & & & & Case $GUI_EVENT_CLOSE&&
& & & & & & & & & & & & Switch @GUI_WinH根据宏@GUI_WinHandle来判断产生关闭消息的窗口信息
& & & & & & & & & & & & & & & & Case $G如果当前窗口句柄是$Gui,退出脚本
& & & & & & & & & & & & & & & & & & & & Exit
& & & & & & & & & & & & & & & & Case $Child_G如果当前窗口句柄是子窗口$Child_Gui,删除子窗口
& & & & & & & & & & & & & & & & & & & & GUIDelete($Child_Gui)
& & & & & & & & & & & & EndSwitch
& & & & & & & & Case $Btn
& & & & & & & & & & & & $D=GUICtrlRead($Input)
& & & & & & & & & & & & MsgBox(0,&输入框的数据是&,$D)
& & & & & & & & Case $Show_Child_Btn
& & & & & & & & & & & & Child_Gui()
& & & & EndSwitch
Func Child_Gui()
& & & & $Child_Gui=GUICreate(&&,200,40,-1,-1,-1,-1,$Gui) ;GUICreate()里的最后一个参数$Gui表示新建立的窗口是该变量所存储的窗口句柄的子窗口
& & & & GUISetOnEvent($GUI_EVENT_CLOSE,&main&)
& & & & GUISetState(@SW_SHOW)
Func&&RandomColor()
& & & & Return &0x&&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2)
EndF产生一个随机的RGB颜色值
; Hex(表达式[,长度])
; Random([最小值[,最大值[,标志]]]) 标志为1表示返回整数,默认返回浮点数
Func WM_ENTERSIZEMOVE($hWndGUI,$MsgID,$WParam,$LParam)
& & & & WinSetTrans($Gui,&&,130) ;设置指定窗口的透明度 WinSetTrans(&窗口标题&,&窗口文本&,透明度)
EndF窗口移动时,设置窗口透明值为130
Func WM_EXITSIZEMOVE($hWndGUI,$MsgID,$WParam,$LParam)
& & & & WinSetTrans($Gui,&&,255)
EndF窗口结束移动时,设置窗口透明值为255,也就是不透明
例:父窗口与子窗口的学习(注意:子窗口无法移出到父窗口以外)
Run(&notepad.exe&)
WinWaitActive(&无标题 - 记事本&)
$Gui=GUICreate(&创建的窗口被嵌入到记事本&,240,120)
GUISetState()
DllCall(&user32.dll&,&int&,&SetParent&,&hwnd&,$Gui,&hwnd&,WinGetHandle(&无标题 - 记事本&))
Until GUIGetMsg()=-3 Or Not WinExists(&无标题 - 记事本&) ;当窗口消息等于退出消息或记事本窗口不存在时,就退出DO循环
#include &guiconstants.au3& ;包含了所有与GUI有关系的常量,比如$Gui_Event_Close
#NoTrayI隐藏脚本运行时在任务栏tray显示的图标icon
Global $SS_CENTER
Opt('GuiOnEventMode',1) ;从循环消息模式更改到事件模式
GUICreate(&Ai Smart Homes - Saint Louis,Missouri&,400,300) ;创建主窗口
GUISetIcon(&sysleak.ico&) ;创建窗口图标,就是在窗口标题前显示的哪个图标
GUISetOnEvent($GUI_EVENT_CLOSE,'GUIExit') ;点击窗口右上角的叉时,调用函数GuiExit()
GUICtrlCreatePic(&.jpg&,120,5,156,160)&&;在GUI上创建图片控件
GUICtrlCreateLabel(&Please Choose an Option Below:&,98,180,300,15) ;在GUI上创建静态标记控件,$SS_CENTER表示该控件的样式
GUICtrlSetColor(-1,0Xff0000)&&;设置控件颜色,-1表示为当前控件
GUICtrlCreateButton(&Visit Our Website&,100,210,200,30) ;在GUI上创建按钮控件
GUICtrlSetOnEvent(-1,'website') ;为指定的控件点击行为定义用户函数
GUICtrlCreateButton(&Send an Email&,100,250,200,30)
GUICtrlSetOnEvent(-1,'email')
GUISetState(@SW_SHOW) ;显示当前窗口
Func website()
& & & & GUISetState(@SW_HIDE) ;隐藏当前窗口
& & & & Run(&c:\program files\internet explorer\iexplore.exe 10.64.240.131&)
Func email()
& & & & GUISetState(@SW_HIDE)
& & & & Run(&mailto:.cn&)
& & & & Exit
& & & & Sleep(500)
Func&&GUIExit()
& & & & Exit
例2:所有控件应用
#include &guiconstants.au3&
Global $ACS_AUTOPLAY
GUICreate(&GUI Control Examples&,500,420)
GUISetIcon(@WindowsDir & &\explorer.exe&,0)
$FileMenu=GUICtrlCreateMenu(&File&)
GUICtrlCreateMenuItem(&Example File&&Menu Item&,$FileMenu)
$ContextMenu=GUICtrlCreateContextMenu()
GUICtrlCreateMenuItem(&Example1&,$ContextMenu)
GUICtrlCreateMenuItem(&&,$ContextMenu)
GUICtrlCreateMenuItem(&Example2&,$ContextMenu)
GUICtrlCreateTab(0,0,500,400)
GUICtrlCreateTabItem(&AVI,Button,Checkbox,ComboBox&)
GUICtrlCreateAvi(@WindowsDir & &\CLOCK.avi&,-1,10,30,321,321,$ACS_AUTOPLAY)
GUICtrlCreateLabel(&AVI Example&,140,355,60,15)
GUICtrlCreateButton(&Button Example&,350,30,120,30)
GUICtrlCreateCheckbox(&Checkbox Example&,350,70,120,30)
GUICtrlCreateCombo(&ComboBox Example&,350,110,120,30)
GUICtrlCreateTabItem(&Group,Date,Dummy,Edit,Icon,Input,List,ListView&)
GUICtrlCreateGroup(&Group Example&,20,40,460,60)
GUICtrlCreateDate(&&,30,60,200,25)
$DummyButton=GUICtrlCreateButton(&Dummy Example&,270,60,200,25)
$Dummy=GUICtrlCreateDummy()
GUICtrlCreateGroup(&&,-99,-99,1,1)
GUICtrlCreateEdit(&Edit Example&,30,120,440,60)
GUICtrlCreateIcon(@WindowsDir & &\cursors\drum,ani&,-1,30,200,32,32)
GUICtrlCreateLabel(&Icon&&Example&,70,210,80,20)
GUICtrlCreateInput(&Input Example&,160,205,300,20)
GUICtrlCreateList(&List Example&,30,240,440,80)
$ListView=GUICtrlCreateListView(&List View Example&,30,330,440,60)
GUICtrlCreateListViewItem(&List View Item Example&,$ListView)
GUICtrlCreateTabItem(&ActiveX&&Object&)
GUICtrlCreateLabel(&ActiveX Object Example&,10,30,140,20)
$IE=ObjCreate(&Shell.Explorer.2&)
$GUIActiveX=GUICtrlCreateObj($IE,10,50,480,340)
$IE.navigate(&http://www.aismarthomes.com&)
GUICtrlCreateTabItem(&Picture,Progress,Radio,Slider,TreeView,Updown&)
GUICtrlCreatePic(@WindowsDir & &\blue lace 16.bmp&,10,30,40,40)
GUICtrlCreateLabel(&Picture Example&,55,45,80,20)
GUICtrlCreateLabel(&Process Example&,400,70,90,20)
$Progress=GUICtrlCreateProgress(10,90,480,25)
GUICtrlSetData($Progress,33)
GUICtrlCreateRadio(&Radio Example&,10,140,90,20)
GUICtrlCreateLabel(&Slider Example&,290,170,100,20)
GUICtrlCreateSlider(180,130,280,30)
GUICtrlCreateLabel(&Tree View Example&,10,200,120,20)
$TreeView=GUICtrlCreateTreeView(10,220,480,60)
$TreeTopLevel=GUICtrlCreateTreeViewItem(&Tree View&&Example&,$TreeView)
GUICtrlCreateTreeViewItem(&Subitem1&,$TreeTopLevel)
GUICtrlCreateTreeViewItem(&Subitem2&,$TreeTopLevel)
GUICtrlCreateLabel(&Example&&Updown&,10,300,100,20)
$UpDownInput=GUICtrlCreateInput(&0&,10,320,480,60)
GUICtrlCreateUpdown($UpDownInput)
GUICtrlCreateTabItem(&&)
GUISetState(@SW_SHOW)
& & & & $GuiMsg=GUIGetMsg()
& & & & Select
& & & & & & & & Case $GuiMsg=$DummyButton
& & & & & & & & & & & & GUICtrlSendToDummy($Dummy)
& & & & & & & & Case $GuiMsg=$Dummy
& & & & & & & & & & & & MsgBox(0,&Dummy Example&,&You have clicked the dummy button.&)
& & & & & & & & Case $GuiMsg=$GUI_EVENT_CLOSE
& & & & & & & & & & & & Exit
& & & & EndSelect
例3:读取控件内容并运行指定程序
#include &guiconstants.au3&
GUICreate(&Combo&&Example&,200,80)
GUISetIcon(@WindowsDir & &\explorer.exe&,0) ;设置窗口标题的图标
$ComboBox=GUICtrlCreateCombo(&Notepad&,10,10,120,20)
GUICtrlSetData(-1,&Paint|Commad Prompt&)
$Button=GUICtrlCreateButton(&Go&,10,40,60,20)
GUISetState(@SW_SHOW)
& & & & $GuiMsg=GUIGetMsg()
& & & & Select
& & & & & & & & Case $GuiMsg=$Button
& & & & & & & & & & & & MsgBox(0,&&,&You Choose is: & & GUICtrlRead($ComboBox) & &.&)
& & & & & & & & & & & && & Select
& & & & & & & & & & & & & & & & Case GUICtrlRead($ComboBox)=&Notepad&
& & & & & & & & & & & & & & & & & & & & Run(&notepad.exe&)
& & & & & & & & & & & & & & & & & & & & Exit
& & & & & & & & & & & & & & & & Case GUICtrlRead($ComboBox)=&Paint&
& & & & & & & & & & & & & & & & & & & & Run(&mspaint.exe&)
& & & & & & & & & & & & & & & & & & & & Exit
& & & & & & & & & & & & & & & & Case GUICtrlRead($ComboBox)=&Command Prompt&
& & & & & & & & & & & & & & & & & & & & Run(&cmd.exe&)
& & & & & & & & & & & & & & & & & & & & Exit
& & & & & & & & & & & & EndSelect
& & & & & & & & Case $GuiMsg=$GUI_EVENT_CLOSE
& & & & & & & & & & & & Exit
& & & & EndSelect
Wend2. AU3中的DLL应用
语法: DllCall(&dll&,&return type&,&function&[,&type1&,param1[,&typen&,param n[])
dll :就是函数function()所对应或存在于的那个Dll file,例1中我要用DllCall()代替Sleep(),而sleep()存在于 kerner32.dll中。
Retrun type :返回类型,sleep()没有返回值,所以应该是”none”
function :函数,例1就是sleep。
type : 参数类型,MSDN规定是DWORD,在AU3中简化为dword。
例1:使用DLLCALL()代替sleep()延迟1秒
MsgBox(0,&&,&i&,2) ;2秒后显示的i消失
;Sleep(1000)
DllCall(&kernel32.dll&,&none&,&Sleep&,&dword&,1000) ;延迟1秒
MsgBox(0,&&,&love&,2)
DllCall(&kernel32.dll&,&none&,&Sleep&,&dword&,1000)
MsgBox(0,&&,&you&,2)
DllCall(&kernel32.dll&,&none&,&Sleep&,&dword&,1000)
例2:使用DllCall()实现MessageBoxW()函数功能
DllCall(&user32.dll&,&int&,&MessageBoxW&,&hwnd&,0,&wstr&,&Hello&&from Dll tutoorial!&,&wstr&,&info&,&uint&,0)
;MessageBox()函数存在于user32.dll中
;返回类型为int
;因为显示的字符串信息,常用的字符编码方式是ANSI(美国的工业化标准)和Unicod(统一字符标准)
;所以需要在其function名称后加A或W,常用Unicode,所以MessageBox写成MessageBoxW
;hwnd是窗口句柄类型,因为没有窗口,所以是0
;第1个wstr表示消息窗口所显示的信息,如果将wstr改写成str就显示乱码了,这可能就是字符编码的问题了!
;第2个wstr表示消息窗口的标题
;uint表示消息窗口的显示风格
按ASCII码显示(wstr可改成str了):
DllCall(&user32.dll&,&int&,&MessageBoxA&,&hwnd&,0,&str&,&Hello&&from Dll tutoorial!&,&str&,&info&,&uint&,0)
例3:使用Dllcall()实现GetDiskFreeSpace()函数功能
问题:这里参数的类型为什么是 dword* 而不是 dword?如果拿掉 * 显示结果为&&0 显然是错的!
;Variable to pass as referecne 变量作为参考来传递
Local $SectorsPerC每个簇的扇区数
Local $BytesPerS每个扇区的字节数
Local $NumberOfFreeC自由簇的数量&
Local $TotalNumberOfC总的簇数
$calldata=DllCall(&Kernel32.dll&,&int&,&GetDiskFreeSpaceW&,&wstr&,&D:\&,&dword*&,$SectorsPerCluster,&dword*&,$BytesPerSector,&dword*&,$NumberOfFreeClusters,&dword*&,$TotalNumberOfClusters)
;获取D盘相关以上信息
;The data is returned as an&&array,even&&the changed values&&of the variables
$SectorsPerCluster=$calldata[2]
$BytesPerSector=$calldata[3]
$NumberOfFreeClusters=$calldata[4]
$TotalNumberOfClusters=$calldata[5]
MsgBox(0,&&,&Total number of clusters:& & $TotalNumberOfClusters)
在windows的 所有DLLS中和有关AU3的DLLS的调用协议或惯例calling conventions(我还不懂它):
;With stdcall 所有windows dlls使用the stdcall calling conventions
DllCall(“SomeDll”,”int”,”Func”)
另一种是:
;With cdecl
DllCall(“SomeDll.dll”,”int:cdecl”,”Func”)
例4:用DllCall()实现GetSystemTime()
问题:获得的时间是上午时间?
解:&DllStructGetData($SYSTEMTIME,&wHour&)+8,注意多了 +8& &(感谢C.L)
ushort :无符号的16位整数
Word: 无符号的16位整数
int: 32位整数
Ptr: 常规指针(void *)
$SYSTEMTIME=DllStructCreate(&ushort wYushort wMushort wDayOfWushort wDushort wHushort wMushort wSushort wMilliseconds&)
DllCall(&Kernel32.dll&,&none&,&GetSystemTime&,&ptr&,DllStructGetPtr($SYSTEMTIME))
MsgBox(0,&现在的时间是:&,DllStructGetData($SYSTEMTIME,&wYear&)&&:&&DllStructGetData($SYSTEMTIME,&wMonth&) _
&&:&&DllStructGetData($SYSTEMTIME,&wDay&)&& &&DllStructGetData($SYSTEMTIME,&wHour&)&&:&&DllStructGetData($SYSTEMTIME,&wMinute&))该例应用了DllStructCreate()来创建Dll的结构,所谓DllStruct可以理解为“数据的压缩包,包里所有变量在内存中互相挨着”,
补充一例子:显示系统图标与索引
; *******************************************************
; 示例 3 - 显示系统更改图标窗口
; *******************************************************
$sFileName&&= @SystemDir & '\shell32.dll'
; 创建一个数据结构储存图标索引
$stIcon& &&&=&&DllStructCreate(&int&)
$stString& && & = DLLStructCreate(&wchar[260]&)
$structsize = DllStructGetSize($stString)/2
DllStructSetData($stString, 1, $sFileName)
; 运行更改图标窗口 - '62' 是这个函数的顺序值
DllCall(&shell32.dll&, &none&, 62, &hwnd&, 0, &ptr&, DllStructGetPtr($stString), &int&, $structsize, &ptr&, DllStructGetPtr($stIcon))
$sFileName&&= DllStructGetData($stString, 1)
$nIconIndex = DllStructGetData($stIcon, 1)
; 显示文件名和图标索引
Msgbox(0, &信息&, &最后选择的文件: & & $sFileName & @LF & &图标索引: & & $nIconIndex
AutoIt基础实践练习笔记一&
1.列出本机驱动器个数并分别显示出来?
代码如下:
$drivetotal=DriveGetDrive(&all&)
If Not @error Then
& & & & MsgBox(0,&所有驱动器类型&, &总共有& & $drivetotal[0] & &个驱动器&)
& & & && &For $x=1 To $drivetotal[0]&
& & & & & & & && &MsgBox(0,&第& & $x & &个驱动器是:&,$drivetotal[$x])
& & & && &Next
注意:应进行if错误判断
2.创建一个新文件,并逐行写入内容?
代码如下:
$accordlinewrite=FileOpen(&c:\zgktest.txt&,1)
If @error Then&
& & & & MsgBox(0,&error&,&文件未打开或创建新文件失败&)
& & & & FileWrite($accordlinewrite,&往第1行写的内容&)
& & & & FileWrite($accordlinewrite,&继续往第1行写内容& & @CRLF)
& & & & FileWrite($accordlinewrite,&往第2行写入的内容&)
FileClose($accordlinewrite)
注意:fileopen()并不是通常的“打开文件”,而是AutoIt3后台打开并进行操作
3.逐行读去文件内容?
代码如下:
HotKeySet(&{F2}&,&_Copy&)
;定义F2为热键,按下F2后,执行函数“ _Copy&&&
Global $LineNum=1
Global $IniFile=FileOpenDialog(&选择要读取的文本文件&,&&,&(*)&)
If @Error Then Exit
;&选择要读取的文本文件&是&打开文件窗口的标题&
;& &是你指定&打开文件的路径&,空默认为&系统根目录下&
;(*)是&打开的文件类型&
Sleep(500)
;不清楚,等待什么呢?我把它拿掉也没影响什么?不过我也是刚学AU3不到1个月,还没摸到门呢?
Func _Copy()
$GetLine=FileReadLine($IniFile,$LineNum)
If @Error=-1 Then
$LineNum=1
ClipPut($GetLine)
Send(&^{V}&)
$LineNum+=1
;if @Error=-1 如果到文件末尾,在返回文件首行
;ClipPut($GetLine) 将读取到的内容放到剪贴板上,在 Send(&^{V}&) 进行粘贴,再 $LineNum+=1 进入下一行
4.播放AVI文件?
#include &GUIConstants.au3&
$x=ObjCreate(&WMPlayer.OCX&)
$Form1 = GUICreate(&AForm1&, 500,400, 193, 200)
$Button1 = GUICtrlCreateButton(&开始&, 104, 344, 97, 33, 0)
$Button2 = GUICtrlCreateButton(&停止&, 272, 336, 121, 41, 0)
$sky=GUICtrlCreateObj($x, 100,50,500,500)
GUISetState(@SW_SHOW)
$x.uimode=&none&
$x.url=&F:\家庭录象\yiyan\liuyi107.avi&
$x.Controls.play
;MsgBox(0,&&,$sky)
$nMsg = GUIGetMsg()
Switch $nMsg
& &Case $GUI_EVENT_CLOSE
5.自动建立文本文件并保存?
代码如下:
Send(&#r&)
;#表示Windows徽标,即发送Win+R
WinWaitActive(&运行&)
Send(&notepad.exe{Enter}&)
;发送notepad.exe到运行窗口并回车
WinWaitActive(&无标题 - 记事本&)
Send(&这里是通过WIN+R打开运行窗口,再自动输入notepad.exe后,在打开记事本程序自动输入指定内容后保存并退出 {F5}&)
;Send(&现在的时间/日期是 {F5}&)&
WinClose(&无标题 - 记事本&)
WinWaitActive(&记事本&)
Send(&!Y&)
WinWaitActive(&另存为&)
Send(&testautosave.txt!S&)
;将新建立的文本文件命名为testautosave.txt并存储
遗留问题(已解决-感谢C.L):无法存储到指定路径?
Send(&#r&)
WinWaitActive(&运行&,&打开(&O)&)
ControlSetText(&运行&,&打开(&O)&,&Edit1&,&notepad.exe&)
ControlClick(&运行&,&打开(&O)&,&Button2&)
WinWaitActive(&无标题 - 记事本&)
Send(&用于测试对于ComboBox的操作,其中还包括测试controlcommand下的setcurrentselection&&selectstring&)
WinClose(&无标题 - 记事本&)
;Send(&!F&)
;Send(&!X&)
WinWaitActive(&记事本&,&文件 无标题 的文字已经改变。&)
ControlClick(&记事本&,&文件 无标题 的文字已经改变。&,&Button1&)
WinWaitActive(&另存为&,&保存在&)
;ControlCommand(&另存为&,&保存在&,&ComboBox1&,&SelectString&,&本地磁盘 (C:)&)
;ControlCommand(&另存为&,&保存在&,&ComboBox1&,&SetCurrentSelection&,5)
ControlSetText(&另存为&,&保存在&,&Edit1&,&testComboBox.txt&)
;其实改成ControlSetText(&另存为&,&保存在&,&Edit1&,&c:\testComboBox.txt&)就OK了
ControlClick(&另存为&,&保存在&,&Button2&)
1. ControlCommand(&另存为&,&保存在&,&ComboBox1&,&SelectString&,&本地磁盘 (C:)&)
为什么不好使?(已解决-感谢afan)
是& 本地磁盘 (C:)&前的图标没有捕获造成的吗?可能是“该图标造成字符串不匹配最终造成ControlCommand()失效!
在该语句前/后分别加上:ControlClick(&另存为&,&保存在&,&ComboBox1&)就确保ControlCommand()成功
我的理解:因为她特殊,controlclick()先让它获得焦点,在利用controlcommand()下的selectstring命令选中希望的存储路径,再controlclick()返回到到ComboBox上,这样理解容易些!
2. ControlCommand(&另存为&,&保存在&,&ComboBox1&,&SetCurrentSelection&,5)
为什么不好使?
它不涉及图标的问题啊!
方法补充一(条条大路同罗马):
$newfilename=&c:\zgknew.txt&
$newfilecontents=&C盘下新建立一个文件zgknew.txt,写入内容后自动保存&
$temp=FileOpen($newfilename,2)
FileWrite($temp,$newfilecontents)
FileClose($temp)
6.求某正数的立方?
代码如下:
$x=InputBox(&inputbox&,&请输入一个正整数:&,&&,&&,50,50,&&,&&,10)
& & & & Case @error=0&&
& & & & & & & & MsgBox(0,&inputbox&&成功&,$x & &的3次方是:&&&& $y)
& & & & Case @error=1&
& & & & & & & & MsgBox(0,&canel&,&你按了取消按钮&)
& & & & & & & & ExitLoop
& & & & Case @error=2&
& & & & & & & & MsgBox(0,&delay&,&时间超时&)
& & & & & & & & ExitLoop
&&EndSelect
注意:当使用inputbox()输入时,一定要验证“当按下Cancel按钮时的动作”
7.对输入的学生分数进行评价?
代码如下:
Dim $score
$score=InputBox(&分数输入&,&请输入每名学生的分数:&)
;$score=InputBox(&分数输入&,&请输入每名学生的分数:&,&&,&&,100,50,150,250,50)
;&default&是InputBox内默认的值
;If @error=1 Then MsgBox(0,&取消&,&你按了取消按钮&)
If @error=1 Or $score=&& Then
& & & & MsgBox(0,&发生错误&,&你按了取消按钮或输入值为空&)
& & & & Exit
If @error=2&&Then MsgBox(0,&超时了&,&在规定时间内你没有输入学生分数&)
& & & & Case $score&90 And $score&=100
& & & & & & & & MsgBox(0,&优秀类&,&该名学生成绩优秀&)
& & & & Case $score&80 And $score&=90
& & & & & & & & MsgBox(0,&良好类&,&该名学生成绩良好&)
& & & & Case $score&=60&&And $score&=80
& & & & & & & & MsgBox(0,&优秀&,&该名学生成绩及格&)
& & & & Case $score&=0 And $score&60
& & & & & & & & MsgBox(0,&优秀&,&该名学生成绩很差&)
& & & & Case Else
& & & & & & & & MsgBox(0,&输入错误&,&输入了不正确的分数&)
我的错误:把If @error=1 Or $score=&& 中的红色部分写成了@error=””,这样无论输入什么样的分数都先执行 MsgBox(0,&发生错误&,&你按了取消按钮或输入值为空&) 再进行case判断。
;目的:随意输入4位以内的整数,判断它是多少位,每一位数分别是什么,并把它们反向排列成一个新数
;技巧:把十位 百位 千位 都当 个位 来处理
Dim $Unit=0,$Ten=0,$Hundred=0,$Thousand=0
Dim $Digit=1
Dim $Num,$NewNum
$Num=InputBox(&输入框&,&请输入4为数以内的整数&)
If @error=1 Or $Num=&& Then
& & & & MsgBox(0,&发生错误&,&按了Cancel按钮或输入值为空&)
& & & & Exit
& & & & Case $Num&=0 And $Num&10
& & & & & & & & $Digit=1
& & & & & & & & $Unit=Mod($Num,10)
& & & & & & & & $NewNum=$Unit
& & & & Case $Num&=10 And $Num&100
& & & & & & & & $Digit=2
& & & & & & & & $Unit=Mod($Num,10)
& & & & & & & & $Ten=Mod(($Num-$Unit)/10,10)
& & & & & & & & $NewNum=$Ten+$Unit*10
& & & & Case $Num&=100 And $Num&1000
& & & & & & & & $Digit=3
& & & & & & & & $Unit=Mod($Num,10)
& & & & & & & & $Ten=Mod(($Num-$Unit)/10,10)
& & & & & & & & $Hundred=Mod(($Num-$Ten*10-$Unit)/100,10)
& & & & & & & & $NewNum=$Hundred+$Ten*10+$Unit*100
& & & & Case $Num&=1000 And $Num&=9999
& & & & & & & & $Digit=4
& & & & & & & & $Unit=Mod($Num,10)
& & & & & & & & $Ten=Mod(($Num-$Unit)/10,10)
& & & & & & & & $Hundred=Mod(($Num-$Ten*10-$Unit)/100,10)
& & & & & & & & $Thousand=Mod(($Num-$Hundred*100-$Ten*10-$Unit)/1000,10)
& & & & & & & & $NewNum=$Thousand+$Hundred*10+$Ten*100+$Unit*1000
& & & & EndSelect
& & & & MsgBox(0,&digit&,&这是一个&&$Digit&&位数&&@CRLF _
& & & & &&个位:&&$Unit&@CRLF&&十位:&&$Ten&@CRLF&&百位:&&$Hundred&@CRLF&&_
& & & & &&千位:&&$Thousand&@CRLF&&重组的新数:&&$NewNum)
9.突然想用AutoIt3自动MSTSC?
代码如下:
Run(&mstsc&)
WinWaitActive(&远程桌面连接&,&连接(&N)&)
ControlSetText(&远程桌面连接&,&连接(&N)&,&Edit1&,&要登陆的IP&)
ControlClick(&远程桌面连接&,&连接(&N)&,&Button1&)
WinWaitActive(&要登陆的IP - 远程桌面&)
;注意上面的窗口标题我改了
Send(&password{Enter}&)
补充(感谢cnhfg):
send((&+{tab}&))
send(&administrator&)
send(&{tab}&)
send(&123&)
send(&{enter}&)
10.输出一个3行5列矩阵?
代码如下:
;分别定义了对 行 和 列&&操作的2个变量
;定义了用于输出目的的变量
For $i=1 To 3
& & & & For $j=1 To 5
& & & & & & & & $s=$s&& & & ($i*10+$j)
& & & & Next
& & $s=$s & @CRLF
MsgBox(0,&从第1到第3逐行输出:&,$s)
;错误:$s=$s&& & & ($i*10+$j)
;首先输出的数字是连着的,原因是将 & &写成了&&
;其次是将($i*10+$j)写成了&$i*10+$j
11.要求只能用20张10元、20元、50元的人民币组成总额为600元,问总共有多少组法?
代码如下:
Dim $Ten,$Twenty,$Fifty
;分别定义 10& &20& & 50 人民币的张数 变量
Dim $Sum=&&
;定义了成功组合的结果 变量&
For $ten=0 To 20
& & & & For $Twenty=0 To 20
& & & & & & & & For&&$Fifty=0 To 12
& & & & & & & & & & & & If&&$Ten+$Twenty+$Fifty=20 And $Ten*10+$Twenty*20+$Fifty*50=600 Then
& & & & & & & & & & & & & & & & $Sum=$Sum&&10元人民币是:&&$Ten&&张 &&&20元人民币的是:&&$Twenty&&张 &&&50元人民币是:&&$Fifty&&张 &&@CRLF
& & & & & & & & & & & & EndIf
& & & & & & & & Next
& & & & Next
;因为限定了只能用20张人民币
;而可能使用的10元人民币张数在0-60之间;可能使用的20元人民币张数在0-30之间;可能使用的50元人民币张数在0-12之间;
;以上2个条件必须同时符合,所以10元在0-20之间;20元在0-20之间;50元在0-12之间才行
MsgBox(0,&显示组合结果&,$Sum)
;我的错误 $Sum=&10元人民币是:&&$Ten&&张 &&&20元人民币的是:&&$Twenty&&张 &&&50元人民币是:&&$Fifty&&张 &&@CRLF
;少了$Sum=$Sum&&10元人民币是:&&$Ten&&张 &&&20元人民币的是:&&$Twenty&&张 &&&50元人民币是:&&$Fifty&&张 &&@CRLF,这是个致命错误,没有使用初始状态的$Sum,当然只能显示最后一次成功组合的信息,照猫画猫是不行的啊!!!
12.关于ASCII的了解?
ASCII列表就是“字符串与ASCII值一一对应的关系表”。
ASC(字符串) :将字符串转换成对应的ASCII值
Chr(ASCII值) :将ASCII值转换成字符串
@CR 对应13 ;@LF&&对应10 ;@TAB 对应 9
A-Z 分别对应65-90&&;a-z 分别对应 97-122
具体示例代码1:
For $i=65 To 90
& & & & $s=$s&Chr($i)&& &
MsgBox(0,&依次显示ASCII值从65-90所对应的字符串值&,$s)
具体示例代码2:
$Char=InputBox(&判定输入是否是字母&,&请输入字符&)
If @error=1 Or&&$Char=&&&&Then
& & & & MsgBox(0,&输入非法&,&你输入的不是字符或输入为空&)
& & & & Exit
If (Asc($Char)&=65 And Asc($Char)&=90) Or (Asc($Char)&=97 And Asc($Char)&=122) Then
& & & & MsgBox(0,&输入正确&,&你输入的是A-Z或a-z中的字母&&&中的 &&$Char)
& & & & MsgBox(0,&输入错误&,&你输入的不是A-Z或a-z中的字母&)
& & & & Exit
13.乘法口诀?
For $i=1 To 9
& && &&&For $j=1&&To 9
& && && && && & $s&=StringFormat (&%2d *%2d=%-2d&,$i,$j,$i*$j)&&&&&
& && &&&Next
& && &&&$s=$s&@CRLF
;$s = StringReplace ($s,&=0&,&=&&&)& &&&修改了StringFormat(),该行可以省略掉了& &
MsgBox(0,&乘法口诀列式&,$s)
;StringFormat(&格式控制字符串&,变量1[,...变量32])
;返回根据“格式控制字符串”参数定义中的“变量格式”格式化后的字符串
;好绕嘴,就是根据“格式控制字符串定义的格式进行后续变量的输出
; % 格式控制字符串标识
; 2d 以整数类型输出,2是输出的宽度
; - 在指定的宽度左对齐,默认是右对齐
;我将$s&=StringFormat (&%2d*%2d=%2d&,$i,$j,$i*$j)&&&&& 改成 $s&=StringFormat (&%2d *%2d=%-2d&,$i,$j,$i*$j)&&&&&
;StringReplace(&字符串&,&搜索串&或起始位置,&替换串&[,数量[区分大小写]]
;$text = StringReplace(&this is a line of text&, & &, &-&)
;$numreplacements = @extended
;@extended 扩展函数返回值,常用于StringReplace()
;MsgBox(0, &替换后:&, $text)
;MsgBox(0, &替换操作次数:&, $numreplacements)
方法2:@TAB 制表符
For $i=1 To 9
& && &&&For $j=1&&To 9
& && && && && & $s=$s&$i&&*&&$j&&=&&($i*$j)&& && @TAB
& && &&&Next
& && &&&$s=$s&@CRLF
MsgBox(0,&乘法口诀列式&,$s)
方法3:设置内循环
;感谢netegg
For $i=1 To 9
& && &&&For $j=1&&To&&$精华所在
& && && && && & $s=$s&$j&&*&&$i&&=&&($j*$i)&& && @TAB
& && &&&Next
& && &&&$s=$s&@CRLF
MsgBox(0,&乘法口诀列式&,$s)
newuser&发表于
[b]回复 [url=http://www.autoitx.com/redirect.php?goto=findpost&pid=196306&ptid=17702]3#[/url] [i]newuser[/i] [/b]
14.字符串相关函数了解?
代码如下:
Dim $Name=&My name is zougk! Welcome to my style&
Dim $Str1,$Str2,$Str3,$Str4,$Str5,$Str6,$Str7,$Str8,$Str9,$Str10,$Str11,$Str12
$Str1=StringLeft($Name,16)
MsgBox(0,&StringLeft'use&,$Str1)
$Str2=StringRight($Name,19)
MsgBox(0,&StringRight'use&,$Str2)
$Str3=StringMid($Name,12,5)
MsgBox(0,&StrintgMid'use&,$Str3)
$Len=StringLen($Name)
MsgBox(0,&变量$Name的长度&,&字符串&&$Name&&的长度是:&&$Len&&位&)
$Str4=StringUpper($Name)
MsgBox(0,&小写字母变大写&,$str4)
$Str5=StringLower($Name)
MsgBox(0,&大写字母变小写&,$Str5)
$Str6=StringReplace($Name,&zougk&,&zouyy&)
MsgBox(0,&字符串指定内容替换&,$Str6)
$Str7=StringSplit($Name,& &,0)
MsgBox(0,&字符串按空格进行分割&,&第1个字母&&$Str7[1]&& &&&第2个字母&&$Str7[2]) ;之后省略吧
$Str8=StringSplit($Name,&&,1)
MsgBox(0,&字符串按单词逐个分割&,&第1个字母&&$Str8[1]&& &&&第2个字母&&$Str8[2]) ;之后省略吧
; [已解决]谁能告诉我 StringSplit($Name,& &,0) 和 StringSplit($Name,& &,1) 的区别?
Dim $Name=&My name is zougk, Welcome to my style&
Dim $Str1,$Str2,$Str3,$Str4,$Str5,$Str6,$Str7,$Str8,$Str9,$Str10,$Str11,$Str12
$Str1=StringSplit($Name,&, &,0)
MsgBox(0,&test stringsplit&,&第1个被分割的子字符串&&$Str1[1]&@CRLF&&第2个被分割的子字符串&&$Str1[2]& _
@CRLF&&第3个被分割的子字符串&&$Str1[3]&@CRLF&&第4个被分割的子字符串&&$Str1[4]&@CRLF& _
&第5个被分割的子字符串&&$Str1[5]&@CRLF&&第6个被分割的子字符串&&$Str1[6]&& &)
$Str2=StringSplit($Name,&, &,1)
MsgBox(0,&test2 stringsplit&,$Str2[1])
;分割符是对分割符前的”子字符串&进行分割,到了第5个分割符前的子字符串是空
;对于只有1个分割符的StringSplit(&字符串&,&分割符&,flag),flag为0或1都一样
;对于大于等于2个分割符的StringSplit(&字符串&,&分割符&,flag),flag为0表示“分割符以 个体形式&&参与到分割字符串的行动中来
;对于大于等于2个分割符的StringSplit(&字符串&,&分割符&,flag),flag为1表示“分割符以 整体形式&&参与到分割字符串的行动中来
$Str9=StringStripWS($Name,8)
MsgBox(0,&去掉字符串中的所有空格空格&,$str9) ;StringStripWS(&字符串&,标志) 标志为8是去掉所有空格,还可以设置为1 2&&4
$Str10=StringTrimLeft($Name,17)
MsgBox(0,&从左截掉指定数量的字符后剩余的字符串&,$Str10)
$Str11=StringTrimRight($Name,19)
MsgBox(0,&从右截掉指定数量的字符后剩余的字符串&,$Str11)
$Str12=StringIsAlNum($Name)&&;判定$Name是否完全是字母或数字,是返回1,因有&&空格&&和 ! ,所以返回0
;StringIsAlpha(&string&) 判定string是否完全是字母
MsgBox(0,&字符串是否完全是字母&,$Str12)
$Str13=StringInStr($Name,&my&,0)&
;StringInStr(&字符串&,&子字符串&,是否区分大小写 0是不区分大小写,出现次序
MsgBox(0,&检查字符串中是否包含指定的子字符串&,$Str13)
$Str14=StringInStr($Name,&my&,1,1)
MsgBox(0,&检查字符串中是否包含指定的子字符串&,$Str14)
15._arraydisplay&&函数的应用?
代码如下:
#include &array.au3&
Dim $HomeMember[3][3]=[[&zgk&,&1970&,40],[&yhh&,&1980&,30],[&zyy&,&2000&,10]]
_ArrayDisplay($HomeMember,&家庭信息&)
;我的错误是[&yhh&,&1980,30]少了一个双引号,还以为是在中英输入状态下的[ ]出了问题呢?
16.打开指定网页?
错误:run(“iexplore.exe [url]http://sohu.com[/url]”)
原因:iexplore.exe路径有问题,run无法找到它,Run(&C:\Program Files\Internet Explorer\iexplore.exe [url]http://10.64.240.131[/url]&)解决
补充:Run(&Notepad.exe&, &&, @SW_MAXIMIZE),最大化的运行记事本
Run(&C:\Program Files\Internet Explorer\iexplore.exe [url]http://10.64.240.131[/url]&}

我要回帖

更多关于 化验肝功多少钱 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信