AutoHotKey book


文檔

中文使用手冊--http://ahkcn.sourceforge.net/docs/AutoHotkey.htm

 

HotKey文章之一

創建腳本

每個腳本都是一個純文本文件,由一些能被 AutoHotKey.exe 執行的命令組成。一個腳本可能還包含熱鍵 和熱字符串 。如果沒有熱鍵和熱字符串,腳本在啟動的時候就會從頭依次執行到尾。

創建一個新的腳本:

  1. 下載 並安裝 AutoHotkey。
  2. 右擊鼠標,選擇 新建 -> 文本文檔 。
  3. 輸入文件名並確保以 .ahk 結尾。例如:Test.ahk。
  4. 右擊文件,選擇 編輯腳本 。
  5. 輸入以下內容:  #space::Run www.baidu.com

上一行的第一個字符 "#" 代表鍵盤上的 Windows 鍵;所以 #space 表示在按住 Windows 鍵后再按空格鍵。"::" 后面的命令會在熱鍵激活后執行,在本例中則會使用系統默認瀏覽器打開百度主頁。繼續按下面步驟操作,來執行這個腳本:

  1. 保存並關閉該文件。
  2. 雙擊該文件來啟動它。在系統托盤里會出現一個新圖標。
  3. 按下 Windows 和空格鍵,網頁會在默認的瀏覽器里打開。
  4. 右擊系統托盤里的綠色圖標可以退出或編輯當前腳本。

注意:

 

 

本小節參考自: 本小節參考自: AutoHotKey 新手入門教程==>https://blog.csdn.net/redraiment/article/details/6183040

 

 

 

 

 

HotKey文章之二

AutoHotKey 是一個免費的鍵盤宏程序,可以用於配置鍵盤快捷鍵、鼠標事件
以及搖桿事件,還可以在輸入文本的時候對文本進行擴展(自動補全)

第一個腳本

新建文件test.ahk並輸入以下內容:

^!n::
  Run, notepad
Return

保存文件,雙擊執行,可以在右下角看到腳本執行的圖標,
然后按下Ctrl+Alt+N就可以打開記事本程序。

AutoHotKey 快捷鍵命令大概可以分為三個部分:

  • ::左邊的部分表示需要按下的快捷鍵,^表示Ctrl!表示Alt
  • ::右邊部分表示需要執行的命令
  • 最后Return表示結束命令

另外除了快捷鍵(HotKey)配置, AutoHotKey 還可以配置 HotStrings,
相當於我們平時使用的 IDE 中的文本自動補全功能

在電腦右下角的腳本執行圖標上右鍵,單擊“編輯腳本”,
會彈出一個記事本程序來編輯當前運行的腳本,加入如下內容:

::hw::Hello World!

保存文件,關閉編輯器,在右下角腳本圖標上右鍵,單擊“重新加載腳本”,
然后來測試一下腳本功能,首先Ctrl+Alt+N打開記事本,
輸入hw,按下EnterTab就會進行自動補全,用Hello World!替換hw

特殊符號

^表示Ctrl這種快捷鍵中的特殊符號,意義如下:

符號 意義
# Win(鍵盤上有Windows圖標的鍵)
! Alt
^ Ctrl
+ Shift

我們除了可以像上面的一樣定義全局快捷鍵之外,
另外還有一些用於Windows的特殊命令,可以用於定義特定窗口的快捷鍵,如:

#IfWinActive表示窗口是否處於激活狀態,可以用於指定在特定窗口下可用的快捷鍵,
如下腳本表示在Untitled - Notepad窗口中按下Win+P按鍵會彈出窗口
提示“你按下了Win+P”

#IfWinActive Untitled - Notepad
#space::
  MsgBox, 你按下了Win+P
Return
#IfWinActive

或者win10中文版使用中文名

#IfWinActive 無標題 - 記事本
#space::
  MsgBox, 你按下了Win+P
Return
#IfWinActive

