admin 管理员组

文章数量: 887032


2023年12月18日发(作者:dos命令sleep)

AUTOIT汉化版3.2.9.3.1(实操中文教程)

一、简介

3.2.9.1

汉化更新:

[*]修正帮助文件。

官方更新:

[+]新增: SendKeepActive().

[+]新增: 新增更多的 ControlTreeView() .

[*]修正: GUICtrlSetImage() 设置大小问题(从3.2.4.9.开始) (Thanks Wooltown)

[*]修正: GUICtrlCreateListView() 没有栏目. (Thanks gafrost)

[*]修正: _GUICtrlListViewInsertColumn() 过后 _GUICtrlListViewDeleteColumn() 第一个栏目是

ListView 控件.

(Thanks Antiec, gafrost)(注:可能说的是返回的句柄不对.)

AutoIt v3 是用以编写并生成具有 BASIC 语言风格的脚本程序的免费软件,它被设计用来在Windows

GUI(用户界面)中进行自动操作。通过它可以组合使用模拟键击、鼠标移动和窗口/控件操作等来实现自动化任务,而这是其它语言所无法做到或尚无可靠方法实现的(比如VBScript和SendKeys)。

AutoIt 最初是为PC(个人电脑)的“批量处理”而设计,用于对数千台PC进行(同样的)配置,不过随着v3版本的到来它也很适合用于家庭自动化和编写用以完成重复性任务的脚本。

AutoIt 可以做的事:

运行 Windows 及 DOS 下的可执行文件

模拟键击动作(支持大多数的键盘布局)

模拟鼠标移动和点击动作。

对窗口进行移动、调整大小和其它操作。

直接与窗口的“控件“交互(设置/获取 文字、移动、关闭,等等)

配合剪贴板进行剪切/粘贴文本操作

对注册表进行操作

手把手教你写au3程序-第一章入门

引子

应一位朋友要求,他想学编程,但一直不知道如何开始,这里我就做一系统教程,引导大家进入au3强大的程序世界(脚本),目的是让每一位渴望个性的网管朋友,都写出为网吧专用的小程序。(如果你想写个windows vista 2009,那么请放弃阅读此教程)

第一章 入门

AU3编程基础教程 第 - 1 - 页 共 32 页

AutoIt v3 是用以编写并生成具有 BASIC 语言风格的脚本程序的免费软件,简来说是脚本语言,但因可以生成exe,而其风格简单适用而且支持GUI,com等,很受网管同行看好

可以做的事,非常之多,网吧常用基本上可以完成。网管之星,火狐等游戏更新软件就是用该软件写成.

到了后面,随着学习的深入,我也将放出一些网吧维护工具的源码供参考。

;和大家一起学习进步,不对之处,肯请批评指正。

1,首先下载安装:

地址:/system/system/20071108/

装好后打开目录:x: (编辑器,支持语法高亮,你也可以用记事本,但不推荐)双击打开。

2,下面我们来写第一个程序。

注意:";" 号表示注释

例子 1

以下是代码

复制代码

1.

2.

解释:

;msgbox是弹出一个对话框函数,0,表示标志(可以设定各种类型的弹出对话框,比如带问号,带错误标志),"标题-wglm"是窗口标题,"你好,世界"是对框内容

exit表示退出

3,点scite_autoit编辑器的,"工具"-"编译脚本",

这里可以设置生成exe文件的图标,文件名,“资源修改”选项卡可以设置程序的一些版权信息说明AU3编程基础教程 第 - 2 - 页 共 32 页

msgbox(0,"标题-wglm","你好,世界")

exit

等。也就是点exe文件右键属性,看到一些内容。

点击“编译脚本”按钮,就会生成exe文件,在刚设定路径找到exe文件双击,我们的第一个程序就成功了

手把手教你写au3程序-第一章 入门 002

管理提醒: 本帖被 thinking 执行加亮操作(2008-05-09)

现在我们先来回答一些疑问。

001,学au3程序需要什么文化水平

答:小学三年级以上

002,我学得会吗?

答:相信我,当我还在当学生的时候,就开始教同学们offices(老师当时一天泡妞),当时学校最差的小女孩都被我教会了用word,所以我有信心和决心带大家入门。

003,需要多长时间学会?

答:因人而异,古人云"只要功夫深 铁棒磨成针",也就是说古人肯定你只要努力,就能学会,但并没有规定多少时间铁棒被磨成针。每天努力多一点,就快一点。

004,我如何静下心来学习?

答:首先要下定决心来研习,其次注意生活营养,少近女色,少自己摧残自己。

好,回答了这么多题外问题,接下来进入今天的正题。

还是从实例出发,以勾起大家的兴趣作为开始。

我们今天的任务是写一个在系统托盘(屏幕右下角),来提示顾客的公告,大家一定看过很多用vbs,或者批处理来实现的例子,但都太麻烦,而且不是自己原创,今天来写一个自己原创个性的,是不是很有意义?

