找回密码
 加入
搜索
查看: 9881|回复: 18

[原创] 不完整的学习笔记

 火.. [复制链接]
发表于 2010-6-13 07:40:26 | 显示全部楼层 |阅读模式
原创!挂羊头,呵呵!都是学习笔记,并且不够完整,没办法,学习总是没有持续的精神,但又想持续,大家多鼓励呀!
AU3学习笔记
Zougk  2010-6-9重新学习基础知识
目录
一.基础部分
1.variables(变量)、constants(常量)、arrays(数组)
2.#include和fileinstall()
3.消息循环模式和事件模式
4.函数(跳过)
5.条件与循环语句
二.进阶部分
1.GUI操作示例讲解
2.AU3中的DLL应用

一.基础部分
1
        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"
EndFunc
RUN($FILE) ; 最终脚本执行的是Dim定义的变量
如果改成:
Global $FILE=@SCRIPTDIR & "\win7book.exe"
DIM $FILE=@ScriptDir & "\Exe2AutV3.exe"
RUN($FILE) ; 最终脚本执行的还是Dim定义的变量
将Global更改成Local,结果依旧。
        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。
2
        #inclued 和 fileinstall()
它们很类似,都是将指定的文件在脚本编译的时候包含到被编译的脚本中。但使用fileinstall()预装需要包含的文件在编译后会导致脚本的体积过大。
#include可以将预先写好的函数或现有常量包含到脚本中,例#include <array.au3>或 #include <buttonconstants.au3>。
fileinstall的语法:fileinstall(“sourcefilepath”,”destinationpath”[,flag]) ,其中flag可是0或1,0表示如果目的路径下有相同文件不覆盖,反之覆盖。
3
&#61548;        消息循环模式
对于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基本语法框架:
While 1
    $nMsg=GUIGetMsg()
    …具体代码
Wend

例:创建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)
While 1
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
Wend
&#61548;        OnEvent模式:只有在事件被触发时才调用相关函数执行,执行后在返回主程序。返回的事件包括控件事件和系统事件,这2类事件发生时均调用用户自定义的函数,系统事件调用的函数是GUISetOnEvent(),控件事件调用的是GUICtrlSetOnEvent()。
OnEvent模式基本语法框架:
While 1
     Sleep(1000)
Wend
Func Ownfunc()
具体代码
Endfunc
Func Ownfunc()
具体代码
Endfunc
例:
#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)
While 1
  Sleep(1000)  ; 不做任何事
Wend
Func ClickOk()
        MsgBox(0,"OK!按钮","你点击了OK!按钮")
EndFunc
Func CloseWindow()
  ;注意: 此时 @GUI_CTRLID 的值将等于 $GUI_EVENT_CLOSE,
  ;而 @GUI_WINHANDLE 则等于 $FirstWindow
  If @GUI_WinHandle=$FirstWindow Then
          MsgBox(0, "窗口事件", "您选择了关闭!正在退出...")
      Exit
   EndIf
EndFunc
4.函数(先跳过)
5.条件与循环语句
    它们都可以多层嵌套。
    利用条件和循环语句可以简化代码并完成复杂的任务。