#IfWinExist表示窗口是否存在

發送按鍵 - 一鍵當千

快捷鍵后的命令部分除了執行命令運行程序之外,還可以向電腦發送按鍵單擊事件,
就相當於 AutoHotKey 幫你去按下按鍵,從而獲取按下一個快捷鍵相當於一堆按鍵。

LCtrl::
  Send, AutoHotKey
Return

上述命令表示按下左邊Ctrl按鍵時會發送按鍵,依次按下AutoHotKey
對於鍵盤上的一些特殊按鍵,如Ctrl等都有對應的表示,如:^表示Ctrl
!表示Alt等等,除了這種類似快捷鍵特殊符號的表示,還可以使用{...}的方式來
表示,如:{lAlt}表示左邊的Alt鍵,{F1}-{F24}表示鍵盤上的F1F24鍵等。

; 按下Win+H就等於按下Ctrl+Alt+HOME鍵
#h::
  Send, ^!{HOME}
Return

其實,除了^!+#可以表示組合鍵之外,
其他的{...}形式的符號都只是按順序敲擊鍵盤罷了,
比如:^{HOME}表示按下Ctrl的同時按下HOME鍵,
{Ctrl}{HOME}則表示按下Ctrl松開,然后按下HOME鍵。

若是想要實現組合鍵的功能,可以使用{Ctrl Down}{Ctrl Up}這種組合,
表示按下和松開{Ctrl}鍵,在這兩個之間的符號都會在按住Ctrl的情況下執行。
也就是說:^{HOME} = {Ctrl Down}{HOME}{Ctrl Up} != {Ctrl}{HOME}

注:支持的Send鍵列表見官方文檔
但是要注意的是除了官方文檔提供的按鍵可以使用{...}形式,
其他的按鍵都不可以使用,如{a}就是一種錯誤的表達方式

另外,Send后的部分可以分多行以便於閱讀,只要用括號括起來就可以:

^j::
  Send,
    (
      Line 1
      Line 2
      A dobe
    )
Return

參考鏈接:
https://autohotkey.com/docs/Tutorial.htm

本小節參考自:   AutoHotKey 快速入門==>https://www.cnblogs.com/baiyangcao/p/autohotkey_basic.html

 

 

 

好用腳本

用AutoHotkey一鍵打開、激活、或隱藏Chrome(或其他軟件)

熱鍵的效果:

1、Chrome沒打開時,打開Chrome

2、Chrome已打開,未激活時,則激活Chrome

3、Chrome已激活,則隱藏Chrome

本來這種功能對AutoHotkey來說非常簡單,

但是在激活Chrome或FireFox瀏覽器的時候卻總是無效,

經朋友指點是有些程序的窗口會存在N個子窗口,

所以增加了尋找主窗口HWND的過程,就可以正常激活了。

完整代碼如下:

#a::hyf_onekeyWindow("d:\Chrome\Chrome.exe", "Chrome_WidgetWin_1", "\S") ;注意修改Chrome路徑
 
hyf_onekeyWindow(exePath, titleClass := "", titleReg := "")
{ ;有些窗口用Ahk_exe exeName判斷不准確,所以自定義個titleClass
    SplitPath, exePath, exeName, , , noExt
    If !hyf_processExist(exeName)
    {
        ;hyf_tooltip("啟動中,請稍等...")
        Run,% exePath
        ;打開后自動運行 TODO
        funcName := noExt . "_runDo"
        If IsFunc(funcName)
        {
            ;hyf_tooltip("已自動執行函數:" . funcName)
            Func(funcName).Call()
        }
        Else If titleClass
        {
            WinWait, Ahk_class %titleClass%, , 1
            WinActivate Ahk_class %titleClass%
        }
    }
    Else If WinActive("Ahk_exe " . exeName)
    {
        funcName := noExt . "_hideDo"
        If IsFunc(funcName)
            Func(funcName).Call()
        WinHide
        ;激活鼠標所在窗口 TODO
        MouseGetPos, , , idMouse
        WinActivate Ahk_id %idMouse%
    }
    Else
    {
        If titleReg
            titleClass := "Ahk_id " . hyf_getMainIDOfProcess(exeName, titleClass, titleReg)
        Else If titleClass
            titleClass := "Ahk_class " . titleClass
        Else
            titleClass := "Ahk_exe " . exeName
        WinShow %titleClass%
        WinActivate %titleClass%
        funcName := noExt . "_activeDo"
        If IsFunc(funcName)
        {
            ;hyf_tooltip("已自動執行函數:" . funcName)
            Func(funcName).Call()
        }
    }
}
 