前面已经教了大家哪里下载教程和编程工具(/?tid=80393),在au3AU3编程基础教程 第 - 3 - 页 共 32 页

里实现我们需要的这个提示功能,只需一句代码(一个函数)。

复制代码

1. TrayTip( "公告标题-wglm", "紧急通知,村东头教大家学au3,各家男女老少晚饭后请准时集合学习",3)

2.

好,编译成exe文件,双击。是不是成功了?

[attachment=31001]

;traytip表示在托盘图标上显示一个气球提示,"公告标题-wglm"表示标题,"紧急通知,村东头教大家学au3,各家男女老少晚饭后请准时集合学习"表示提示内容,3表示提示显示时间,因为微软系统关系这个时间只是大略值。

sleep(3000)

;表示让au3程序暂停3秒(3000毫秒),如果没有这句,程序一运行便退出,也就看不到提示效果了。

traytip函数的完整格式如下:

复制代码

1.

初学编程,例如有些朋友说连批处理的for都搞不清楚,可能对于初学者最不好理解的就是函数的参数,还有那些逗呈,括号,中括号他们的用法和意义了。在这里我可以很负责任的告诉各位,其实非常好理解。

下节课将专为大家讲解这些表面上让人头晕而实际很容易理解的内容,AU3的学习过程,很多都是在对于函数的理解灵活运行上,函数虽多,但不用强记,用熟了自然便会贯通。

AU3编程基础教程 第 - 4 - 页 共 32 页

TrayTip ( "标题", "文本", 超时时间 [, 属性] )

sleep(3000)

运行于windows的程序,多半要利用windows的编程接口,所以,只要你学会了一种编程,其它的语言相对会容易掌握一些,而且程序学习快慢,还要看你对windows了解多少,了解越多,学习越容易。

手把手教你写au3程序-第一章 入门 003

管理提醒: 本帖被 thinking 执行加亮操作(2008-05-11)

有朋友问为什么我们的教程和别的教程不一样,问得好,的确是不一样。培养天才人物的有效途径是左右脑协调合作(奥尔森),《学习的革命》一书中指出,学习课程,都应该先从概貌开始,掌握整体图表和整体结构,再掌握部份具体细节。

传统的教学,不慌不忙,一章一节,每次课程,只有部份,没有总体慨貌,这很蠢而且没有效率。

开始的这几张,都是教各位掌握au3的整体结构和从宏观上了解au3是一个什么东东,能做些什么事,如何去操控它为我们服务。这就是我们学习的过程,先掌握全局,再细入微观、深入。

废话完了

第一章,第三节,用户图形界面(GUI)(应朋友要求,这一张就多一点除了窗口的讲解,还续上 上一节课留下的逗号,括号,中括号)

au3是支持窗口的,比尔盖茨的成功起始于大大改善了计算机与人之间的交流友好程度,这得益于窗口(windows)这个概念,GUI你则可以理解为程序界面(GUI是一个窗口界面,但包括各种控件,如按钮,编辑框等等)

001

下面我们还是以写一个网吧公告为例,开始这一节的实例

复制代码

1.

2.

3.

4.

5.

6.

#include <3>

GUICreate ( "公告 - ", 200, 200)

GUISetState (@SW_SHOW)

GUICtrlCreateLabel("欢迎光临XX网吧",10,10,190,15)

GUICtrlCreateLabel("本网吧网速过快,请看管好随身物品。",10,25,190,15)

7.

8.

While 1

$msg = GUIGetMsg()

AU3编程基础教程 第 - 5 - 页 共 32 页

9.

10.

11.

If $msg = $GUI_EVENT_CLOSE Then ExitLoop

Wend

exit

[attachment=31194]

#include <3>

;表示包含一个3库文件,如果没有这一行,下面一些函数将不可用。这是最基本的

GUICreate ( "公告 - ", 200, 200)

;表示创建一个窗口,"公告 - " 是公告, 200, 200 分别表示宽高

GUISetState (@SW_SHOW)

; 显示空白窗口,窗口被创建后,默认是不显示,这一行的作用是显示出来。

GUICtrlCreateLabel("欢迎光临XX网吧",10,10,190,190)

;创建一个创建一个静态的 Label 控件,用来显示文字,"欢迎光临xx网吧" 表示窗口标题,",10,10" 表示距离窗口在与上的距离,190,15 分别表示宽和高

GUICtrlCreateLabel("本网吧网速过快,请看管好随身物品。",10,25,190,15)

;同上

While 1

$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop

Wend

;表示运行脚本到窗口关闭,关于循环以后再详解。

exit

;退出,可要可不要,因为脚本运行完自动会退出,写在这里感觉好看一点。

002

当然一个网吧公告不可能这么丑,如何让这个窗口具有一些特效呢,或者更美观呢?比如动画显示,动画关闭,我们这里只示例一下,不作详解,可以利用windows API 中的 AnimateWindow 函数,(这本不属于au3内容,可以说所有windows下程序通用)

AU3编程基础教程 第 - 6 - 页 共 32 页

那么我们将

