一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

autoit輕松入門系列

 nxhujiee 2010-03-06
autoit輕松入門系列(一)
 
作者: yonken

前言:據(jù)我了解需要編寫AutoHotkey/AutoIt腳本來實(shí)現(xiàn)自動(dòng)化操作的用戶很多都是網(wǎng)管,其它則可能是一些個(gè)人用戶,他們一般都具有相當(dāng)?shù)募夹g(shù)水平,而且都希望能借助腳本來完成某些以往需要人工操作的重復(fù)性勞動(dòng),但限于語(yǔ)言條件上的限制可能對(duì)官方的幫助文檔有較難理解之處。為方便讀者,我將從最簡(jiǎn)單的說起,每個(gè)示例盡可能同時(shí)給出相應(yīng)的AHK和AU3版本代碼。本文將盡可能用較通俗的語(yǔ)言描述,但并不打算講解語(yǔ)法基礎(chǔ),所以不一定適合新手閱讀。

文中涉及到的AHK/AU3版本:
AutoHotkey
1.0.44 .08
AutoIt
3.1.1
一、關(guān)于腳本
1、什么是腳本?
這是個(gè)非常“流行”的術(shù)語(yǔ)了,通俗而言腳本(Script)一般都是指根據(jù)某種語(yǔ)法規(guī)則編寫的具有特定格式的文本文件。可能大家已經(jīng)聽說過很多種腳本:VBScript、JScript、PHP、ASP、JSP、CGI、CS腳本,甚至游戲外掛腳本。
這些腳本文件都是可執(zhí)行文件,可執(zhí)行相應(yīng)的操作。
AHK 腳本文件擴(kuò)展名:*.ahk
AU3 腳本文件擴(kuò)展名:*.au3


2、腳本和程序的不同?
嚴(yán)格來說,所謂“程序”就是指以各種編程語(yǔ)言(比如說C/C++/C#/Delphi)編寫、由編譯器編譯好后的二進(jìn)制文件,一般就是機(jī)器代碼,可由系統(tǒng)執(zhí)行。而腳本則是只是些純文本文件,包含了各種定義好的命令,這一點(diǎn)很像批處理文件。這樣,我們得出一個(gè)簡(jiǎn)單的結(jié)論,那就是用戶一般無(wú)法獲得“程序”的源代碼,我們只能進(jìn)行反匯編把它逆向還原為匯編語(yǔ)言代碼(或其它),當(dāng)然,也有些“程序”是可以獲得源代碼的(比如Java);腳本則是用戶可直接查看的代碼文件,而AHK/AU3則提供了把腳本文件“轉(zhuǎn)換”成exe文件的方法。


3、腳本如何運(yùn)行?
腳本是“解釋性”的語(yǔ)言,它的運(yùn)行依賴一個(gè)“解釋器”,由這個(gè)解釋器來“翻譯并解釋”腳本的每條命令(或者說代碼),然后執(zhí)行相應(yīng)操作。如果不嚴(yán)格定義的話,HTML和Java都可以認(rèn)為是解釋性語(yǔ)言。AHK/AU3的主程序(分別是AutoHotkey.exe和AutoIt3.exe)就是它們的“解釋器”,上面提到腳本可“轉(zhuǎn)換”成可脫離相應(yīng)的解釋器而獨(dú)立運(yùn)行的exe可執(zhí)行文件,而我們還可以使用相應(yīng)的工具把它們“還原”成腳本文件,由此我們完全可以這么理解:腳本代碼是被“壓縮”到這個(gè)exe文件中,解釋器也是在里面,在運(yùn)行exe時(shí)實(shí)際上是先“解壓”腳本代碼然后運(yùn)行解釋器并解釋該腳本。


4、如何創(chuàng)建腳本?
使用資源管理器的右鍵菜單即可創(chuàng)建相應(yīng)腳本文件,或者新建一個(gè)文本文件后改擴(kuò)展名即可。
5、稍微介紹一點(diǎn)語(yǔ)法規(guī)則?
A)對(duì)AHK而言,每個(gè)內(nèi)建的功能都是以“命令”的形式提供:
Command, param1, param2,…
而AU3則以“函數(shù)”的形式提供:
Function(param1, param2, …)
命令或函數(shù)中被符號(hào)“[”和“]”圍住的參數(shù)是可選參數(shù),表示在使用這些命令或函數(shù)時(shí)可省略它們(不給出具體數(shù)值)。
若某個(gè)參數(shù)含有空格,則最好使用雙引號(hào)圍住該參數(shù)。
B)解釋器自上而下(從第一行到最后一行)“解釋”腳本的每行語(yǔ)句,除非遇到“Return”、“Goto”、“Gosub”、“Exit”等語(yǔ)句、函數(shù)、熱鍵或其它能使腳本“跳”到某個(gè)標(biāo)識(shí)符的條件成立。
C)關(guān)鍵字和標(biāo)識(shí)符(包括變量名、命令名、函數(shù)名等)都不區(qū)分大小寫。


 

