2009年5月13日 星期三

包山包海的 AutoHotKey (4) -- 你不能錯過的系統工具語言

還記得我們照著這樣的脈絡一路看下來

.撞飛01撞飛02

AutoHotKey 擁有駭客等級的強大功能

AutoHotKey 只需要 2MB 的安裝檔, 一方面擁有『批次檔的便利』, 另一方面又有『駭客等級的強大功能』,(還不只以下這些)

  • 可以常駐執行, 並且可以設定腳本的各種特性 (視窗、工作列、系統列……)
  • 監視, 控制, 修改 其他程式的 視窗控件 (window control)
  • 存取系統登錄 (Registry)
  • 執行 DLL 呼叫
  • 可以 轉換成 *.exe 讓沒有安裝 AutoHotKey 的電腦也能執行

雖然 AutoHotKey 並不能取代『主流』的程式語言, 例如 : Visual c++, Visual Basic, Delphi, ……。

但是, 如果你需要完成軟體自動化的工作, 或是想要自己寫一些系統小工具, 卻又不知該用什麼程式語言, 我會建議你一定要試試 AutoHotKey。

.

以下這些, 都是用 AutoHotkey 寫的。相信看了這些例子, 你也會同意我的看法。

.遠目

AutoHotKey  ---- 檔案、視窗與磁碟管理

  • Folder Menu 是一個快速切換資料夾的工具。

    可以在檔案總管、開啟/儲存對話框、命令提示字元等視窗中快速的切換到常用的資料夾。

.

.

  • 快速切換檔案總管是否顯示副檔名 (快速切換顯示副檔名, 程式旅人 - 學習紀事 –)

    搭配熱鍵 win+F5 再加上 AutoHotKey『存取系統登錄 (Registry)』的 RegReadRegWrite 功能

.

  • 熱鍵開關光碟機拖盤、抽取式磁碟管理

.

AutoHotKey 軟體庫 ---- 1 Hour Software by Skrommel

  • CAPshift ---- 讓 大寫鍵『變慢』, 按 0.5 秒才會有作用, 以避免誤按,
    按 1 秒則出現選單來改變選取文字的大小寫
  • BatteryRun ---- 接上 和 拔掉 電源時, 分別執行不同的程式
  • Barnacle ---- 在軟體視窗加上自訂的工具列
  • Removable ---- 列出目前的磁碟機, 雙擊移除抽取式磁碟
  • Captain ---- 取得 或 改變視窗標題
  • DragKing ---- 自動複製滑鼠選取範圍, 並計算字數, 行數
  • MultiMonMan ---- 多螢幕管理
  • PlainPaste ---- 連續快按兩次 ctrl-V 貼上純文字 (移除格式)
  • TheEnd ---- 更名時, 按 F2 不會選到副檔名

.

AutoHotKey ---- 更多功能 與 參考資料

.

  • Script Showcase (samples) (AutoHotKey 官網)
    ---- 初步看來, 上面 QJCHEN 的文章, 似乎是從這邊翻譯出來的

.


(...繼續閱讀.../...CONTINUE...)

2009年5月11日 星期一

包山包海的 AutoHotKey (3) – TinySpy 輕鬆取得控件的名稱與文字

上一篇提到『用 AutoHotkey 自動化軟體操作』的一種方式是 控制其他程式的 視窗控件 (window control)。

常見的 視窗控件 (window control) 如下:

以下就來說明如何取得『控件』的名稱與文字。

.

取得控件資訊的工具

AutoHotKey 附帶的 AutoIt3 Window Spy 就是『取得控件資訊』的工具, 可以參考以下的介紹

.

另外, 也有用 AutoHotKey 腳本寫的 WinGet, another Window SPY (Smurth, 2008-11-12, AutoHotkey Community Forum)

.

TinySpy 輕鬆取得控件的名稱與文字

至於更簡單的版本, 可以參考我寫的 TinySpy.ahk, 其中最關鍵的是以下幾行

……
Gui, +LastFound
GUI_ID := WinExist()
SetTimer, GetSpyInfo, 250
……
return
……
GetSpyInfo:
……
MouseGetPos,x2 ,y2 , win_id, ctrl_id
if ( win_id = GUI_ID )
    Return 
WinGetTitle, win_title, ahk_id %win_id%
ControlGetText, ctrl_text, %ctrl_id%, ahk_id %win_id%
……

.

2009-05-10_065958


取得『記事本』的視窗資訊 和 文字
2009-05-10_070141 


無法用滑鼠選取文字的『對話框』,
一樣可以把文字取出來

101_藍藍路