GUICreate ( "公告 - ", 200, 200)

这一行,改成以下内容(两行)

复制代码

1.

2.

$gui1 = GUICreate ( "公告 - ", 200, 200)

DllCall("", "int", "AnimateWindow", "hwnd", $gui1, "int", 500, "long", 0x00040010)

编译之后,再试一下?看是不是窗口有了进入特效?退出特效暂不提,当然很简单。还有更多的效果请参阅windows API手册.

至于如何让窗口有个漂亮的外表,那就利用一些皮肤之类的了,以后再谈。

003

如何让程序通用,那就需要用配置文件的形式,你把程序分发给别人后,别人只需要修改其中配置.ini文件,就可以实现,修改提示内容等,配置文件的读取和写入还是另外一章再讲好了,因内容比较重要。

004

现在我们能过弹出一个对话框来讲函数中的逗号,括号,中括号

帮助文件中对于msgbox这个函数是这样解释的

引用

MsgBox

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

显示一个简单的对话框(可设置超时属性)。

MsgBox ( 标志, "标题", "文本" [, 超时时间] )

如何理解呢?

1

基本理解,帮助中也说了标志一些十进制,如1 2 3 4 5 ,需要相应的内容则相加这些数字

比如我们需要一个带有确定和取消的对话框,那么就是

AU3编程基础教程 第 - 7 - 页 共 32 页

复制代码

1.

[attachment=31196]

如果我们需要提示框有个问号,那么32+1,标志改为33

复制代码

1.

[attachment=31197]

2

中括号括起来的内容,表示可选参数,也就是说你用不用都可以,但前面的必选参数是必须设置的。例如我们需要这个对话框3秒内关闭。那么实际运行用中就是下面这个样子,[]中括号实际是不需要输入的

复制代码

1.

如果不需要设置对话框消失那么,[]中括号也是不需要输入的就是下面这个样子

复制代码

1.

这里就教大家如何理解帮助文件,所以课下大家一定多去看些基本的东西和函数的用法,多练习,使用。

msgbox(33,"标题","这里是文本")

msgbox(33,"标题","这里是文本",3)

msgbox(33,"标题","这里是文本")

msgbox(1,"标题","这里是文本")

手把手教写au3程序04(开机维护通道实例)

管理提醒: 本帖被 thinking 执行加亮操作(2008-11-14)

教程总目录: /?tid=80392

au3下载,和安装: /?tid=80393

AU3编程基础教程 第 - 8 - 页 共 32 页

事实证明,当有任务需要我们用程序来解决,或者以实例出发是最好的学习程序设计的方法。在解决问题的过程中学习函数的用法、编程思想等激发起的兴趣又可以进一步让人去学习基础知识的冲动,基础知识(内功)的扎实,又可以进一步优化我们的程序让其效率更高,代码更优美,逻辑更清晰。如此循环,他日定成正果,跳出三界外,不在五行中。

所以,这一章,我们还是以实例开始,我们这第一章第四节(01-04)的目的是要写一个比较完美的开机维护通道启动程序。

先来看看,我们需要实现一些什么功能?

1,开机启动服务器上批处理。

2,运行批处理不显示控制台窗口(俗称黑框框)

3,考虑服务器关机的情况。(或者说是客户机开机网络连接延时判断)

4,如果考虑这个程序给别的朋友用,那么我们势必要写个配置文件来实现通用。

那么这一章我们就要以上几点带来的问题解决方案,函数等。其中涉及au3的,运行程序,运行参数,ping,判断语句,循环语句,用户自定函数,配置读取。概念有这么些,但是,相当简单,下面我们以实例开始。

(我建议在大家先安装好au3,并且打开帮助文件,在下面的学习中不懂的函数可以直接在帮助中搜索,看一下帮助的内容,再看一下在实际中如何应用,很容易掌握如何利用au3来控制计算机,也就是学会au3。)

1,开机启动服务器上批处理。

首先在代码第一行加入

复制代码

1.

表示包含3这个文件,好使用其中的自定义函数 _RunDOS

假设为我们服务器上的批处理所在位置是

AU3编程基础教程 第 - 9 - 页 共 32 页

#include <3>

那么我们的第二行代码就是:

复制代码

1.

表示运行批处理 192.168.0.251boot$

这样做,实际上有可能不够兼容,因为winxp sp2有可能提示该文件可能不安装是否运行,所以,我们不直接运行,用call,call是dos命令中的调用其它批处理命令,在这里我们的特殊用处是不出现xp的安全提示。(当然不出现安全提示,还可以通过修改注册表,或者将ip换成机器名的形式,但这样做最方便,ip地址直接访问也最稳定,我推荐用下面的方法。)

复制代码

1.

2,运行批处理不显示控制台窗口(俗称黑框框)

这里我们已经解决了第二个问题。因为_rundos 这个自定义函数的源代码是

复制代码

1.

2.

Func _RunDOS($sCommand)

Local $nResult = RunWait(@ComSpec & " /C " & $sCommand, "", @SW_HIDE)