======================================================================
 
 
autoit輕松入門系列(二)
2008-11-11 18:37
二、運(yùn)行程序或打開文件
1、運(yùn)行程序
Run t命令或者函數(shù)用來運(yùn)行外部可執(zhí)行文件,AHK還可利用它來直接打開文件。
AHK:
Run, 目標(biāo)文件 [, 工作目錄, Max|Min|Hide|UseErrorLevel, 輸出PID變量]
AU3:
Run ( "文件名" [, "工作目錄" [, 標(biāo)志]] )
【示例 2.1.1 】
AHK:
Run, Notepad.exe
AU3:
Run("Notepad.exe")
上面的示例中都沒有給出程序“Notepad.exe”的路徑,為什么仍能執(zhí)行?這是因?yàn)樗鼈兌紩?huì)自動(dòng)在腳本所在目錄下搜尋目標(biāo)文件,如有則運(yùn)行,否則就到系統(tǒng)文件夾(%PATH%)中搜尋。
注意:
A)某些程序必須給定“工作目錄”才能成功運(yùn)行!
B)給出完整的文件路徑有助于輕微提高程序的可靠性。
C)AHK的Run命令可以用來運(yùn)行程序和直接打開文件,而AU3的Run函數(shù)則只能用來運(yùn)行程序(可執(zhí)行文件)或傳遞參數(shù)讓某個(gè)程序打開目標(biāo)文件。
當(dāng)然,運(yùn)行程序的功能還不僅僅是這么簡(jiǎn)單,我們還可以指定運(yùn)行程序的初始狀態(tài),比如讓運(yùn)行的記事本窗口以最大化狀態(tài)顯示(或者最小化、隱藏):
【示例 2.1.2 】
AHK:
Run, Notepad.exe, , Max
AU3:
Run("Notepad.exe", "", @SW_MAXIMIZE)

2、打開文件
前面已經(jīng)提到,AHK的Run命令可以直接打開文件,而AU3的Run函數(shù)則只能用來運(yùn)行程序,因此在打開文件的方式上有點(diǎn)不同:AHK腳本中可直接給出目標(biāo)文件,而AHK將自動(dòng)運(yùn)行該文件的關(guān)聯(lián)程序來打開它;而AU3則必須由用戶自己傳遞參數(shù)讓某個(gè)程序打開目標(biāo)文件。
【示例 2.2.1 】
AHK:
Run, MyFile.txt
Run, Notepad.exe MyFile.txt
AU3:
Run("Notepad.exe MyFile.txt")

3、以命令行形式運(yùn)行程序
可以考慮運(yùn)行系統(tǒng)的命令行解釋器(cmd.exe/command.com),然后指定要執(zhí)行的命令并傳遞參數(shù)。
假設(shè)我們要執(zhí)行命令“dir C:\WINDOWS\system 32” ,用以列出指定目錄的所有文件及子目錄。
【示例 2.3.1 】
AHK:
Run, %ComSpec% /k dir C:\WINDOWS\system32
AU3:
Run(@ComSpec & " /k dir C:\WINDOWS\system32")
注意:
A)ComSpec是腳本內(nèi)建的用以指示命令行解釋器位置的變量或宏。
B)/k 參數(shù)表示“執(zhí)行字符串指定的命令但保留”,若改為 /c 則表示“執(zhí)行字符串指定的命令然后終斷”。對(duì)此比較直觀的解釋是 /k 將在執(zhí)行完命令后保留命令提示窗口,而 /c 則將在執(zhí)行完命令之后關(guān)閉命令提示窗口。
C)符號(hào)“&”是AU3定義的字符串連接符。

