:::
顯示具有 AutoIt 標籤的文章。 顯示所有文章

用GitHub Actions的Windows虛擬機器來編譯AutoIT / Compile AutoIT on the Windows Runer in GitHub Actions

布丁布丁吃布丁

用GitHub Actions的Windows虛擬機器來編譯AutoIT / Compile AutoIT on the Windows Runer in GitHub Actions

2023-0208-011006.png

GitHub Actions能跑Ubuntu,那能用它來跑其他的作業系統嗎?答案是肯定的。

(more...)

用AutoIT撰寫Windows的自動化腳本 / AutoIT: Powerful Script Language for Windows

布丁布丁吃布丁

用AutoIT撰寫Windows的自動化腳本 / AutoIT: Powerful Script Language for Windows

2023-0119-235043.png

如果要寫Windows上可以執行的exe檔案,你會用什麼程式語言呢?

(more...)

打造獨特的EXE檔案:在AutoIt編譯時加上圖示 / Compile AutoIt into an EXE file with specific Icon

布丁布丁吃布丁

打造獨特的EXE檔案:在AutoIt編譯時加上圖示 / Compile AutoIt into an EXE file with specific Icon

5-EXE_AutoIt_Compile_AutoIt_into_an.png

哈嚕~~我是非常喜歡為各個網站加入特製腳本跟樣式表、讓網站用起來更順手的布丁。今天要來介紹的是如何為AutoIt編譯的exe檔案指定特定圖示的做法。做法很簡單,只要在開頭加上「#pragma compile(Icon, 'icon.ico')」語法即可。讓我們以archive-util-7z.au3為例子,看看怎麽在AutoIt程式裡面加上指定圖示的語法吧。

(more...)

如何取得AutoIt回傳結果?如何編譯AutoIt命令列應用程式 / How to compile AutoIT as a Console Application

布丁布丁吃布丁

如何取得AutoIt回傳結果?如何編譯AutoIt命令列應用程式 / How to compile AutoIT as a Console Application

簡報2

AutoIt一般常作為自動操作Windows應用程式的圖形化應用程式(GUI Windows application),例如自動安裝檔。但如果要讓其他程式取得AutoIt的執行結果,那就要把AutoIt編譯為命令列應用程式(console application)。讓我們來看看怎麼做吧。

(more...)

直接執行Python腳本:Python Caller / Running a Python Script Directly in Windows: Python Caller

直接執行Python腳本:Python Caller / Running a Python Script Directly in Windows: Python Caller

image

繼前一篇的RScript Caller之後,這次要來介紹的是直接執行Python的Python Caller。這隻程式的主要目的是提供讓Python腳本檔案(副檔名為.py)直接關聯到Python-Caller.exe,這樣就能在檔案總管中點兩下直接執行,然後在執行完畢後暫停,讓開發者可以看看執行結果。以下就是Python Caller的下載、設定與使用介紹。因為做法跟RScript Caller蠻像的,所以兩篇內容會看起來很像就是了。

(more...)

以AutoIT實作Weka預測執行檔 / Making Predictions with Weka Executable File: an AutoIT Application

以AutoIT實作Weka預測執行檔 / Making Predictions with Weka Executable File: an AutoIT Application

image

繼前一篇使用指令列來操作Weka進行預測之後,這一篇就要用AutoIT來操作Weka進行預測,並以AutoIT將預測結果傳送給其他程式,例如傳送到Google表單中記錄預測結果。

(more...)

最容易整合的指令列播放器:MPV使用說明 / Customizing a Media Player for Your Application: MPV Player Usage

最容易整合的指令列播放器:MPV使用說明 / Customizing a Media Player for Your Application: MPV Player Usage

image

最近常常要在Windows桌面環境中設計數位學習教學活動。有時候我們會需要使用全螢幕播放影片、聲音或圖片,甚至需要一張全螢幕的黑幕或白幕當背景。這種時候開放原始碼高度可自訂化的MPV全能播放器就能夠順利派上用場。搭配AutoIT高度自訂腳本,我們就能整合多個不同的Windows應用程式來完成一個豐富的教學活動。

(more...)

不囉嗦,直接開啟壓縮檔中的檔案:Archive File Opener / Open Files in an Archive File Directly: Archive File Opener

不囉嗦,直接開啟壓縮檔中的檔案:Archive File Opener / Open Files in an Archive File Directly: Archive File Opener

image