3.

4.

看不懂没关系,只要注意到其中 @SW_HIDE 这个显示标志,表示"隐藏窗口"即可,也就是在运行这个批处理的过程中隐藏了窗口。

AU3编程基础教程 第 - 10 - 页 共 32 页

Return SetError(@error, @extended, $nResult)

EndFunc ;==>_RunDOS

_RunDOS("call 192.168.0.251boot$")

_RunDOS("192.168.0.251boot$")

3,考虑服务器关机的情况。(或者说是客户机开机网络连接延时判断)

用中文来说,我们作一个选择:如果服务器没有关机,运行批处理,如果关机记录日志。

复制代码

1.

2.

3.

4.

其中

if ... then

endif

是au3的条件选择语句,意思是

如果ping 192.168.0.251成功,则运行

复制代码

1.

退出

exit 表示退出程序。

这里就实现了对服务器是否在线的判断(也可以是开机网络连接延时判断)。我们这样判断在实际中没有太大的意义,我们要实现的是当服务器关机时程序等待,等待到开机后,再运行机制批处理。所以我们接下来要用到循环语句。

while

wend

代码如下:

复制代码

1. while 1

_RunDOS("call 192.168.0.251boot$")

If Ping("192.168.0.251") Then

_RunDOS("call 192.168.0.251boot$")

Exit

EndIf

2. If Ping("192.168.0.251") Then

AU3编程基础教程 第 - 11 - 页 共 32 页

3.

4.

5.

6.

_RunDOS("call 192.168.0.251boot$")

Exit

EndIf

wend

其中while 后面的1表示一直循环。

程序的运行过程就是在while 1 和 wend之间的代码一直运行

里面的代码,如果服务器在线,运行批处理,运行完批处理exit(退出程序),如果服务器不在线呢?程序就继续循环,直到服务器在线为止。

到此,完整的代码就是:

复制代码

1.

2.

3.

4.

5.

6.

7.

4,如果考虑这个程序给别的朋友用,那么我们势必要写个配置文件来实现通用。

这里我们学习配置文件的读取,详细函数用法就参考帮助文档,这里就不复制了,直接上代码。

首先我们对程序作一些改动,定义一些变量。方便我们学习更高级的程序语言,我们采取先定义再使用AU3编程基础教程 第 - 12 - 页 共 32 页

#include <3>

while 1

If Ping("192.168.0.251") Then

_RunDOS("call 192.168.0.251boot$")

Exit

EndIf

wend

的方法定义变量。

复制代码

1.

2.

3.

4.

#include <3>

dim $Serverip

dim $serverroute

$Serverip = iniread(@scriptdir & "","配置","服务器IP","192.168.0.251")

5. $serverroute = iniread(@scriptdir & "","配置","批处理路径","192.168.0.251boot$")

6.

7.

8.

9.

10.

11.

在程序同目录,新建一个作为配置文件,内容为

复制代码

1.

2.

3.

对于新手来说,上面的代码复杂了一点,但是只要你花几秒钟认真理解,是非常简单的。

下面我们一一解释

#include <3>

AU3编程基础教程 第 - 13 - 页 共 32 页

[配置]

服务器IP=192.168.0.251

批处理路径=192.168.0.251boot$

while 1

If Ping($Serverip) Then

_RunDOS("call " & $serverroute)

Exit

EndIf

wend

;包含3文件,用于在下面使用自定义函数_RunDOS

复制代码

1.

2.

;因为要读取配置文件,所以定义上面两个变量,$serverip 表示服务器IP,$serverroute表示批处理路径。

复制代码

1. $Serverip = iniread(@scriptdir & "","配置","服务器IP","192.168.0.251")

2. $serverroute = iniread(@scriptdir & "","配置","批处理路径","192.168.0.251boot$")

; 读取配置文件,给$Serverip,$serverroute两个变量赋值。

iniread(@scriptdir & "","配置","服务器IP","192.168.0.251")

; 这句表示 读取程序所在目录的文件,读取该文件的“配置”字段的“服务器IP”这个关键字后面的值。

最后的 "192.168.0.251" 表示默认值,如果读取失败就使用该值。

复制代码

1.

2.

3.

4.

5.

6.

while 1

If Ping($Serverip) Then

_RunDOS("call " & $serverroute)

Exit

EndIf

wend

dim $Serverip

dim $serverroute

AU3编程基础教程 第 - 14 - 页 共 32 页

上面我们已经说过了。

如果该程序投入网吧使用的话,建议在开头加上。#NoTrayIcon,表示不显示系统托盘图标。

本节完,示例和源码与配置文件在附件中提供,供学习讨论。

请大家仔细理解(不懂可以反复看帮助,或者跟贴讨论。)

程序运行参数

au3运行程序时 "@SW_HIDE" 参数表示隐藏运行,将不出现被运行程序的窗口。

ping

用于判断网络是否连通

if then

endif

判断语句:判断条件如果成功做某事,如果不成功做另外的事。

while

wend