4、特殊應(yīng)用
A)打開網(wǎng)頁(yè)
【示例 2.4.1 】

AHK:
Run, www.
Run, %A_ProgramFiles%\Internet Explorer\IEXPLORE.EXE www.
AU3:
Run(@ProgramFilesDir & "\Internet Explorer\IEXPLORE.EXE www.")
B)打開特殊文件夾
系統(tǒng)的某些特殊文件夾被定義了相應(yīng)的CLSID(請(qǐng)查看幫助文檔),我們可利用它來打開相應(yīng)的文件夾,比如打開回收站:
【示例 2.4.2 】

AHK:
Run ::{645ff040-5081-101b -9f 08-00aa 002f 954e}
AU3:
不適用!
C)運(yùn)行控制面板工具
微軟已經(jīng)為我們提供了通過命令行打開控制面板某個(gè)工具或項(xiàng)目的方式,比如打開系統(tǒng)屬性窗口:
【示例 2.4.3 】

AHK:
Run control sysdm.cpl
AU3:
Run("control sysdm.cpl")
關(guān)于訪問控制面板項(xiàng)目的詳細(xì)介紹請(qǐng)查看此文:文章地址。
D)指定搜索位置并打開搜索窗口
假設(shè)我們要打開一個(gè)搜索窗口,而且要指定搜索位置,比如C:\:
【示例 2.4.4 】

AHK:
Run, find C:\
AU3:
不適用!
E)顯示指定文件的屬性窗口
假設(shè)我們要打開文件“MyFile.txt”的屬性窗口,則使用關(guān)鍵字properties 然后接上目標(biāo)文件即可:
【示例 2.4.5 】

AHK:
Run, properties MyFile.txt
AU3:
不適用!
注意:AHK在退出前將自動(dòng)關(guān)閉打開的屬性窗口!
F)用“資源管理器”打開指定文件夾
我們知道使用Run, explorer C: 或Run("explorer C:") 即可打開指定的文件夾,可是有時(shí)候我們需要在資源管理器中打開它,這時(shí)可使用關(guān)鍵字 explore:
【示例 2.4.6 】

AHK:
Run, explore C:
AU3:
run("explorer.exe /e,C:\")
G)打印指定文件
要打印指定文件,可使用關(guān)鍵字 print:
【示例 2.4.7 】

AHK:
Run, print MyFile.txt
AU3:
不適用!






F)用“資源管理器”打開指定文件夾
我們知道使用Run, explorer C: 或Run("explorer C:") 即可打開指定的文件夾,可是有時(shí)候我們需要在資源管理器中打開它,這時(shí)可使用關(guān)鍵字 explore:
【示例 2.4.6 】

AHK:
Run, explore C:
AU3:
不適用!