一般來說,要檢查一個壓縮檔中的檔案時,必須先經過壓縮檔的程式、解壓縮、然後才能看到檔案內容,這樣才能真的打開檔案。可是這樣的過程實在是太煩人了。我用AutoIt7-Zip做了Archive File Opener,它可以讓我們直接開啟壓縮檔中所有檔案。我們不是要看壓縮檔,而是要看裡面的內容,不囉嗦直接用吧!

(more...)

從瀏覽器連結開啟Windows本機的檔案:System Protocol / Open Windows Local File with A Link in Brower: System Protocol

從瀏覽器連結開啟Windows本機的檔案:System Protocol / Open Windows Local File with A Link in Brower: System Protocol

image

作業系統中可以設定捷徑開啟網頁(請參考「自製網頁應用程式!使用Chrome的命令列選項app來製作網頁應用程式捷徑」這篇),那麼網頁能不能反過來開啟作業系統裡面的檔案呢?答案就是Registering an Application to a URI Scheme,在Windows裡面將應用程式登錄為指定通訊協定(Protocol)。我參考從網頁呼叫使用者電腦應用程式的寫法,製作了System Protocol程式。它可以讓我們的電腦用「sp://"c:\file.doc"」來開啟本機檔案的連結方式,甚至還可以傳遞參數。但是這個方法會為作業系統大開後門,使用的時候必須先瞭解它的安全性風險。

(more...)

用Acrobat Pro把PDF轉換成HTML:AutoIt一鍵轉換方案 / How to convert a PDF to HTML with Acrobat Pro? An AutoIT solution

用Acrobat Pro把PDF轉換成HTML:AutoIt一鍵轉換方案 / How to convert a PDF to HTML with Acrobat Pro? An AutoIT solution

image

為了使用Acrobat Pro能夠正確地將PDF轉換成HTML網頁的功能,我用AutoIt寫了一個自動操作腳本的exe執行檔,可以將指定的PDF轉換成HTML檔案。

(more...)

立刻取得檔案路徑!傳送到「filepath-to-clipboard」 / Copy Filepath in “Send to”: filepath-to-clipboard

布丁布丁吃布丁

立刻取得檔案路徑!傳送到「filepath-to-clipboard」 / Copy Filepath in “Send to”: filepath-to-clipboard

image

我很喜歡Q-Dir的「複製路徑」功能,它可以讓我快速取得檔案的路徑。後來想想,其實我也能用AutoIt做一個類似的功能出來,還能加在Windows的「傳送到」選單裡面,這樣可以讓每個程式都能用「複製路徑」了。以下就是介紹我做的filepath-to-clipboard.exe

(more...)

桌面離線也可動作的AutoIt指令:ControlSend跟ControlClick

桌面離線也可動作的AutoIt指令:ControlSend跟ControlClick

image

使用AutoIt撰寫的機器人可以幫Windows環境下的使用者省下很多手動操作的工作。但是有時候我們不在電腦前,也想要利用AutoIt來在特定時間排程進行工作,這時候就不能用常見的SendMouseClick函數(function)指令,而應該要用ControlSendControlClick等Control系列的函數,直接對要被控制的對話視窗送出指令。


桌面離線的情況

切換使用者

image

Windows除了「關機」、「登出」之外,還可以在不關閉現在執行中的程式的情況下,切換成其他使用者,讓其他使用者使用。

上圖是以Windows 7為例,Windows XP也有這個選項,在「開始 > 登出 > 切換使用者」裡面。

遠端桌面連線中斷

image

另一種情況是遠端桌面連線中,不進行登出或關機,而是直接將遠端桌面連線關閉。這樣子執行中的程式依舊會繼續執行。

AutoIt的Send跟MouseClick無法作用

以前我使用AutoIt來做自動安裝VirtualBox機器人的時候,是在桌面連線的前提下,讓AutoIt模仿使用者的動作,進行Send(模擬鍵盤指令輸入)MouseClick(模擬滑鼠按鍵輸入)的動作。

但是在桌面離線的情況下,AutoIt的Send跟MouseClick就會失效,這時候必須改用另外更精確的指定Control系列函數才行。

使用方法

AutoIt中以Control開頭的函數有十幾種,對製作自動操作機器人的我來說,主要使用ControlSend跟ControlClick這兩種。這兩種的使用方法都很類似,以下進一步說明:

ControlSend

對指定視窗中的指定元件輸出鍵盤的指令。