循环语句,用于循环执行某些命令,至到出现一些关键字,如exit,程序结束。

_rundos()

用户自定函数:用于运行批处理

AU3编程基础教程 第 - 15 - 页 共 32 页

iniread()

配置读取:用于读取配置文件中的值,使程序更具有通用性。

[原创]从批处理(bat)转到au3-ThinkingAu3教程1-05

管理提醒: 本帖被 thinking 执行加亮操作(2008-12-04)

教程目录:/?tid=80392

相信很多网管朋友,都会批处理,同时也渴望能够学到更高级的脚本语言,批处理能做的事相对于AU3来说实在有限。所以这一章,我们将学习从批处理转到AU3的学习。

我们有两种方法从bat转到au3

1,是直接在au3中运行DOS命令,这个很容易。但是如果系统不了某个外部命令或者CMD被限制使用,这时,我们的调用就会失效了。

2,用AU3内置函数来完成要做的事(推荐)

我们先简单说第一种方法

复制代码

1.

2.

3.

4.

其中 "echo >c:"就是我们的DOS命令,表示显示字符串 并将命令结果输出到c: 中。

这种方法,是直接用au3调用批处理命令,相对简单的多,会用批处理的朋友即刻就可以学会。

详说第二种方法

毕竟,我们在学习一种新的脚本之前,若非必要(只有批处理能完成的,AU3无法作到才考虑这种AU3编程基础教程 第 - 16 - 页 共 32 页

#include

_rundos("echo >c:")

方法)就尽可能不要调用其它程序,因为要考虑其它程序(BAT)倒底是不是一定可以运行。

所以,下面我将列出在网吧维护中,可能常用的批处理的直接AU3内置函数的应用。

1 删除文件

复制代码

1.

表示删除c盘下文件

2 复制文件

复制代码

1.

表示将c:移动到c:,标志1,表示覆盖已存在的文件,更多可选参数0 = (默认)不覆盖已存在的文件, 1 = 覆盖已存在的文件, 8 = 当目标文件夹不存在,就自动创建一个.

3 移动文件

复制代码

1.

表示将c:移动到c:,参数1表示覆盖存在的文件

4 获取文件属性

复制代码

FileMove ( "c:", "c:" , 1)

FileCopy ( "c:", "c:" , 1)

FileDelete ( "c:" )

AU3编程基础教程 第 - 17 - 页 共 32 页

1.

FileGetAttrib ( "c:" )

获取c:文件的属性

5 移动或重命名文件

复制代码

1.

移动c:文件到 c:,1表示覆盖存在的文件

复制代码

1.

将c:重命名为c:

6 在一个文本文件中写入数据

复制代码

1.

表示在c:中写入 ,如果不存在,程序会自行创建。(有更标准的方法,为了学习方便,我们先学简单的。)

6 结束进程

复制代码

FileWrite ("c:","")

FileMove ( "c:", "c:", 1)

FileMove ( "c:", "c:", 1)

AU3编程基础教程 第 - 18 - 页 共 32 页

1.

ProcessClose ( "")

表示结束进程

7 返回当前运行的进程列表

复制代码

1.

表示返回现在正在运行的进程。

8 运行其它程序

复制代码

1.

表示运行C:Program Files 目录下,程序

9 运行其它程序直到程序结束

复制代码

1.

表示运行C:Program Files 目录下,程序,直到结束。

10 ping

AU3编程基础教程 第 - 19 - 页 共 32 页

RunWait ( "C:Program ")

Run ( "C:Program ")

ProcessList ()

复制代码

1.

表示ping

11 延时

复制代码

1.

表示延时1000毫秒,再执行下面的行。

12 关机

复制代码

1.

表示关机,"1"还可以被替换为以下标志,或者相加,实现多个重复的功能。

0 = Logoff(注销)

1 = Shutdown(关机)

2 = Reboot(重启)

4 = Force(强制执行)

8 = Power down(关机)

32= Standby(待机)

64= Hibernate(休眠)

AU3编程基础教程 第 - 20 - 页 共 32 页

Shutdown (1)

Sleep (1000)

Ping ("")

今天先说这些最常用的批处理中可能被用的命令,大家一定要每个去试验一下,有不懂的,不明白的,可以跟贴提出,我每天会定时回答大家疑问。还有一些批处理需要转的也可以提出来。

课后作业:

写一个au3程序,实现以下功能

1,在c:盘建一个文件

2,在其中写入 你的论坛ID,如我就是 thinking

3,将 重命名为

4,运行你的IE浏览器,让他自动打开

5,等5秒后后关闭这个浏览器

6,ping 并将返回值记录到脚本目录的文件中。

大家做完可以将代码贴上来,一起交流和探讨。

题外:

AU3的第一章基础教程到此章为止就全部结束了。

以后出不出更高级的教程,就要看各位学习的朋友是否能够理解之前的基础,并且愿意继续在au3里深入。