run("explorer.exe /e,d:\")

這樣就可以做到你說的樹狀型打開目標(biāo)文件夾了!
 
===============================================================================
 
 
autoit輕松入門系列(三)
 
注意:窗口標(biāo)題和窗口文本參數(shù)總是對(duì)大小寫敏感的。
1、等待窗口系列命令/函數(shù)
AHK和AU3都提供了用法類似的一組窗口等待命令/函數(shù):WinWait/WinWaitActive/WinWaitClose。
它們分別用于等待窗口出現(xiàn)、等待窗口被激活、等待窗口被關(guān)閉。由于這些命令/函數(shù)的參數(shù)類似,現(xiàn)僅以WinWait為例說明。
AHK:
WinWait [, 窗口標(biāo)題, 窗口文本, 超時(shí)時(shí)間, 排除標(biāo)題, 排除文本]
AU3:
WinWait ( "窗口標(biāo)題" [, "窗口文本" [, 超時(shí)時(shí)間]] )
WinWait 的作用是在目標(biāo)窗口出現(xiàn)之前不再執(zhí)行后面的所有語(yǔ)句。
假設(shè)我們要運(yùn)行記事本程序,并在其窗口出現(xiàn)時(shí)提示用戶:
【示例 3.1.1 】

AHK:
Run Notepad
WinWait, 無(wú)標(biāo)題 - 記事本
MsgBox 記事本窗口已被打開!
AU3:
Run("Notepad")
WinWait("無(wú)標(biāo)題 - 記事本")
MsgBox(0, "", "記事本窗口已被打開!")

2、激活窗口相關(guān)命令/函數(shù)
讓目標(biāo)窗口成為活動(dòng)窗口的辦法就是激活它,可用的命令/函數(shù)是WinActivate:
AHK:
WinActivate [,窗口標(biāo)題, 窗口文本, 排除標(biāo)題, 排除文本]
AU3:
WinActivate ( "窗口標(biāo)題" [, "窗口文本"] )

3、關(guān)閉窗口
關(guān)閉窗口有兩種方式,一種是正常的關(guān)閉窗口(WinClose),另一種則是強(qiáng)行關(guān)閉窗口(WinKill):
AHK:
WinClose/WinKill [,窗口標(biāo)題, 窗口文本, 超時(shí)時(shí)間,, 排除標(biāo)題, 排除文本]
AU3:
WinClose/WinKill ( "窗口標(biāo)題" [, "窗口文本"] )

現(xiàn)在我們已經(jīng)可以實(shí)現(xiàn)一個(gè)比較簡(jiǎn)單的功能了,比如我們可以打開系統(tǒng)屬性窗口并等待其出現(xiàn),窗口出現(xiàn)后激活它,接著等待3秒再關(guān)閉它:
【示例 3.1.2 】

AHK:
Run, Sysdm.cpl
WinWait, 系統(tǒng)屬性
WinActivate, 系統(tǒng)屬性
WinWaitActive, 系統(tǒng)屬性
Sleep, 3000
WinClose, 系統(tǒng)屬性
WinWaitClose, 系統(tǒng)屬性
AU3:
Run("Control Sysdm.cpl")
WinWait("系統(tǒng)屬性")
WinActivate("系統(tǒng)屬性")
WinWaitActive("系統(tǒng)屬性")
Sleep(3000)
WinClose("系統(tǒng)屬性")
WinWaitClose("系統(tǒng)屬性")

建議:如果程序中頻繁地出現(xiàn)要用到這些窗口標(biāo)題的地方,會(huì)帶來一個(gè)問題:腳本的可讀性,也許你會(huì)想,這不是很直觀嗎?可問題是如果這個(gè)重復(fù)出現(xiàn)的窗口標(biāo)題是個(gè)很長(zhǎng)的字符串呢?這將嚴(yán)重影響整個(gè)代碼的排版美觀。而且我們也無(wú)從了解這些窗口標(biāo)題的“來頭”,不知道這個(gè)窗口標(biāo)題究竟是怎么來的。而如果我們定義一個(gè)變量(假設(shè)變量名是“AppWindow1”)保存這個(gè)窗口標(biāo)題,我們就能在命令/函數(shù)中用變量來表示它,這樣就達(dá)到了讓代碼用意更清晰一點(diǎn)的目的。另外,就算目標(biāo)軟件因某些原因(比如升級(jí))而改變了它的窗口標(biāo)題,我們也能很方便地作出修改。

4、更準(zhǔn)確的標(biāo)識(shí)窗口的方法(主要針對(duì)AHK腳本)
程序在運(yùn)行時(shí)起碼會(huì)有一個(gè)進(jìn)程,如果能獲得這個(gè)進(jìn)程ID就能在一定程度上保證對(duì)窗口的準(zhǔn)確標(biāo)識(shí)。另外,每個(gè)窗口都有定義窗口類名(Class,比如說記事本窗口的類名就是Notepad),所以我們可以以此排除與目標(biāo)窗口不同的其它窗口類。其實(shí),我們還有一個(gè)更準(zhǔn)確的方法:
每個(gè)窗口(包括控件在內(nèi))都被Windows指派了一個(gè)可區(qū)別于其它窗口的唯一的標(biāo)識(shí)符(ID),我們稱之為窗口句柄(HWND)。
直接給定窗口標(biāo)題來表示窗口的一個(gè)缺點(diǎn)就是無(wú)法保證在腳本運(yùn)行的過程中始終以該窗口為操作目標(biāo),因?yàn)樵谶@個(gè)過程中很有可能會(huì)有其它“同名”窗口(或者說滿足匹配條件的窗口)出現(xiàn),而如果我們使用這個(gè)標(biāo)識(shí)符來表示窗口自然就能保證命令/函數(shù)的操作窗口總是同一個(gè)窗口了。
我們先來了解一下獲得窗口句柄的命令/函數(shù):
AHK:
WinGet[, 輸出變量, ID, 窗口標(biāo)題, 窗口文本, 排除標(biāo)題, 排除文本]
AU3:
WinGetHandle ( "窗口標(biāo)題" [, "窗口文本"] )
其中WinGet獲得的窗口ID將通過“輸出變量”返回,而WinGetHandle的返回值就是獲得的窗口ID。