ControlSend ( "title", "text", controlID, "string" [, flag] )
  • "title":要控制的視窗標題。不必輸入完整標題,AutoIt只有開頭部分的文字也能搜尋得到。
  • "text":要控制的視窗內文。如果沒有內文,可以輸入空字串""
  • controlID:要控制的元件代號。稍後介紹。
  • "string":要輸入的指令。指令的內容詳細請參考Send
  • flag:如何處理要輸入的指令。flag = 0(預設),允許指令包含特殊字元;flag = 1,指令以原始資料輸入。這也跟Send是一樣的。
ControlClick

對指定視窗中的指定元件輸出滑鼠點擊的指令。

ControlClick ( "title", "text", controlID [, button [, clicks [, x [, y ]]]] )

"title""text"、controlID跟ControlSend是一樣的。其實Control系列函數幾乎都會有這些參數。

以下是其他選擇性的參數。

  • button:模擬滑鼠輸出的指令,預設是"left"(滑鼠左鍵),詳細按鍵列表請看ControlClick的說明
  • clicks:要點選的次數,預設是1次。
  • x:要點選元件的水平位置,預設是"center"(中間)。
  • y:要點選元件的垂直位置,預設是"center"(中間)。

擷取controlID

剛剛提到了Control系列函數中都需要有controlID參數。controlID並不像是title或text可直接從表面觀察判斷,它是軟體設計時的內部代號,對於初次使用Control系列函數的人來說,常常不知道該如何取得controlID。對於這個無法直接觀察的controlID,可以使用AutoIt v3 Window Info工具來擷取。

AutoIt v3 Window Info位置

AutoIt v3 Window Info會隨著AutoIt一同安裝,位於安裝目錄底下。預設安裝位置為:

C:\Program Files\AutoIt3\Au3Info.exe

C:\Program Files\AutoIt3\Au3Info_x64.exe

其中Au3Info_x64.exe是給64位元的作業系統使用的。

擷取controlID方法

image

開啟AutoIt v3 Window Info(以下簡稱Au3Info)的主視窗之後如上圖。Au3Info會自動維持最上層的狀態。

image

接著請打開你要指定的視窗,在此我以Windows的「我的文件」對話視窗為例。請把Au3Info中的「Finder Tool」準心拖曳到你要觀察的對話視窗元件,如上圖,我把Finder Tool拖曳到了「我的文件」中的網址輸入元件上,而原本沒有任何資料的Au3Info,這時也顯示出了元件的詳細資料。

image

在Au3Info眾多資料中,我們需要注意的是Control分頁中的Advanced Mode的值,這就是controlID參數。在此例中,「我的文件」的網址輸入元件,其controlID為"[CLASS:Edit; INSTANCE:1]"(請注意大小寫跟空白喔)。

從Send修改成ControlSend的範例

為了讓大家更好理解Send跟ControlSend的差異,在這邊舉兩個例子來說明。

Send的例子

以下是利用Send來開啟「我的文件」,並將網址切換到「桌面」的例子:

Run("explorer.exe")
WinWait("我的文件")
If Not WinActive("我的文件") Then WinActivate("我的文件")
Send("{ALTDOWN}d{ALTUP}")
Send("{SHIFTDOWN}{END}{SHIFTUP}桌面{Enter}")

這支程式第一行是開啟"explorer.exe",預設啟動時會打開「我的文件」。第二行跟第三行則是等待「我的文件」啟動,並且將它置於焦點。第四行則是跳到網址輸入元件,第五行輸入桌面,最後就能跳到桌面的畫面。

這個例子在桌面連線的情況下可以順利執行,但在桌面離線的情況下,第四行開始將會無法順利執行。

ControlSend的例子

以下是利用ControlSend來開啟「我的文件」,並將網址切換到「桌面」的例子:

Run("explorer.exe")
WinWait("我的文件")
If Not WinActive("我的文件") Then WinActivate("我的文件")
ControlSend("我的文件", "", "[CLASS:Edit;INSTANCE:1]", "{SHIFTDOWN}{END}{SHIFTUP}桌面{Enter}")

這個例子的功能跟前面的例子大致上相同。只有第四行之後改用ControlSend來輸入指令,因此它不僅能夠在桌面連線時執行,也能在桌面離線下執行。


結語

image

AutoIt的網站不知不覺地更改了網頁設計,害我以為我找錯網站orz

總之,未來有機會再繼續挖掘AutoIt的價值吧。

(more...)