本教程以网吧能用到的实例出发,没有高深枯燥的理论,主要目的是让大家了解AU3,并对AU3产生浓烈兴趣。当然同时也有可能将学习者带入歧途,成为那种半罐水,只知其一,不知返三的呆子,只是那并不是教程的主要目的不予考虑。

大家应该对AU3的概貌有了一个印象和了解,如果要想学好,需要多多看帮助,多多写程序,并且虚心请教,经常和好友探讨交流。同时注意饮食,爱护身体,清心寡欲,少近女色。

AU3编程基础教程 第 - 21 - 页 共 32 页

[原创]AU3教程006-通过一个IP修改程序学习GUI操作

管理提醒: 本帖被 thinking 执行加亮操作(2010-05-09)

AU3新手教程,高手请优雅的飘过. :)

这世界上有三种人,一种是会编程的,一种是不会编程的。只有学会了编程才能更好的操纵计算机。用别人的软件总是这里差一点,那里又多了,还给你带个广告插件。心里变态的还要给你留个后门。(对了还有一种人呢?免费教别人编程的人)

教程一如既往保持实用的原则,通过一个实例的编写,再融入一些理论基础知识,这样更容易接受。但仍建议大家多看帮助,多学理论与基础。

如老舍所说:写文章重要的是要写,只要你开始写,诺贝尔文学奖就开始向你招手了。。thinking说,写程序重要的,也是写,只要你开始动手,离操作系统的编写就不远了。一个不会编程却在计算机行业工作的人是悲哀的。

所以不要只看教程,你看了不顶贴可以,但看了一定要跟着做做。

这一章我们讲一个根据配置文件和用户输入修改IP的程序的编写,来学习AU3中,GUI的建立,用户操作的响应,配置文件的读取,用户输入的读取.

教程总目录: /?tid=80392

首先大家还是下载AU3来安装: /system/system/20081023/

这个是我私人重新打包的版本,相比原版

1,更改了默认的编译exe图标.

2,打包了全汉化帮助,所有UDF全汉化.

3,自己写了个工具箱,里面都是实用的调用,没有太多无谓的东西.

1, 首先,我简单说下这个版本安装后,工具箱的内容.

=== 001_工具箱.jpg

[attachment=47873]

AU3编程基础教程 第 - 22 - 页 共 32 页

2, 先点击 "图形编辑 KODA",我们先画个界面.

=== 002_生成

[attachment=47866]

然后点工具,生成界面,把代码复制出来.新建一个 改3,将刚复制的代码放进去,右键用 scite 打开编辑.

界面生成了,但现在这个界面只能看,没有任何功能.我们接下来需要写代码来让程序有实际功能.

3. 新建一个配置文件 , 用来让程序更具有通用性.

内容:

复制代码

1.

2.

3.

4.

5.

6.

=== 003_配置文件.jpg

[attachment=47867]

4.在3上右键-编辑脚本(scite)

这样就用 scite 编辑器打开了我们刚才生成的GUI,好来编辑他.

代码:

复制代码

1.

2.

3.

4.

5.

#include <3>

#include <3>

#include <3>

#include <3>

[配置]

机器名前缀 = WGLM-

DNS = 220.189.127.106,220.189.127.107

路由 = 192.168.0.254

IP前缀 = 192.168.0.

AU3编程基础教程 第 - 23 - 页 共 32 页

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

#Region ### START Koda GUI section ### Form=

$Form1 = GUICreate("Form1", 330, 230, 192, 114)

$Input1 = GUICtrlCreateInput("Input1", 88, 40, 121, 21)

$Button1 = GUICtrlCreateButton("Button1", 88, 96, 123, 25)

GUISetState(@SW_SHOW)

#EndRegion ### END Koda GUI section ###

While 1

$nMsg = GUIGetMsg()

Switch $nMsg

Case $GUI_EVENT_CLOSE

Exit

EndSwitch

WEnd

5, 读取配置文件。

在 #include <3> 下增加

复制代码

1.

2.

3.

4.

5.

这五行用函数 IniRead() 读取配置文件,并赋给相应的变量,等待程序后续调用.

复制代码

1.

这句话的作用是,定义一个全局(GLOBAL)变量 $configPath (AU3的变量以 $ 开头,非常易于区分出变量), 这个变量保存我们的配置文件的路径。 @ScriptDir 表示脚本程序所在的路径 & 表示连接字符AU3编程基础教程 第 - 24 - 页 共 32 页

Global $configPath = @ScriptDir & ""

Global $configPath = @ScriptDir & ""

Global $Name_qz = IniRead($configPath,"配置","机器名前缀",0)

Global $DNS = IniRead($configPath,"配置","DNS",0)

Global $router = IniRead($configPath,"配置","路由",0)

Global $ip_qz = IniRead($configPath,"配置","IP前缀",0)

