autoit GUI相關知識

來源:互聯網
上載者:User

GUI 的概念

GUI 可由一個或多個 視窗 組成,這些視窗又帶有一個或多個控制項。GUI是靠“事件驅動”實現與使用者的互動的,比如像點擊按鈕這樣的動作就會引發一個事件。程式在空閑狀態時等待事件的發生,捕捉到事件時則根據事件執行相關操作。您可以猜想自己在門邊等郵差(一直坐在那兒直到有信被送進來為止),等郵差把信送來了,您就要閱讀該信並決定下一步做什麼,這就跟GUI的原理一樣了:您等待的是郵差,而GUI則等待事件,

當然,在GUI(指程式的介面)運行時您也可以選擇要做的其它任務,比如使用GUI函數建立一個自動更新的動態進度條,同時還可執行其它複雜的任務。

GUI 的控制項

所有使用者應該都對控制項非常瞭解了,在視窗上能被點擊或進行其它互動的部分都是控制項的一種。AutoIt 可建立的控制項類型有如下幾種(您肯定已在其它Windows程式中見過它們了):

  • Label
  • 純文字控制項
  • Button
  • 按鈕
  • Input
  • 單行編輯框,可供輸入文字
  • Edit
  • 多行編輯框,可供輸入文字
  • Checkbox
  • 方框按鈕,可被選中或取消選中
  • Radio
  • 圓形按鈕(通常幾個一組,每次只能啟用/選中其中一個)
  • Combo
  • 組合框,帶有下拉式清單
  • List
  • 列表框
  • Date
  • 日期選擇
  • Pic
  • 圖片
  • Icon
  • 表徵圖
  • Progress
  • 進度條
  • Tab
  • 標籤,每個標器都可包含一組控制項
  • UpDown
  • 可附加到輸入型控制項上
  • Avi
  • 顯示 AVI 格式的剪輯
  • Menu
  • 位於視窗頂部的菜單
  • ContextMenu
  • 當在視窗上點擊右鍵時出現的菜單
  • TreeView
  • 類似於Windows的資源管理員(樹型視圖)
  • Slider
  • 類似於Windows的音量控制項(滑動條)
  • ListView
  • 按列顯示資訊的控制項(列表視圖)
  • ListViewItem
  • ListView控制項的項目
  • Dummy
  • 虛擬使用者控制項

    下面是一個單視窗的GUI樣本,它包含了許多被AutoIt支援的控制項。從中我們可以看到 AutoIt 確實可以建立內容非常豐富的GUI!

    使用 GUICtrlCreate... 等函數即可建立控制項。在建立時函數會返回 控制項ID。關於控制項ID有幾個注意事項:

  • 控制項ID是一個正數(意即該數大於0)
  • 每個控制項ID都具有唯一性(即使有多個視窗存在)。
  • 控制項ID可通過 AutoIt Window Info 獲得。

    GUI 基本函數

    下面這些就是可用於建立GUI的函數。但這些都是比較初級的應用,如果您已經準備好建立更進階的GUI,則還有其它進階的函數。

    函數 解釋
    GUICreate 建立一個視窗。
    GUICtrlCreate... 建立各種控制項。
    GUISetState 顯示或隱藏視窗。
    GUIGetMsg 通知GUI檢測是否有事件發生(僅用於訊息迴圈)。
    GUICtrlRead 讀取控制項資料。
    GUICtrlSetData 設定/更改 控制項的資料。
    GUICtrlSet... 對控制項進行各種屬性設定(顏色、風格等等)。

    在您著手編寫任何GUI指令碼之前別忘了先包含檔案 GUIConstants.au3 到指令碼開頭位置(該檔案包含了在編寫GUI程式時要用到的所有變數和常量)。

    讓我們先來建立一個視窗吧,把它命名為“您好”,設定其長寬分別為200和100個象素。當視窗被建立時它是被隱藏的,所以我們還要先把它給“show(顯示)”出來。

    #include <GUIConstants.au3>

    GUICreate("您好", 200, 100)
    GUISetState(@SW_SHOW)
    Sleep(2000)

    如果運行上面的指令碼您會看到出現一個視窗並在兩秒後消失。看來還不是很有意思哦...那讓我們嘗試增加一些文字和一個確定按鈕到視窗上吧!我們把文字加到 30, 10 這個位置並把按鈕放到 70, 50 這個位置,按鈕寬度設為60個象素。

    #include <GUIConstants.au3>

    GUICreate("您好", 200, 100)
    GUICtrlCreateLabel("最近過得怎樣?", 30, 10)
    GUICtrlCreateButton("還OK吧", 70, 50, 60)
    GUISetState(@SW_SHOW)
    Sleep(2000)

    好,現在看來還不錯。但是怎樣使這個GUI能響應我們點擊按鈕的事件呢?這時我們必須先決定究竟如何處理事件:要麼通過 訊息迴圈(MessageLoop) 要麼通過 OnEvent 函數。

    GUI 事件模式

    正如上面所提到的那樣,我們有兩種基本的GUI模式:訊息迴圈(MessageLoop)模式和 OnEvent 模式。這兩種模式是響應GUI事件的不同的實現方式。具體選擇哪一種模式主要看您的 個人喜好 或者您想要建立的GUI類型。這兩種模式都能用於建立任何您想要的GUI,只不過某些時候使用其中一個會比另外一個要好用些。

    訊息迴圈是預設的模式。若要切換為 OnEvent 模式請使用 Opt("GUIOnEventMode", 1) 語句。

    訊息迴圈模式(預設)

    在訊息迴圈模式下,指令碼大部分時間都在執行一個周期非常短的迴圈,這個迴圈通知GUI使用 GUIGetMsg (截獲訊息)函數。當某個事件發生時 GUIGetMsg 函數把訊息作為返回數值返回(比如某個按鈕被按下、GUI被關閉,等等)。

    在此模式下,只有當我們頻繁地使用 GUIGetMsg 函數時才有可能接收到事件,因此您必須確保在每一秒內都有數次調用該函數,否則您的 GUI 將無法響應事件。

    這一模式最適合用於那些以 GUI 為重點的指令碼中,並且您最關心的就是等待使用者事件。

    如需瞭解關於 訊息迴圈模式 的更詳細的解釋請到 此頁 查看。

    OnEvent 模式

    在OnEvent模式下,指令碼並不需要頻繁地要求GUI檢查是否有任何事件發生(並根據返回資訊處理事件),而是僅當某個事件發生時GUI才臨時性暫停指令碼並調用一個使用者預定義的函數來處理該事件。例如,假定使用者點擊了按鈕1則GUI將暫停主指令碼並調用某個預定義的使用者函數來處理按鈕1事件。當該函數完成處理操作後才回到主指令碼繼續執行。這個模式比較類似 Visual Basic 的表單方法。

    這一模式最適合用於那些 GUI 處於第二重要地位的指令碼中,並且您的指令碼需要優先執行其它任務。

    如需瞭解關於 OnEvent模式 的更詳細的解釋請到 此頁 查看。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.