hyf_processExist(n) ;判斷進程是否存在(返回PID)
{ ;n為進程名
    Process, Exist, %n% ;比IfWinExist可靠
    Return ErrorLevel
}
 
hyf_tooltip(str, t := 1, ExitScript := 0, x := "", y := "")  ;提示t秒並自動消失
{
    t *= 1000
    ToolTip, %str%, %x%, %y%
    SetTimer, hyf_removeToolTip, -%t%
    If ExitScript
    {
        Gui, Destroy
        Exit
    }
}
 
hyf_getMainIDOfProcess(exeName, cls, titleReg := "") ;獲取類似chrome等多進程的主程序ID
{
    DetectHiddenWindows, On
    WinGet, arr, List, Ahk_exe %exeName%
    Loop,% arr
    {
        n := arr%A_Index%
        WinGetClass, classLoop, Ahk_id %n%
        ;MsgBox,% A_Index . "/" . arr . "`n" . classLoop . "`n" . cls
        If (classLoop = cls)
        {
            If !StrLen(titleReg) ;不需要判斷標題
                Return n
            WinGetTitle, titleLoop, Ahk_id %n%
            ;MsgBox,% A_Index . "/" . arr . "`n" . classLoop . "`n" . titleLoop
            If (titleLoop ~= titleReg)
                Return n
        }
        Continue
    }
    Return False
}
 
hyf_removeToolTip() ;清除ToolTip
{
    ToolTip
}

 

 

AutoHotKey:如何將腳本配置為在用戶登錄后自動啟動?

將ahk腳本文件或者快捷方式放到啟動目錄。
啟動目錄位於:
開始菜單--》程序--》啟動 右擊它進入

 

 

 

#IfWinActive xxx - yyy 中的xxx和yyy如果定位

 

方法1:

1、用autohotkey自帶的window spy,右擊autohotkey的托盤圖標-》window spy

2、但window spy對某些窗體的控件檢測不到。

3、通常獲取不了的控件都是用顏色或圖像來判斷位置所在。(顏色也可以通過window spy查看)

方法2:

1、自己編代碼檢測窗體控件。

#PersistentSetTimer, WatchActiveWindow, 200returnWatchActiveWindow:WinGet, ControlList, ControlList, AToolTip, %ControlList%return

2、該代碼與window spy檢測的是一樣的。

ps:按鈕、滾動條、輸入框等就是控件。

文章結束,以上就是關於autohotkey檢測窗體控件的兩種方法,如果你也有同樣的疑問,那就趕快按照以上方法試試吧!

 

本小節源自: autohotkey檢測窗體控件的兩種方法==>https://www.jb51.net/softjc/599199.html

 

 

 

 

 

 

我的樣例

 


::hw::hello world!

#IfWinActive * - 記事本
#space::
  MsgBox, 你按下了Win+space
Return
#IfWinActive

/*
 注釋模式一
*/
; 注釋模式二 如果要用ctrl+r 觸發 f5功能 , 可能需要Send {f5} , 尚未償試
; 注釋模式二 在winscp中按f5時,用ctrl+r的刷新功能替換f5的下載功能,親測成功
#IfWinActive ahk_exe WinSCP.exe
f5::
  Send, ^r
Return
#IfWinActive

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM