2009年5月9日 星期六

包山包海的 AutoHotKey (2) -- 自動化軟體操作

以下是幾個『用 AutoHotkey 自動化軟體操作』的例子,

  • 呼叫視窗』、『送按鍵』……
  • 控制 其他程式的 視窗控件 (window control) ……
  • 使用 PostMessage 方式呼叫, 並且找到『隱藏文字』……

.

用 AutoHotKey 來自動化 DVD Shrink 的操作

Hack Attack: One-click DVD rips (lifehacker.com, 2006-10-31)
autohotkey 原始碼 (lifehacker.com)

主要做法是『呼叫視窗』、『送按鍵』……

……
WinWait, DVD Shrink 3.2 - E:\
WinActivate, DVD Shrink 3.2 - E:\
Sleep 500
Send, {Ctrl Down}
Send, {b}
Send, {Ctrl Up}
Sleep 600
IfWinExist, ……
……

類似的自動化, 可以使用 AutoHotKey 提供的 AutoScriptWriter 來『錄製』腳本

.

自動化控制其他程式的視窗控件

在需要『執行精準動作』或是『搭配邏輯判斷』的時候, 就需要用 視窗控件 (window control) 的方式來寫腳本, 也就是 AutoHotKey 的 Control, ControlGet, ControlGetText, ControlSetText, ControlSend, ControlClick …… 等指令。

最近我寫的一個腳本, 有如下的功能

image

 

  • 將兩個檔案『拖放』到 .ahk 腳本 上面,
    當做參數 (%1%, %2%)

IfWinNotExist, ……
{
    Run, ……
}
WinWait, ……,

  • 取得兩個檔案的『長檔名』, (Loop %1%),
    (『拖放』得到的是 8.3 檔名, 類似 xxxxxx~2.xxx)
  • Loop %1%
    {
        file1 = %A_LoopFileLongPath%
    }
    SplitPath, file1, , path1, , file1_noext
    nn1 := ""
    Loop, Parse, file1_noext
    {
        if A_LoopField between 0 and 9
            nn1 = %nn1%%A_LoopField%
    }

    image

     

  • 篩選檔名裡的數字部分, 再將兩個檔名的數字部分, 組合成第三個檔名,
  • 把這三個檔名, 填到 程式視窗 的對應欄位 (ControlSetText, Edit1, ……)
  • image

     

    • 控制 程式視窗 的下拉式選單 (Control, ChooseString, ……, ComboBox1)

    如果需要, 再補上完整的程式。

    .099_鞭

    依照『磁碟代號』呼叫系統列的『安全地移除硬體』

    ……
    PostMessage, 1226, 1226, 0x201,, ahk_id %hWnd%    ; Left Click down
    PostMessage, 1226, 1226, 0x202,, ahk_id %hWnd%    ; Left Click Up
    WinWaitActive, ahk_id %hWnd%,,5    ; Wait for SRH Tray left-click-Menu
    ……
    DllCall( "GetMenuString", UInt,hMenu, Int,idx, Str,mStr, Int,nSize, UInt,0x400 )
    If InStr( mStr,Drv ) {
        ControlSend,,{Down %A_Index%}{Enter},ahk_id %hWnd%
        Break
    }
    ……

    .

    0 意見:

    發表您的回應

    張貼留言