我們?cè)谶M(jìn)行自動(dòng)化操作時(shí)是要先運(yùn)行某個(gè)程序,如何獲得這個(gè)程序成功運(yùn)行后顯示的窗口句柄?一個(gè)比較保險(xiǎn)的辦法是先獲得這個(gè)程序的進(jìn)程ID,然后根據(jù)這個(gè)進(jìn)程ID獲得它的窗口句柄,AHK支持使用進(jìn)程ID作為窗口標(biāo)題使用;但AU3不支持這樣使用,只能先獲得該窗口的類名再根據(jù)該類名來獲得窗口句柄(不夠保險(xiǎn)):
【示例 3.1.3 】
AHK:
Run, NotePad, , , ThisPID
WinWait, ahk_pid %ThisPID%

;這里的ahk_pid表明跟在后面的變量是進(jìn)程ID
WinGet, ThisID, ID, ahk_pid %ThisPID%

;ThisID將保存獲得的窗口句柄
AU3:

Opt("WinTitleMatchMode", 4)
Run("Notepad")
$handle = WinGetHandle("classname=Notepad")
現(xiàn)在暫且先忘記了AU3吧,因?yàn)樗拇翱诤瘮?shù)一般都不支持使用窗口句柄作為(窗口標(biāo)題)參數(shù)。
至于如何在AHK中使用窗口句柄,簡(jiǎn)單的說,凡是有“窗口標(biāo)題”參數(shù)的命令就可以用窗口句柄來代替,比如:
【示例 3.1.4 】
AHK:
Run, Notepad, , , ThisPID

;先獲得運(yùn)行的記事本程序的進(jìn)程ID
WinWait, 無(wú)標(biāo)題 - 記事本 ahk_pid %ThisPID%

;等待該進(jìn)程窗口的出現(xiàn)
WinGet, ThisHWND, ID, 無(wú)標(biāo)題 - 記事本 ahk_pid %ThisPID%

;獲得窗口句柄
WinActivate, ahk_id %ThisHWND%
;這里的ahk_id表明跟在后面的變量是窗口句柄
WinWaitActive, ahk_id %ThisHWND%
Sleep, 3000
WinClose, ahk_id %ThisHWND%
WinWaitClose, ahk_id %ThisHWND%
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产乱久久亚洲国产精品| 日本av在线不卡一区| 日韩人妻中文字幕精品| 麻豆国产精品一区二区三区| 亚洲内射人妻一区二区| 亚洲午夜精品视频在线| 粉嫩内射av一区二区| 亚洲免费黄色高清在线观看| 国产精品香蕉免费手机视频| 国产视频福利一区二区| 免费人妻精品一区二区三区久久久| 国产欧洲亚洲日产一区二区| 插进她的身体里在线观看骚| 翘臀少妇成人一区二区| 91人人妻人人爽人人狠狠| 欧美日韩免费黄片观看| 国产日韩精品激情在线观看| 欧美午夜视频免费观看| 香蕉久久夜色精品国产尤物| 久久热在线视频免费观看| 精品国产亚洲av成人一区| 丝袜诱惑一区二区三区| 亚洲一级二级三级精品| 日本人妻的诱惑在线观看| 国产精品免费不卡视频| 在线观看视频国产你懂的| 一级片二级片欧美日韩| 国产伦精品一一区二区三区高清版 | 日韩国产欧美中文字幕| 中文字幕亚洲精品乱码加勒比| 一区二区三区日本高清| 国产女高清在线看免费观看| 亚洲视频一区二区久久久| 欧美日韩亚洲巨色人妻| 国产精品人妻熟女毛片av久| 婷婷亚洲综合五月天麻豆| 亚洲内射人妻一区二区| 亚洲国产精品久久琪琪| 国产午夜福利片在线观看| 欧美性猛交内射老熟妇| 最新日韩精品一推荐日韩精品|