顯示具有 AutoHotKey 標籤的文章。 顯示所有文章
顯示具有 AutoHotKey 標籤的文章。 顯示所有文章

2010年1月29日 星期五

另一個台灣之光 - Sikuli

雖然發現 vgod 這號人物才第一天。不過, 我真的很欣賞他

Sikuli 是個以圖形操作為基礎的程式開發工具……

vgod 寫的 Sikuli 是用直覺的『螢幕貼圖』來完成自動化。不像其他熱鍵工具, 需要指定『視窗控件 (window control) 的名字』 (例如: AutoHotkey)

.


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

2009年12月18日 星期五

改造 Taglocity 3.0 Tag Bar (3) ---- 即時更新

改造 Taglocity 3.0 Tag Bar (2) ---- 反映標籤狀態, 只能做到『一次性』的反映標籤狀態。接下來, 要加入『即時更新』的功能。

以下方法各有優缺點, 也不確定是否適合每個人的使用情境, 所以重點放在優缺點的討論 :

.

即時更新 Tag Bar 來 反映標籤狀態

『即時更新』可以用『定時重複執行』或是『觸發執行』來實現,

  • Outlook VBA 並沒有原生的『定時重複執行』功能, 不過 rockman 在 outlookcode.com (2004-12-07) 提出用 user32 函式庫的 SetTimer 和 KillTimer 的方法, 也提到『必須注意有可能當機』

2) If you don't deactivate the timer when the application closes it will likely crash

  • 實作上, 將 Timer 設定成 1~2 秒就夠用了

.

方法

優缺點

定時執行 SetTimer (User32)

@ 前提 : 對 VB 有相當的把握
O 優點 :
  • 只需要一個觸發條件
X 缺點 :
  • 開啟 Outlook 會有巨集警告
  • 容易當機 (Outlook 直接終止)
  • 和其他 Outlook 改造存在相容性的問題需要克服
事件觸發方式,
例如 : Catch all events on a folder (outlookcode.com)


(尚未實作)
O 優點
  • 使用 Outlook 本身的 VBA 功能
X 缺點 :
  • 開啟 Outlook 可能會有巨集警告
  • 必需找到適當的觸發方式, 可能要捕獲不只一個事件
以 AutoHotKey 觸發

@ 前提 :
需要有 AutoHotKey  經驗

O 優點
  • 容易增加判斷條件, 例如 : Outlook 是否為作用中的視窗 ……
X 缺點 :
  • 不是 Outlook 原生, 不見得容易移植

.

AutoHotKey 串連 Outlook 實現自動化

2009-10-10_170220

最後, 目前完成度最高的, 是『AutoHotKey 串連 Outlook』

  • 使用 AutoHotKey 的 SetTimer 來定時觸發
  • 檢查 Outlook 是否為作用中的視窗, 而且螢幕上有 TagBar
  • 使用 AutoHotKey COM Standard Library 來呼叫 反映標籤狀態 的 Outlook 函數, 也就是 COM_Invoke(poul, "updateTagBar")
	COM_Init()
poul := COM_CreateObject("Outlook.Application")
' ... (此處最好有容錯處理)
ol_func := COM_Invoke(poul, "updateTagBar")
' ... (此處最好有容錯處理)
COM_Release(ol_func)
COM_Release(poul)
COM_Term()


.



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

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...)