&#61548;        条件语句
if…then…else
例1:
Global  $Num=2
&#61548;        If @OSVersion="WIN_XP" Then
&#61548;                If @UserName="Administrator" Then
&#61548;                        If $Num=2 Then
&#61548;                                MsgBox(0,"$Num值的判断消息","$Num的值是:" & $Num)
&#61548;                        Else
&#61548;                                MsgBox(0,"$Num值的判断消息","$Num的值不是2")
&#61548;                                Exit
&#61548;                        EndIf
&#61548;                Else
&#61548;                        MsgBox(0,"","不是以Administrator用户身份登陆")
&#61548;                EndIf
&#61548;        Else
&#61548;                MsgBox(0,"","该系统不是WIN_XP系统")
&#61548;        EndIf
例2:
If @OSVersion="WIN_VISTA" Then
&#61548;                MsgBox(0,"","你的系统是WIN_VISTA")
&#61548;            ElseIf @OSVersion="WIN_2003" Then
&#61548;                    MsgBox(0,"","你的系统是WIN_2003")
&#61548;                ElseIf @OSVersion="WIN_XP" Then
&#61548;                MsgBox(0,"","你的系统是WIN_XP")
&#61548;                ElseIf @OSVersion="WIN_2000" Then
&#61548;                        MsgBox(0,"","你的系统是WIN_2000")
&#61548;        Else
&#61548;        EndIf
select…case语句
例1:
Select
&#61548;            Case        @OSVersion="WIN_VISTA"
&#61548;                MsgBox(0,"","你的系统是WIN_VISTA")
&#61548;            Case @OSVersion="WIN_2003"
&#61548;                    MsgBox(0,"","你的系统是WIN_2003")
&#61548;                Case @OSVersion="WIN_XP"
&#61548;                MsgBox(0,"","你的系统是WIN_XP")
&#61548;                Case @OSVersion="WIN_2000"
&#61548;                        MsgBox(0,"","你的系统是WIN_2000")
&#61548;        Case Else
&#61548;        EndSelect
switch…case选择语句
例:
Switch @OSVersion
&#61548;                Case "WIN_VISTA"
&#61548;                        MsgBox(0,"","你的系统是WIN_VISTA")
&#61548;                Case "WIN_2003"
&#61548;                        MsgBox(0,"","你的系统是WIN_2003")
&#61548;                Case @OSVersion="WIN_XP"
&#61548;                        MsgBox(0,"","你的系统是WIN_XP")
&#61548;                Case @OSVersion="WIN_2000"
&#61548;                        MsgBox(0,"","你的系统是WIN_2000")
&#61548;                Case Else
&#61548;        EndSwitch
循环语句(5种)
A.For…Next
语法结构:for <variable>=startvalue to <stop>  [step]
               statement
           next
例:
For $x=10 To 1 Step -1  ;步长默认值为1
&#61548;                SplashTextOn("标题",$x,100,50) ;splashtexton()用于创建一个自定义的文本闪平窗口
&#61548;                Sleep(1000)  ;延迟1秒
&#61548;        Next
&#61548;            ;SplashOff() ;当然是关闭闪屏窗口
&#61548;                MsgBox(0,"闪屏10秒后...","大家好,我是邹国奎,很高兴通过AU3让我们在这里结识!希望我们能成为朋友")
B.For <variable> In <expression>
      statements
      …
  next
该循环常用于“数据的阵列-an array of date”或“COM对象”,如果表达市不是以上两种类型,脚本结束并有错误提示,如果COM对象是一个没有任何元素的空对象集合,脚本会跳出循环执行下面语句。
了解COM Object,首先要了解COM的Object名称及它的properties(属性)和methods(方法)。
例:
Global $Array[5]
&#61548;        $Array[0]="我"
&#61548;        $Array[1]="叫"
&#61548;        $Array[2]="邹"
&#61548;        $Array[3]="国"
&#61548;        $Array[4]="奎"
&#61548;        For $Element In $Array
&#61548;                For $x=3 To 1 Step -1
&#61548;                        SplashTextOn("",$x,100,50)
&#61548;                        Sleep(1000)
&#61548;                Next
&#61548;                SplashOff()
&#61548;                MsgBox(0,"$Array every element is: ",$Element)
&#61548;                WinActivate("$Array every element is: ")
&#61548;                ;ControlClick("$Array every element is: ",$Element,"Button1")
&#61548;                SendKeepActive("$Array every element is: ")
&#61548;                Send("{Enter}")
&#61548;        Next
C.Do
  statements
  … Until <expression>
例:
Dim $Variable=10
&#61548;        Do
&#61548;                SplashTextOn("标题",$Variable,100,50) ;splashtexton()用于创建一个自定义的文本闪平窗口
&#61548;                $Variable -=1
&#61548;                Sleep(1000)  ;延迟1秒
&#61548;        Until $Variable=0
&#61548;        SplashOff()
&#61548;        MsgBox(0,"闪屏10秒后...","大家好,我是邹国奎,很高兴通过AU3让我们在这里结识!希望我们能成为朋友")
D.While <expression>
  statements
  …
  Wend
