AutoIt GUI 编程初探

  接触AutoIt之后就被它吸引住了,前段时间也初步涉足了一下它的GUI编程,并且写出了平生第一个真正有点小用处的GUI小程序:$。下面就对AutoIt的GUI编程做个粗浅的描述,权当抛砖引玉。各位有玉的欢迎砸过来
  接触AutoIt之后就被它吸引住了,前段时间也初步涉足了一下它的GUI编程,并且写出了平生第一个真正有点小用处的GUI小程序:$。下面就对AutoIt的GUI编程做个粗浅的描述,权当抛砖引玉。各位有玉的欢迎砸过来。

  这篇文章我尽量用最通俗的语言写,力求让绝大多数的人看懂。(砖头一:切!明明是不会用专业的词汇表达!俺:嘘!小点儿声。。。)

  GUI程序是由用户界面和后台处理函数组成的。它采用了消息驱动的模式,也就是说,用户对于界面的任何元素的操作都会产生相关的消息。所以,我们的GUI程序的基本模式就是:先创建GUI界面,然后建立一个无限循环,在循环里面对于每个消息再用子函数 做相应的处理。很简单吧?
  首先我们需要画出用户界面。 AutoIt不能象VC一样只用鼠标就可以完成GUI界面的绘制工作,AutoIt使用函数来完成GUI界面的绘制和设置属性。在看下面的代码之前,您只需要对像素和对话框(窗口)有个简单的概念,当然,如果您能够认识大部分的窗口的控件就更好了。
  #include <GUIConstants.au3>
  ; Creating GUI and controls
  GUICreate("Run As Tool", 385, 120, @DesktopWidth/2 - 192, @DesktopHeight/2 - 50, -1, $WS_EX_ACCEPTFILES)
  第一行,所有的AutoIt的GUI Script都必须包含 GUIConstants.au3 这个库文件。
  第二行是注释,第三行的GUICreate函数就是创建一个对话框,对话框宽385像素,高120像素,左上角的水平位置是屏幕水平分辨率-192,左上角的垂直位置是屏幕垂直分辨率-50,对话框的style设为默认值-1,对话框的ExStyle设置为 $WS_EX_AC这段代码生成的对话框包含四个输入(Input)框和两个按钮(Button)。其中第一个输入框被设置成只读了,当然,您也可以把它的只读属性去掉。第一个写着三个点的按钮是用来选择要执行的文件,另外一个写着RUN的按钮就是执行那个文件了。至此,一个简单的窗 口创建完成了。   
  窗口创建完了,只是一个空壳,下面我们给它添加具体的处理函数。根据前面提到的步骤,我们现在要做的是创建一个无限循环,然后在循环里面处理每一个消息。问题是,我们怎么知道认识那些消息呢?请留心一下前面创建对话框的代码,是不是每个创建函数都有一 个返回值?对!它们就是 $hFile, $hFileSel, $hUser, $hPass, $hDomain和 $hRun。另外,别忘了退出程序,所以我们要记得处理右上角那个关闭按钮。代码如下:
While 1
    $iMsg = GUIGetMsg() ;从操作系统接受消息
   ; 下面的代码会检查文件是否被选择了
    $sCurFilename = GUICtrlRead($hFile) 
    If $sCurFilename <> $sFilename Then
        $iStartIndex = 0
        $sFilename = $sCurFilename
    Endif
   ; Main "Select" statement that handles other events
    Select
        Case $iMsg = $hFileSel ;选择文件按钮
            $sTmpFile = FileOpenDialog("Select file:", $sFilename, "Executables (*.com;*.exe)")
            If @error Then ContinueLoop
            GUICtrlSetData($hFile, $sTmpFile); GUI will be updated at next iteration
        Case $iMsg = $hRun ;RUN按钮
            Exec()
        Case $iMsg = $GUI_EVENT_CLOSE ;右上角的退出按钮
            Exit
    EndSelect
Wend
  这里我们只处理了文件选择按钮、RUN按钮、和退出按钮的消息。FileOpenDialog函数的作用就是打开一个文件选择对话框,第一个参数是对话框的标题,第二个参数是起始位置,如果要打开“我的电脑”,这个参数就是"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}",第三个参数是文件类型,您可以设定过滤列表,用分号(;)隔开就可以了。下面我们添加具体的处理函数,这里调用了一个Exec函数,我们需要完成它:
代码 (双击代码复制到粘贴板)
Func Exec()
    RunAsSet(GUICtrlRead($hUser), GUICtrlRead($hDomain), GUICtrlRead($hPass))
    RunWait(GUICtrlRead($hFile))
    RunAsSet()
EndFunc
  上面没有处理的$hUser, $hPass, $hDomain都在这里被用到了,因为我们不关心用户每次输入了什么用户名/密码/域,我们只关心用户在按下RUN的时候这些地方的值是什么。到这里,我们就完成了这个简单的GUI程序,试试它?
  另外,我们还可以给它添加保存上次运行时信息的功能,这就需要读写文件,需要包含库文件 file.au3,由于窗口有用户名/密码等敏感信息,所以我们要加密保存,AutoIt在库文件 string.au3 里面给我们提供了这样的函数。完整的代码请看附件。CEPTFILES,意思为该对话框接受文件名。其中,对话框的水平位置和垂直位置可以使用默认值-1,这时候该对话框会创建在屏幕中央。具体的函数和参数的说明,请参考AutoIt的帮助文档。
  创建这个主窗口之后,我们还要添加其他的对话框来接受用户的输入。您需要调整每个元素的宽度高度以及相对位置以求让窗口看起来更好看。看下面的代码:
#include <GUIConstants.au3>

; Setting variables
Global $sFilename = @ScriptFullPath
Global $username = "Administrator"
Global $password = "Password"
Global $domain = @Computername

; Creating GUI and controls
GUICreate("Run As Tool", 385, 120, @DesktopWidth/2 - 192, @DesktopHeight/2 - 50, -1, $WS_EX_ACCEPTFILES)
$hFile = GUICtrlCreateInput($sFilename, 12,  15, 325, 16, $ES_READONLY, $WS_EX_STATICEDGE)
GUICtrlSetCursor($hFile, 2) 
GUICtrlSetState($hFile, $GUI_ACCEPTFILES)
GUICtrlSetTip($hFile, "You can select the program you want to run")
$hFileSel = GUICtrlCreateButton("...", 345,  14, 26, 18)
GuiCtrlCreateLabel("Username:", 12, 40)
$hUser = GUICtrlCreateInput($username, 82, 40, 180, 16)
GuiCtrlCreateLabel("Password:", 12, 65)
$hPass = GUICtrlCreateInput($password, 82, 65, 180, 16, $ES_PASSWORD)
GuiCtrlCreateLabel("Domain:  ", 12, 90)
$hDomain = GUICtrlCreateInput($domain, 82, 90, 180, 16)
$hRun = GUICtrlCreateButton("RUN", 300, 60, 70, 30)
GUICtrlSetData($hRun, "RUN")
GUISetState()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值