.

完整腳本如下, 扣掉註解還不到 40 行

#SingleInstance,Force
#NoEnv
SetBatchLines, -1
SetTitleMatchMode, 2
applicationName = TinySpy
applicationVer = 1.0

Gui, Font, S11 CDefault
Gui, Add, CheckBox, w350 h20 vifSpyOn gClickSpyOnOff Checked
Gui, Add, Edit, w400 h300 vSpyInfo, no Data yet ...
Gui, Show, , %applicationName% %applicationVer%

; Need +LastFound to make WinExist() to return window id of GUI itself
Gui, +LastFound
GUI_ID := WinExist()

; set Spy update period
SetTimer, GetSpyInfo, 250

; config Spy ON/off (and also config AlwaysOnTop or not) according to "ifSpyOn" checkbox,
ClickSpyOnOff:
    Gui, Submit, NoHide
    if ifSpyOn
    {
        Gui, +AlwaysOnTop
        GuiControl, Text, ifSpyOn, Spy ON (Always on Top)
    }
    else
    {
        Gui, -AlwaysOnTop
        GuiControl, Text, ifSpyOn, Spy off
    }
    GuiControl, Focus, SpyInfo
    return

GuiClose:
    ExitApp

GetSpyInfo:
    Gui, Submit, NoHide
    if !ifSpyOn
        return
    MouseGetPos,x2 ,y2 , win_id, ctrl_id

; Not Spy on GUI itself
    if ( win_id = GUI_ID )
        Return

    WinGetTitle, win_title, ahk_id %win_id%
    ControlGetText, ctrl_text, %ctrl_id%, ahk_id %win_id%
    GuiControl,, SpyInfo, [Window]  %win_title%`n[Control]  %ctrl_id%`n========== [Text] ==========`n%ctrl_text%
    Return

.


(...繼續閱讀.../...CONTINUE...)

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
    }
    ……

    .


    (...繼續閱讀.../...CONTINUE...)

    2009年5月8日 星期五

    包山包海的 AutoHotKey (1) -- 不只是熱鍵工具

    為 AutoHotKey 正名 ---- 包山包海的 AutoHotKey

    包山包海的 AutoHotKey, 怎麼說呢?

    最近開始使用 AutoHotKey, 這才真正體會到 AutoHotKey 的強大, 覺得該為它『正名』 :

    AutoHotKey 不只是熱鍵工具

    雖然叫 AutoHotKey, 但是以下這些其實只是 AutoHotKey 的基本工夫,
    • 自訂『熱鍵』『熱字串』的自動化操作
    • 按鍵滑鼠動作 給特定視窗

    骨子裡的『AutoHotKey』, 可是遠比『熱鍵工具』來得強大的哦!!

    .

    AutoHotKey 擁有批次檔的便利

    • 雙擊 *.ahk 腳本 就可以執行 (當然要先安裝 AutoHotKey),
    • 純文字的 *.ahk 腳本就像批次檔一樣, 可以隨時用文字編輯器新增和修改
    • 可以 使用環境變數, 例如 %temp%

    此外, AutoHotKey 還有批次檔所沒有的 GUI 介面

    .

    AutoHotKey 擁有駭客等級的強大功能

    『駭客等級的強大功能』還不只以下這些,
    • 可以常駐執行, 並且可以設定腳本的各種特性 (視窗、工作列、系統列……)
    • 監視, 控制, 修改 其他程式的 視窗控件 (window control)
    • 存取系統登錄 (Registry)
    • 執行 DLL 呼叫
    • 可以 轉換成 *.exe 讓沒有安裝 AutoHotKey 的電腦也能執行

    .

    AutoHotkey 熱鍵設定

    簡睿的這一篇, 是很好的『入門指南』, 包括 : AutoHotKey 的下載、安裝、基本概念、『熱鍵』『熱字串』 的設定 …… 等

    ……
    AutoHotkey顧名思義就是協助你將常用按鍵自動化的工具
    ……
    本文會一步一步地把建立腳本檔的步驟清楚、簡單的介紹給你,讀者們只要依樣畫葫蘆馬上就能感受到AutoHotkey的強大威力了!

    .

    • F2改檔名時只會選取主檔名,原本是不管主檔名還是副檔名都會選 (原始碼, 來源待查)

    .催眠

    AutoHotkey 的參考資料

    以下的參考資料, 同時也介紹了許多 AutoHotkey 的其他功能

    .096_K書

    撰寫腳本時, 當然更要隨時查閱官網的 參考資料

    .


    (...繼續閱讀.../...CONTINUE...)