串(如 "1" & "a" 结果就是 1a 这样一个字符串,在au3中,字符串必须以 半角的 " 或者 ' 括起来),假设程序在c:, 那么运行程序后 $configpath 的值就为 c:

还可以写成

复制代码

1.

但这不方便以后我们将程序的每个功能,分写成不同的函数方便在不同的程序中都可以调用,我用 global 来定义这是一个全局全量,每个函数都可以调用这个变量,这个变量,在所有程序中每个函数中,都有唯一的值.

还可以写成

复制代码

1.

如果你直接双击是没有问题,但这样的坏处就是,用CMD调用时,程序当前运行目录,不是程序所在目录 。假如你在c: 中调用 d:,那 读到的 的路径就是 c: 就会造成读取配置文件错误。用 @ScriptDir & "" 就不会有这样的错误。

(这里说得多了点,请大家理解,在AU3中,如何连接两个字符串,为什么要定义全局global 变量,为什么要 @ScriptDir & "" 表示配置文件的路径)

复制代码

1.

这一句,$name_qz 这个变量的值就是 ,中 “机器名前缀” = 后的面的值。在这里,$name_qz 就被赋值为 WGLM- 我们在后面会调用到 $name_qz 来合成机器名

以下几句就不说了。

6,让GUI拥有与用户交互的功能 (就是当你点击了按钮后,让程序给你个反应)

au3中让GUI与用互交换,有两种模式,消息循环与事件模式。我们这里用消息循环模式做讲解,懂其AU3编程基础教程 第 - 25 - 页 共 32 页

Global $Name_qz = IniRead($configPath,"配置","机器名前缀",0)

$configPath = ""

$configPath = @ScriptDir & ""

一,另一个也非常简单。

消息循环:程序一直循环读取每个控件的状态,假设当用户点击了按钮后,程序读取到按钮被点击,就作出相应的反应。

事件模式:类似VB的交互方式,当用户点击 按钮后,程序才去作出反应。

我们在

复制代码

1.

2.

下面增加

复制代码

1.

2.

当用户点击了 按钮 $Button1 后,就会弹出对话框.请大家测试一下。

=== 004_点击按钮.jpg 如图

[attachment=47868]

7, 我们新建一个自定函数 _Chage() 用来改IP,DNS,机器名

=== 005_增加_chage自定函数.jpg

[attachment=47869]

大家只要明白,当点击了 $button1 按钮后,就会执行

复制代码

AU3编程基础教程 第 - 26 - 页 共 32 页

Case $Button1

MsgBox(0,0,"你点击了按钮")

Case $GUI_EVENT_CLOSE

Exit

1.

2.

Func _chage()

EndFunc ;==>_chage

里面的内容就可以了。

8,读取GUI里的数据。

修改 _chage自定函数为

复制代码

1.

2.

3.

4.

5.

$number = GUICtrlRead($Input1) 表示,读取用户在 $Input1 输入框中输入的内容.并赋值给 $number 这个变量.

MsgBox(0, 0, $number) 表示用对话框,显示我们刚读到的变量.msgbox在我们调试程序时很多时候会用到.

按 F5 ,直接运行代码,在输入框输入内容,点击确定看一下.看一下结果.

=== 006_获取用户输入的内容.jpg

[attachment=47870]

9,根据用户输入,与配置文件的读取,合成应该修改成的IP,与计算机名的值.

修改 _chage() 自定函数为

复制代码

AU3编程基础教程 第 - 27 - 页 共 32 页

Func _chage()

$number = GUICtrlRead($Input1)

MsgBox(0, 0, $number)

EndFunc ;==>_chage

1.

2.

3.

4.

5.

6.

Func _chage()

$number = GUICtrlRead($Input1)

$computerName = $Name_qz & $number

$IP = $ip_qz & $number

MsgBox(0,"应该修改为","机器名为: " & $computerName & @CRLF & "IP为: " & $IP)

7.

EndFunc ;==>_chage

$number = GUICtrlRead($Input1) ;读取用户输入的机器号数字

$computerName = $Name_qz & $number

$name_qz 是我们程序开始就读取的配置文件中,机器名的前缀.这里应该是 WGLM-

$computerName = $Name_qz & $number 表示将机器名前缀 $name_qz 与 读取到的用户的值 $number

合成我们的机器名 赋值给 $computerName 这个变量,这里应该为 WGLM-121 (如果用户输入的是 121 )

$IP = $ip_qz & $number 合成IP字符串.

MsgBox 还是来调试程序,看看我们刚才写的正不正确.

大家按 F5 运行程序,在输入框中输入框,点确定,看是否正确.

=== 007_合成机器名

[attachment=47871]

其它如dns,路由等值不需要合成.直接调用读取配置文件即可!

10, 实际修改.

继续修改_chage 为

复制代码

1.

2.

Func _chage()

AU3编程基础教程 第 - 28 - 页 共 32 页

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

;合成字符串

$number = GUICtrlRead($Input1)

$computerName = $Name_qz & $number

$IP = $ip_qz & $number

;修改机器名

_ChangeName($ComputerName)

;修改IP,dns,路由

RunWait('netsh interface ip set address name = "本地连接" source = static addr = ' & $IP & ' mask = 255.255.254.0 gateway = ' & $router & ' gwmetric = 0', "c:windowssystem32", @SW_HIDE)

13. RunWait('netsh interface ip set dns name = "本地连接" source = static addr = ' & $dns & ' register = PRIMARY', "c:windowssystem32", @SW_HIDE)

14.

15.

在程序最后增加

复制代码

1.

2.

3.

4.

5.

6.

Func _ChangeName($ComputerName) ;修改机器名

;合成注册表键值

$SetKey1 = "HKEY_LOCAL_MACHINESYSTEMControlSet001"

$CtrlKey = "HKEY_LOCAL_MACHINESYSTEMCurrentControlSet"

$Return = RegWrite($SetKey1 & "ControlComputerNameComputerName", "ComputerName", "REG_SZ", $ComputerName)

7. RegWrite($SetKey1 & "ServicesTcpipParameters", "NV Hostname", "REG_SZ", $ComputerName)

8. RegWrite($SetKey1 & "ServicesTcpipParameters", "Hostname", "REG

EndFunc ;==>_chage

AU3编程基础教程 第 - 29 - 页 共 32 页

_SZ", $ComputerName)

9. RegWrite($CtrlKey & "ControlComputerNameComputerName", "ComputerName", "REG_SZ", $ComputerName)

10. RegWrite($CtrlKey & "ServicesTcpipParameters", "NV Hostname", "REG_SZ", $ComputerName)

11. RegWrite($CtrlKey & "ServicesTcpipParameters", "Hostname", "REG_SZ", $ComputerName)

12.

_ChangeName 这个自定函数就不讲了,主要是修改注册表来实现修改机器名.有之前讲的内容,应该能看得懂.看不懂也没关系,你只需要明白,调用 _ChangeName("WGLM-123") 就是将机器名修改为 WGLM-123即可.

复制代码

1.

2.

RunWait('netsh interface ip set address name = "本地连接" source = static addr = ' & $IP & ' mask = 255.255.254.0 gateway = ' & $router & ' gwmetric = 0', "c:windowssystem32", @SW_HIDE)

3. RunWait('netsh interface ip set dns name = "本地连接" source = static addr = ' & $dns & ' register = PRIMARY', "c:windowssystem32", @SW_HIDE)

两行是调用 netsh 来修改机器的IP,dns,路由,很多朋友AU3写的改IP用的是修改注册表的方式,那个要重启才能生效.这个即时生效.

netsh 调用规则请百度, 大家只要明白,我们之前合成的 $ip 在里面的应用就行了.

点击 $button1 后,程序调用执行 _chage() 的代码就写完了,主要就是合成变量,再实际修改.

11.再修改一下GUI

复制代码

1. $Input1 = GUICtrlCreateInput("Input1", 88, 40, 121, 21)

EndFunc ;==>_ChangeName

AU3编程基础教程 第 - 30 - 页 共 32 页

修改为

复制代码

1.

这样程序运行后就不会在输入框中默认有 Input1 字符串了.

复制代码

1.

改为

复制代码

1.

这样按钮就会是中文的 "修改" 二字.不是原默认的 Button1 了

初学教程,为避免过于复杂就此完成.不去考虑太多变数.当然为了让程序更健壮.

留给大家思考:

我们还应该考虑用放的输入是否合法,程序的修改是否在各种计算机上适用,

当用户输入空白字符串,我们怎么处理?

当用户输入不是数字,我们的IP怎么合成?(IP总不可能有字母或者中文)

当用户的网络连接不是"本地连接"这个名字是,我们怎么处理?

netsh 这个程序如果被精简删除了,我们又应该怎么办.

这些就以后再说吧,这里提一下,主要说明,写好一个程序,和扎实的系统基本知识分不开.否则写出来的程序BUG很多,有的系统能正常运行,有的系统不能.希望大家注意.

希望大家搞明白.

au3中字符串如何合成,如:如何将 "111" "abc" 两个字符串合成为 "111abc"

AU3编程基础教程 第 - 31 - 页 共 32 页

$Button1 = GUICtrlCreateButton("修改", 88, 96, 123, 25)

$Button1 = GUICtrlCreateButton("Button1", 88, 96, 123, 25)

$Input1 = GUICtrlCreateInput("", 88, 40, 121, 21)

GUI中,如何让程序拥有交互能力. 当用户点击 按钮(或者其它控件),程序如何响应用户操作.

如何读取控件中,用户输入的值.

这些就以后再说吧,这里提一下,主要说明,写好一个程序,和扎实的系统基本知识分不开.否则写出来的程序BUG很多,有的系统能正常运行,有的系统不能.希望大家注意.

希望大家搞明白.

au3中字符串如何合成,如:如何将 "111" "abc" 两个字符串合成为 "111abc"

GUI中,如何让程序拥有交互能力. 当用户点击 按钮(或者其它控件),程序如何响应用户操作.

如何读取控件中,用户输入的值.

AU3编程基础教程 第 - 32 - 页 共 32 页


本文标签: 程序 表示 运行 大家 编程