例:
Dim $Variable=10
&#61548;        While $Variable>0
&#61548;                SplashTextOn("标题",$Variable,100,50) ;splashtexton()用于创建一个自定义的文本闪平窗口
&#61548;                $Variable -=1
&#61548;                Sleep(1000)  ;延迟1秒
&#61548;        WEnd
&#61548;        SplashOff()
&#61548;        MsgBox(0,"闪屏10秒后...","大家好,我是邹国奎,很高兴通过AU3让我们在这里结识!希望我们能成为朋友")
F.With <expression>
  注意expression表达式必须是Object类型
  …
  EndWith
  该语句常被用来简化脚本代码
  例:
  #cs
&#61548;        下列代码没有使用With...EndWith语句
&#61548;        #ce
&#61548;        $Object=ObjCreate("InternetExplorer.Application.1")
&#61548;        $Object.visible=1
&#61548;        $Object.height=768
&#61548;        $Object.width=1024
&#61548;        $Object.navigate("http://www.baidu.com")
用With…EndWith简化后
$Object=ObjCreate("InternetExplorer.Application.1")
&#61548;        With $Object
&#61548;                .visible=1
&#61548;            .height=768
&#61548;            .width=1024
&#61548;                .navigate("http://www.baidu.com")
&#61548;        EndWith




二.进阶部分
1.GUI操作示例讲解
例1:
#include <guiconstants.au3> ;包含了所有与GUI有关系的常量,比如$Gui_Event_Close
#NoTrayIcon ;隐藏脚本运行时在任务栏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("080402070.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")
EndFunc

Func email()
        GUISetState(@SW_HIDE)
        Run("mailto:zougk@petrochina.com.cn")
        Exit
EndFunc


While 1
        Sleep(500)
WEnd

Func  GUIExit()
        Exit
EndFunc
例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)

While 1
        $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
WEnd
例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)

While 1
        $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
Wend
2. 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 $SectorsPerCluster ;每个簇的扇区数
Local $BytesPerSector ;每个扇区的字节数
Local $NumberOfFreeClusters ;自由簇的数量
Local $TotalNumberOfClusters ;总的簇数
$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()
问题:获得的时间是上午时间?
ushort :无符号的16位整数
Word: 无符号的16位整数
int: 32位整数
Ptr: 常规指针(void *)
$SYSTEMTIME=DllStructCreate("ushort wYear;ushort wMonth;ushort wDayOfWeek;ushort wDay;ushort wHour;ushort wMinute;ushort wSecond;ushort 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

评分

参与人数 1贡献 +5 收起 理由
小菜kks + 5 辛苦辛苦

查看全部评分

发表于 2010-6-13 08:11:32 | 显示全部楼层
已经很完整了。
 楼主| 发表于 2010-6-17 15:59:05 | 显示全部楼层
回复 1# newuser

自己顶一下,呵呵!
发表于 2010-6-17 20:54:40 | 显示全部楼层
楼主太有耐心了
发表于 2010-6-18 04:39:06 | 显示全部楼层
喜欢,收藏!
发表于 2010-7-14 17:20:09 | 显示全部楼层
现在还看不懂,唉,悲哀
发表于 2010-7-23 18:32:04 | 显示全部楼层
谢谢分享了!
发表于 2010-7-23 19:33:03 | 显示全部楼层
强,很不错的分享
发表于 2010-7-27 15:47:06 | 显示全部楼层
学习了,谢谢楼主分享!
发表于 2010-7-27 22:04:11 | 显示全部楼层
论坛没找到系统学习AU3的教程,真麻烦。
发表于 2010-7-28 11:22:57 | 显示全部楼层
看不懂 楼主  新手  难
发表于 2010-8-4 07:06:53 | 显示全部楼层
学习了,可是很多看不懂,努力了!
发表于 2010-8-16 20:00:30 | 显示全部楼层
呵呵,楼主好认真
发表于 2010-8-17 09:07:24 | 显示全部楼层
好东西,学习学习!
发表于 2010-8-31 13:59:43 | 显示全部楼层
很经典,我收藏了,多谢楼主
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-6 01:50 , Processed in 0.082901 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表