Autohotkey window 下宏鍵盤、宏命令開發入門

🌾 💐 🌷 🌹php

個人AHK下載地址:https://github.com/dragon8github/Pandora/raw/master/pandora.exehtml

AutoHotKey 下載:https://autohotkey.com/download/前端

國內自制的ahk網站:https://www.autoahk.com/vue

推薦下載installernode

 

官方網站:https://www.autohotkey.com/docs/AutoHotkey.htmjquery

中文官網:https://wyagd001.github.io/zh-cn/docs/Tutorial.htmgit

AHK腳本編輯器推薦:http://fincs.ahk4.net/scite4ahk/  |  https://wyagd001.github.io/zh-cn/docs/commands/Edit.htm#Editorsgithub

我的推薦使用sublime text做爲autohotkey的編輯器,只須要安裝aotuhotkey插件便可。ajax

 

常量列表,十分實用:https://wyagd001.github.io/zh-cn/docs/Variables.htm#DD正則表達式

優秀的腳本合集:https://www.autoahk.com/archives/1444

特殊鍵解決方案(實用):https://blog.csdn.net/liuyukuan/article/details/5924137   https://wyagd001.github.io/zh-cn/docs/KeyList.htm#SpecialKeys

GUI的一些佈局API:https://wyagd001.github.io/zh-cn/docs/commands/Gui.htm#PosSize

使用html作ahk界面:https://blog.csdn.net/liuyukuan/article/details/53504400

 

(重要)使用SciTE4AutoHotkey,出現中文怪異的問題。

 左上角File--Encoding---UTF-8 with BOM

 

一、代碼加入 #InstallKeybdHook,而且開啓腳本

二、左鍵點擊右下角的圖標 -> View -> Key History

將ahk編譯成exe:http://ahkcn.sourceforge.net/docs/Scripts.htm#ahk2exe

 

快捷鍵

Symbol Description
# Win (Windows logo key)
! Alt
^ Control / Ctrl
+ Shift
& An ampersand may be used between any two keys or mouse buttons to combine them into a custom hotkey. 

默認是左側的,若是想要右側的加入< >便可,譬如按下右側的ctrl , 那就是 >^

更多熱鍵請參考:

(重要,推薦)https://autohotkey.com/docs/Hotkeys.htm

https://autohotkey.com/docs/Hotkeys.htm

https://autohotkey.com/docs/commands/Send.htm

 

獲取進程id,能夠經過模糊title來查找。

WinGet, v, PID, , Chrome
Process, Close, % v        

 

動態添加熱鍵

__TIP__(a = 123) {
    MsgBox, % a
}

!z::
    HFN := Func("__TIP__")
    Hotstring(":*:fuck", HFN.bind("321"))
return

 

 

GET請求,解決亂碼問題

; 下載內容
ajax(url, q:=false, text:="正在爲你下載代碼,請保持網絡順暢")
{
    whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    whr.Open("GET", url, true)
    whr.SetRequestHeader("Content-Type", "charset=GB2312")
    
    whr.Send()

    whr.WaitForResponse()
    
    if (q==false) {
        if (whr.ResponseText) {
            tip("下載成功")
        } else {
            tip("無內容返回")
        }
    }
    
    arr := whr.responseBody
    pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
    length := arr.MaxIndex() + 1
    text := StrGet(pData, length, "utf-8")
    return text
    
    ; return  whr.ResponseText
}

 

AHK 解析JSON庫

https://github.com/cocobelgica/AutoHotkey-JSON

#Include src/JSON.ahk              ; JSON Script

!z::
str =
(
{
    "a": 123
}
)

data := JSON.Load(str)

MsgBox, % data.a
return

 

注意索引是從1開始的。因此若是是數組,第一個的索引是1

!z::
json_str := ajax("https://gitee.com/api/v5/gists?access_token=6ab92e291bbe59b4301191b6aef2bc85&page=1&per_page=20")

data := JSON.Load(json_str)

MsgBox, % data[1].url
return

 

 

AHK 解析和使用JSON,依賴 ActiveScript.ahk

https://github.com/Lexikos/ActiveScript.ahk

#Include src/ActiveScript.ahk

jsonstr := "{a: 123}"

jsonParse =
(
eval('(' + jsonstr + ')')
)

script := new ActiveScript("JScript")
Result := script.Eval(jscontent)
MsgBox, % Result.a

 

 

AHK GUI 佈局工具  SmartGUI Creator

https://wyagd001.github.io/zh-cn/docs/commands/Gui.htm#Position

 

兩個關於索引的重要認知:

一、SubStr 字符串截取,若是你想從後面開始取,那麼索引應該設置爲0,好比SubStr("123", 0, 1);

二、數組的第一位,是從1開始的。噁心吧?

 

獲取按鈕的狀態

; 左鍵是否按緊了
KeyIsDown := GetKeyState("LButton")

KeyIsDown := GetKeyState("Alt")

KeyIsDown := GetKeyState("Ctrl")

 

powershell.exe 與 ahk結合

!z::
; zip名字
zipname := "vue3-template.zip"
; 文件夾名字
zippath := "./vue3-template"
; 下載文件的地址
url := "https://raw.githubusercontent.com/dragon8github/Pandora/master/template/vue3-template.zip"
; 因爲要使用git命令,因此要將window格式轉化爲unix格式的路徑
desk := StrReplace(A_Desktop, "\", "/")
; 文件夾的名字
name := desk . "/vue3_template_" . A_YYYY . A_MM . A_DD . A_Hour . A_Min . A_Sec
; 一系列命令 
command = 
(
mkdir %name% ; cd %name% ; Invoke-WebRequest -uri "%url%" -OutFile "%zipname%" ; Expand-Archive -Path %zipname% -DestinationPath . ; rm %zipname%
)
run, powershell.exe %command%
return

 

 

 

熱字符串定義一個很重要的技巧:

::.f::
Var =
(
.forEach((val, key) => {})
)
code(Var)
return

::f::
Var =
(
function () {}
)
code(Var)
return

我定義了.f 和 f ,但若是我輸出 a.f , 我期待觸發 .f , 但其實是除非 f

其實這樣這樣設置 .f便可。 :?:.f::

:?:.f:: 
Var =
(
.forEach((val, key) => {})
)
code(Var)
return

 

 

關閉進程,其實特別實用

https://wyagd001.github.io/zh-cn/docs/commands/Process.htm#ex1

Run notepad.exe,,, NewPID
Process, Priority, %NewPID%, High
MsgBox The newly launched Notepad's PID is %NewPID%.

 

 全局變量global,竟然只能這樣使用?

txtit() {
  ; 全局變量真的只能這樣用了,定義在外面沒有辦法生存。
  global pidary := pidary ? pidary : []
  
  pidary.push("110")

  return
}

!x::
txtit()
txtit()
txtit()
MsgBox, % pidary.Length()
return

 

 

 

強大的 Spy 探測檢測窗口的信息。

只須要右鍵小圖標,選中 spy window 便可,最好選中右上角的 Follow Mouse 方便選中。咱們來實戰一下如何查看搜狗輸入法的窗口

咱們得知輸入法的窗口信息爲: ‘ahk_class SoPY_Comp’。這樣我就能搞不少事情了。

    if (WinExist("ahk_class SoPY_Comp")) {
          MsgBox, 123
    }

後記:win10的輸入法有問題,就算能獲取,Send的時候也不少問題。最大的問題在於哪怕出現輸入法了,仍是會在UI中輸出英文,最好的辦法仍是使用搜狗等第三方吧。

建議屏蔽win10輸入法:https://jingyan.baidu.com/article/ed2a5d1f99277909f7be1753.html

 

 

 

  Run,% "C:\Windows\notepad.exe",,, pid
  WinWait, ahk_pid %pid%
  WinMove, ahk_pid %pid%,,  0, 0, (A_ScreenWidth)/3, (A_ScreenHeight)
  Return

 

 

listview 點擊事件(click,rightclick)

必須設置AltSubmit參數才行。

Gui, ISearch:Add, ListView, r7 w800 h600 gMyListView AltSubmit xs yp+40, Name|Path


MyListView:
if (A_GuiEvent = "Normal") {
  MsgBox, %A_EventInfo%
}

if (A_GuiEvent = "RightClick") {
  MsgBox, %A_EventInfo%
}
return

 

 

 

GUI的關閉事件

GuiEscape:
GuiClose:
    Gui, Hide
return

PandoraGuiEscape:
PandoraGuiClose:
    Gui, Pandora:Hide
return

 

獲取GUI Edit的值。

(PS: Pandora:  是個人GUI 的ID,若是沒有能夠省略。

GuiControlGet, OutputVar, Pandora:, SearchContent, Text

 

數組簡單循環

myarray := ["a", "b", "c", "d"]
For key, value in myarray
            MsgBox %key% = %value%

 

gui Listview 組件的使用

https://wyagd001.github.io/zh-cn/docs/commands/ListView.htm#Intro

PS: 主要是個人GUI叫 Pandora 才須要加入 Pandora: ,不然移出

; 建立含名稱和大小兩列的 ListView:
Gui, Pandora:Add, ListView, r7 w260 gMyListView xs, Name|Path

Gui, Pandora:Default

; 從文件夾中獲取文件名列表並把它們放入 ListView:
Loop, %A_MyDocuments%\*.*
    LV_Add("", A_LoopFileName, A_LoopFileSizeKB)

LV_ModifyCol()  ; 根據內容自動調整每列的大小.
LV_ModifyCol(2, "Integer")  ; 爲了進行排序, 指出列 2 是整數.

 

SendLevel 控制熱鍵和熱字串是否忽略模擬的鍵盤和鼠標事件.

SendLevel 1
Send, canvas.game{tab}

 

GuiControlGet 若是有GUI,那麼須要這樣用,譬如個人GUI是Pandora

GuiControlGet, OutputVar, Pandora:, ClipHistory, Text

 

獲取當前是否爲中文輸入法

!x::
CoordMode Pixel
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *25 static/icon/cn.png
ImageSearch, FoundX2, FoundY2, 0, 0, A_ScreenWidth, A_ScreenHeight, *25 static/icon/cn2.png
if (FoundX != "" || FoundX2 != "") {
    MsgBox, 目前是中文輸入法
}
return

 

標題和聚焦相關

# 獲取當前活躍窗口標題
WinGetTitle, title, A

# 根據title獲取當前的ahk_class
WinGetClass, outval, 標題名

# 獲取當前活躍窗口ahk_class
WinGetClass, outval, A

 

 無限循環和中止。

ISSTOP := false

F5::
Loop {
    Click
    Sleep, 10
    
    if (ISSTOP) {
        break
    }
}
    
return

F6::
ISSTOP := true
return

 

 

用IE打開網站示例

run, iexplore.exe http://120.196.128.45:801/
ExitApp 


官方有批量定義快捷鍵的方法,但卻沒有批量定義熱字符串的辦法,文檔又很是不友好,只能艱難的摸索出來。
- 替換熱字符串
- 替換label
- 替換函數方法

 

// 一、替換熱字符串
Loop, 1000 {
Hotstring("::h" . A_Index, "height: " . A_Index . "px;") 
}

// 二、替換爲label
Loop, 1000 {
Hotstring(":X:h" . A_Index, "HEIGHT_HANDLE_LABEL")
}

HEIGHT_HANDLE_LABEL() {
MsgBox, % A_ThisHotkey
}

// 三、替換函數方法
HEIGHT_HANDLE_LABEL() {
MsgBox, % A_ThisHotkey
}

Loop, 1000 {
HFN := Func("HEIGHT_HANDLE_LABEL")
Hotstring(":X:h" . A_Index, HFN)
}

 

 

 

 

如何輸出雙引號? 其實就是兩個雙引號便可

Var := "個人名字是 "" Lee "" "
MsgBox, % Var

 

正則表達式獲取子匹配,請注意下面的 OutputVar4 變量

強烈推薦看看:https://autohotkey.com/boards/viewtopic.php?f=27&t=7888&hilit=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

Var := "<div class = 'departmental'>"
RegExMatch(Var, "im)class(\s*)=(\s*)('|""){1}(.+?)('|""){1}", OutputVar)
MsgBox, % OutputVar  ; class = 'departmental'
MsgBox, % OutputVar4 ; departmental

 

 

換行符和循環輸出數組Array

https://wyagd001.github.io/zh-cn/docs/Objects.htm#Usage_Simple_Arrays

https://wyagd001.github.io/zh-cn/docs/misc/Arrays.htm

^!r::
    tmp := Clipboard
    if (StrLen(tmp)) {
        array := StrSplit(tmp, "`n")
        For key, value in array
            MsgBox %key% = %value%
    }
return

 

 

執行已定義好的熱字符串,Gosub 或者 Goto

https://wyagd001.github.io/zh-cn/docs/Hotstrings.htm

::ff::
  MsgBox, 123
return

::test::
 Gosub ::ff
return

 

 

發送純文本,這對代碼很友好,並且不受輸入法的影響,缺點是一旦使用{text},就沒法使用#!+這些了

https://wyagd001.github.io/zh-cn/docs/commands/Send.htm#blind

Send, {text} console.log('')
Send, {left 2}

 

 

ahk調用cmd示例(暫時不知道如何調用bash)

https://wyagd001.github.io/zh-cn/docs/commands/Run.htm

RunWaitOne(command) {
    ; WshShell 對象: http://msdn.microsoft.com/en-us/library/aew9yb99
    shell := ComObjCreate("WScript.Shell")
    ; 經過 cmd.exe 執行單條命令
    exec := shell.Exec(ComSpec " /C " command)
    ; 讀取並返回命令的輸出
    return exec.StdOut.ReadAll()
}

a := RunWaitOne("node -v")
MsgBox, % a

 

 

GUI Submit, NoHide 的做用

https://wyagd001.github.io/zh-cn/docs/commands/Gui.htm#ex2

Gui, Add, Text,, First name:
Gui, Add, Text,, Last name:
Gui, Add, Edit, vFirstName ym  ; ym 選項開始一個新的控件列.
Gui, Add, Edit, vLastName
Gui, Add, Button, default, OK  ; ButtonOK(若是存在)會在此按鈕被按下時運行.
Gui, Show,, Simple Input Example
return  ; 自動運行段結束. 在用戶進行操做前腳本會一直保持空閒狀態.

GuiClose:
ButtonOK:
Gui, Submit, NoHide   ; 保存用戶的輸入到每一個控件的關聯變量中.
MsgBox You entered "%FirstName% %LastName%".
ExitApp

 

 

 GUI 的BUTTON的事件綁定

Gui, Add, Button, w740 h30 Default, FUCK

ButtonFUCK:
    ; 保存用戶的輸入到每一個控件的關聯變量中.
    Gui, Submit, NoHide 
    MsgBox, 123
return

 

 

AHK GUI 佈局重點教程

核心API:

  • ys:新列
  • xs:新行,一般結合sction一塊兒使用
  • section:造成一個新的塊,一般結合xs一塊兒使用

 

Gui, Add, Text, gAllSearchA W120 yp+10, 搜索引擎類:
Gui, Add, Checkbox, gMySubroutine Checked HwndMyEditHwnd vbd, 百度
Gui, Add, Checkbox, vgoogle, Google
Gui, Add, Checkbox, vgithub, Github
Gui, Add, Checkbox, vso, Stack Overflow
Gui, Add, Checkbox, vsegmentfault, SegmentFault
Gui, Add, Checkbox, vcylee, 博客園

Gui, Add, Text, gAllSearchB W120 ys, 翻譯類:
Gui, Add, Checkbox, vbdfy, 百度翻譯   
Gui, Add, Checkbox, vyoudaofy, 有道翻譯
Gui, Add, Checkbox, vgooglefanyi, Google翻譯

Gui, Add, Text, gAllSearchC W120 ys, 音樂類:
Gui, Add, Checkbox, vwy, 網易雲音樂   
Gui, Add, Checkbox, vqq, QQ音樂
Gui, Add, Checkbox, vdog, 酷狗音樂
Gui, Add, Checkbox, vxiami, 蝦米音樂

Gui, Add, Text, gAllSearchD W120 ys, 社區類:
Gui, Add, Checkbox, vjuejin, 掘金
Gui, Add, Checkbox, vjianshu, 簡書
Gui, Add, Checkbox, vcsdn, CSDN
Gui, Add, Checkbox, vzhihu, 知乎

Gui, Add, Text, gAllSearchE W120 ys, 購物類:
Gui, Add, Checkbox, vtaobao, 淘寶
Gui, Add, Checkbox, vjingdong, 京東
Gui, Add, Checkbox, vdangdang, 噹噹
Gui, Add, Checkbox, vamazon, 亞馬遜
Gui, Add, Checkbox, vsuning, 蘇寧易購

Gui, Add, Text,  W120 Section xs yp+50, 經常使用導航:
Gui, Add, Link,, <a href="https://github.com">github</a>
Gui, Add, Link,, <a href="https://legacy.gitbook.com">gitbook</a>
Gui, Add, Link,, <a href="https://www.cnblogs.com/cylee">博客園</a>

Gui, Add, Text,  W120 ys, 其餘:
Gui, Add, Link,, <a href="http://youmightnotneedjquery.com/">notjQuery</a>
Gui, Add, Link,, <a href="chrome://inspect/#devices">安卓調試</a>
Gui, Add, Link,, <a href="https://wyagd001.github.io/zh-cn/docs/Tutorial.htm">AHK官網</a>

Gui, Add, Text,  W120 ys, 娛樂:
Gui, Add, Link,, <a href="https://www.bilibili.com/">嗶哩嗶哩</a>
Gui, Add, Link,, <a href="http://www.dilidili.wang/">嘀哩嘀哩</a>
Gui, Add, Link,, <a href="http://i.youku.com/u/UNTUzOTAwMzQ0">Ted魔獸</a>
Gui, Add, Link,, <a href="http://e.xitu.io/">掘金前端</a>

Gui, Add, Text,  W120 ys, 代理:
Gui, Add, Link,, <a href="http://www.xicidaili.com/nn">西刺</a>
Gui, Add, Link,, <a href="https://proxy.l337.tech/txt">l337</a>
Gui, Add, Link,, <a href="http://www.66ip.cn/nm.html">66ip</a>

Gui, Add, Text, W120 ys, 站長工具:
Gui, Add, Link,, <a href="http://tool.oschina.net/codeformat/html">代碼格式化</a>
Gui, Add, Link,, <a href="https://tool.lu/html/">代碼美化</a>
Gui, Add, Link,, <a href="http://jsbeautifier.org/">jsbeautifier</a>
Gui, Add, Link,, <a href="http://tool.chinaz.com/Tools/urlencode.aspx">Urlencode/Unicode</a>

Gui, Add, Text,  W120 Section xs yp+40, layer/layui:
Gui, Add, Link,, <a href="http://layer.layui.com/">layer</a>
Gui, Add, Link,, <a href="http://www.layui.com/doc/">layui文檔</a>
Gui, Add, Link,, <a href="http://www.layui.com/demo/">layer示例</a>
Gui, Add, Link,, <a href="https://github.com/sentsin/layui/">layui-github</a>

Gui, Add, Text,  W120 ys, Vue:
Gui, Add, Link,, <a href="http://vuejs.org/">vue</a>
Gui, Add, Link,, <a href="http://vuex.vuejs.org">vuex</a>
Gui, Add, Link,, <a href="http://router.vuejs.org ">vue-router</a>
Gui, Add, Link,, <a href="https://github.com/opendigg/awesome-github-vue">vue-awesome</a>

Gui, Add, Text,  W120 ys, ElementUI:
Gui, Add, Link,, <a href="http://element-cn.eleme.io/#/zh-CN/component/radio">ElementUI</a>
Gui, Add, Link,, <a href="https://github.com/ElemeFE/element/blob/dev/packages/">Element-github</a>

Gui, Add, Text, W120 ys, mint-ui:
Gui, Add, Link,, <a href="http://elemefe.github.io/mint-ui/#/">mint-ui</a>
Gui, Add, Link,, <a href="http://mint-ui.github.io/docs/#/">mint-ui-github</a>

Gui, Add, Text,  W120 ys, 最近瀏覽:
Gui, Add, Link,, <a href="http://guss.one/guss/register.html?code=ec19c0ca">guss</a>
Gui, Add, Link,, <a href="http://www.51ym.me/User/Default.aspx">易碼</a>
Gui, Add, Link,, <a href="http://www.manbiwang.com/#/">滿幣網</a>

 

 

獲取控件GUI控件的對象

再進一步根據API操做就簡單了

Gui, Add, Checkbox, vsuning, 蘇寧易購

; 設置爲選中 GuiControl,, suning,
1

 

 

設置GUI控件的事件

Gui, Add, Text, gAllSearchD W120 ym, 社區類:

AllSearchD:
    MsgBox, 123return

 

 

(hack) 在ahk中使用JavaScript

https://autohotkey.com/boards/viewtopic.php?f=6&t=4555

https://github.com/Lexikos/ActiveScript.ahk

#Include <ActiveScript>

script := new ActiveScript("JScript")
Result := script.Eval("parseInt(Math.random() * 10 + 1)")
MsgBox, % Result

 

 

最大化當前窗口和還原當前窗口

!enter::
    WinGet, OutputVar, MinMax, A
    if (OutputVar == 1) {
        WinRestore, A
    } else {
        WinMaximize, A
    }
return

 

 

 

獲取當前桌面路徑:MsgBox, %A_Desktop%

 

GUI的語法

官方demo:https://wyagd001.github.io/zh-cn/docs/commands/Gui.htm#Examples

官方文檔:https://wyagd001.github.io/zh-cn/docs/commands/Gui.htm

控件列表:https://wyagd001.github.io/zh-cn/docs/commands/Gui.htm#Add

詳細demo:https://www.cnblogs.com/CyLee/p/9198059.html

Gui, Add, Text, W120, 搜索引擎類:
Gui, Add, Checkbox, gMySubroutine vbd Checked HwndMyEditHwnd, 百度
Gui, Add, Checkbox, vgoogle, Google
Gui, Add, Checkbox, vgithub, Github
Gui, Add, Checkbox, vso, Stack Overflow

Gui, Add, Text, W120 ym, 翻譯類:
Gui, Add, Checkbox, vbdfy, 百度翻譯   
Gui, Add, Checkbox, vyoudaofy, 有道翻譯
Gui, Add, Checkbox, vgooglefanyi, Google翻譯

Gui, Add, Text, W120 ym, 音樂類:
Gui, Add, Checkbox, vwy, 網易雲音樂   
Gui, Add, Checkbox, vqq, QQ音樂
Gui, Add, Checkbox, vdog, 酷狗音樂
Gui, Add, Checkbox, vxiami, 蝦米音樂

Gui, Add, Text, W120 ym, 社區類:
Gui, Add, Checkbox, vjuejin, 掘金
Gui, Add, Checkbox, vjianshu, 簡書
Gui, Add, Checkbox, vcsdn, CSDN
Gui, Add, Checkbox, vzhihu, 知乎
Gui, Add, Checkbox, vsegmentfault, SegmentFault

; ym 能夠 y軸換列,有點相似float:left ,而 xm能夠換行,有點相似clear:both
Gui, Add, Edit, r9 vFirstName w300 Limit50 ym , 請輸入你要搜索的內容
Gui, Color, E6FFE6
Gui, Margin, 10, 10
Gui, Add, Button, w300 h30, OK
Gui, Show,, Simple Input Example
return 

; +g 其實就是添加吧
MySubroutine:
    MsgBox, %MyEditHwnd%
    MsgBox, %A_EventInfo%, %A_GuiEvent%, %A_GuiControl%, %A_Gui%
return


GuiClose:
ButtonOK:
Gui, Submit  ; 保存用戶的輸入到每一個控件的關聯變量中.
    if (bd == 1) {
    }
return

 

 

 

 

 

自定義托盤到圖標

 

 

文本插入

~^c::
    Clipboard := 
    Send, ^c
    ClipWait
    time := A_YYYY . "/" . A_MM . "/" . A_DD . " " . A_Hour . ":" . A_Min . ":" . A_Sec
    FileAppend, __________________%time%__________________`n`n%Clipboard%`n`n, ./tmp.txt
return

 

字符串操做:去掉空白、去掉換行、獲取長度

if (StrLen(Trim(StrReplace(Clipboard, "`r`n"))) != 0) {}

 

快速搜索demo

!space::
    InputBox, OutputVar, title, what's your Q?
    if (ErrorLevel == 0)
    {
        /*
        RUN, https://www.zhihu.com/search?type=content&q=%OutputVar%
        RUN, https://segmentfault.com/search?q=%OutputVar%
        RUN, https://www.google.com/search?q=%OutputVar%
        RUN, https://stackoverflow.com/search?q=%OutputVar%
        */
        RUN, https://www.baidu.com/s?wd=%OutputVar%
    }
Return

 

 快速搜索音樂demo

; 快速搜索音樂
!m::
    InputBox, OutputVar, title, enter a music name?
    if (OutputVar != "") 
    {
        RUN, http://music.163.com/#/search/m/?s=%OutputVar%
        RUN, https://y.qq.com/portal/search.html#w=%OutputVar%
        RUN, https://www.xiami.com/search?key=%OutputVar%
        RUN, http://www.kugou.com/yy/html/search.html#searchType=song&searchKeyWord=%OutputVar%
    }
return

 

 

(重要) 使用 #include 引入其餘代碼段

 https://wyagd001.github.io/zh-cn/docs/commands/_Include.htm

; 這裏是htinfo.ahk
::test::
    MsgBox, 321
return


; 這裏是main.ahk
#include htinfo.ahk

 

熱鍵也支持up 和 down到定義

F6 Up::
    MsgBox, 123
return

 

 

(重要)定義多個熱鍵同個功能

 

修改托盤圖標,但不能修改編譯好的圖標,其實沒什麼意思

Menu, Tray, Icon, ../static/favicon-201806020842523.ico

 

 

(重要)其實不須要輸入到文本,也能夠觸發的。譬如

::layui::
    run, https://github.com/dragon8github/ahk/blob/master/template/layui_template.zip?raw=true
return

咱們只須要輸入layui 而後按下回車便可,不必定須要輸出到面板。

 

scite4ahk 編輯器中間的神奇運用:鼠標中鍵列出全部的快捷鍵和定義。包含#include的東西

 

 

-十二、字符串累加,時間輸出

>^t::
time := A_YYYY . "/" . A_MM . "/" . A_DD . " " . A_Hour . ":" . A_Min . ":" . A_Sec
Send, % time
return

 

 

-十一、確認框

MsgBox, 4,, Would you like to continue? (press Yes or No)
IfMsgBox Yes
    MsgBox You pressed Yes.
else
    MsgBox You pressed No.

 

-十、十分經常使用的功能,獲取當前定義的快捷鍵A_ThisHotkey

::posa::
    SendInput, 
(
position: absolute`;
)
MsgBox, % A_ThisHotkey
Return

 

 

-九、疊加剪切板

::Test::
clipboard =   

Var = 
(
--Start Script
sendToAHK = function (key)
      --print('It was assigned string:    ' .. key)
      local file = io.open("C:\\Users\\TaranWORK\\Documents\\GitHub\\2nd-keyboard-master\\LUAMACROS\\keypressed.txt", "w") -- writing this string to a text file on disk is probably NOT the best method. Feel free to program something better!
      --Make sure to substitute the path that leads to your own "keypressed.txt" file, using the double backslashes.
      --print("we are inside the text file")
      file:write(key)
      file:flush() --"flush" means "save"
      file:close()
      lmc_send_keys('{F24}')  -- This presses F24. Using the F24 key to trigger AutoHotKey is probably NOT the best method. Feel free to program something better!
end 
)
RegExMatch(Var, "i)(\b\w+\b)(?CCallout)") 

Callout(m) {
    clipboard .= m . ","
   ; __Var__ = %__Var__% . %m%
    ;__Array__.Insert(m)
    ;MsgBox, % __Var__
    ;MsgBox m=%m% `n m1=%m1% `n m2=%m2% 
   ; __Var__ .= m
    return 1
}
return

 

 

-八、排序

MyVar = 5,3,7,9,1,1,13,999,-4
Sort MyVar, U N D,  ; N數值排序, D默認使用逗號做爲分隔符, U移除重複項
MsgBox %MyVar%   ; 結果是 -4,1,3,5,7,9,13,999*/
Return

 

 

 

-七、累加字符串,和php同樣, .= 便可

Array := []
Array.Insert("d")
Array.Insert("a")
Array.Insert("b")
Array.Insert("c")

for index, element in Array ; 在大多數狀況下建議使用枚舉的方式.
{
    ; 使用 "Loop", 索引必須是連續的數字, 從 1 到
    ; 數組中元素的個數 (或者必須在循環中進行計算).
    ; MsgBox % "Element number " . A_Index . " is " . Array[A_Index]

    ; 使用"for",同時提供了索引(或"")及與它關聯
    ; 的值,而且索引能夠是您選擇的*任何*值.
    ;MsgBox % "Element number " . index . " is " . element
    Var .= element
    MsgBox, % Var
}

 

 

-六、數組的建立和遍歷

請注意,數組不能直接msg出來,只能經過for遍歷

::arr::
    Array := []
    Array.Insert("a")
    Array.Insert("b")
    Array.Insert("c")
    Array.Insert("d")
    
    for index, element in Array ; 在大多數狀況下建議使用枚舉的方式.
    {
        ; 使用 "Loop", 索引必須是連續的數字, 從 1 到
        ; 數組中元素的個數 (或者必須在循環中進行計算).
        ; MsgBox % "Element number " . A_Index . " is " . Array[A_Index]

        ; 使用"for",同時提供了索引(或"")及與它關聯
        ; 的值,而且索引能夠是您選擇的*任何*值.
        MsgBox % "Element number " . index . " is " . element
    }

Return

 

 

 

-五、打開文本,等待文本,聚焦文本

+d::
    InputBox, OutputVar, title, enter your download url?
    if (OutputVar != "") {
        text := ajax(OutputVar)
        RUN, notepad
        WinWaitActive, 無標題 - 記事本, , 2
        if ErrorLevel {
            MsgBox, WinWait timed out.
        }
        else {
            ; 這裏須要聚焦一下
            Winactivate
            code(text)
        }
    }
return

 

 

-四、正則匹配,這裏最難和最坑的其實就是對\b的理解

https://wyagd001.github.io/zh-cn/docs/misc/RegExCallout.htm

::Test::
Var = 
(
--Start Script
sendToAHK = function (key)
      --print('It was assigned string:    ' .. key)
      local file = io.open("C:\\Users\\TaranWORK\\Documents\\GitHub\\2nd-keyboard-master\\LUAMACROS\\keypressed.txt", "w") -- writing this string to a text file on disk is probably NOT the best method. Feel free to program something better!
      --Make sure to substitute the path that leads to your own "keypressed.txt" file, using the double backslashes.
      --print("we are inside the text file")
      file:write(key)
      file:flush() --"flush" means "save"
      file:close()
      lmc_send_keys('{F24}')  -- This presses F24. Using the F24 key to trigger AutoHotKey is probably NOT the best method. Feel free to program something better!
end 
)
   ;  FoundPos := RegExMatch(Var, "iO)\s(\w+)|(\w+)\s", SubPat)
    ; MsgBox, % Match
    
    ; 保證特徵只有一個。那麼空格是很好的
    
;Haystack = The quick brown fox jumps over the lazy dog.
;RegExMatch(Haystack, "i)(\b\w+\b)(?CCallout)")

RegExMatch(Var, "i)(\b\w+\b)(?CCallout)") 

Callout(m) {
    MsgBox m=%m% `n m1=%m1% `n m2=%m2% 
    return 1
}
return

 

 

-三、GUI

https://wyagd001.github.io/zh-cn/docs/commands/Gui.htm

!q::
    Var = 
    (
        審查清單
        1、肯定設計稿的開發友好性(開發成本、沒法完美還原效果圖的地方)
        2、肯定一些特殊的元素是否有合理的邊界處理(如文案超出外層容器的狀況)        
        3、肯定頁面的框架結構(Layout)        
        4、肯定跨頁面可複用組件(Site Global Component)        
        5、肯定當前頁面可複用組件(Page Component)        
        ...
        
        把頁面想象成一套房子
        - HTML:能夠決定網頁架構結構(房子有幾間房,各個區域的用途是什麼)
        - Css:能夠決定網頁的樣式和佈局(房間的顏色,佈局,大小,裝修,主題,色調)
        - JS:決定頁面具體交互和功能(智能家居,如空調根據溫度自動啓動和調節溫度,燈光自動調節色溫,房門感應自動打開和關閉)
    )
    Gui, font, s14, Microsoft yahei
    Gui, color, f2f2f2
    Gui, Add, Text,, %Var%
    Gui, Show, W800 H600 X0 Y0 Center AutoSize, 標題
    return
Return

 

 

-二、Send打斷文本的解決方案,利用剪切板和複製黏貼

c(code)
{
tmp := Clipboard
Clipboard := code
SendInput, ^V
Clipboard := tmp
}

::gettop::
Var = 
(
function getElementTop(element){
    try {
      var actualTop = element.offsetTop;
      var current = element.offsetParent;
      while (current !== null){
        actualTop += current.offsetTop;
        current = current.offsetParent;
      }
      return actualTop;
    } catch (e) {}
}
)
c(Var)
Return

 

-一、網絡下載內容

https://segmentfault.com/a/1190000005041741

::gettop::
    whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    ; Open() 的第三個參數表明同步或者異步,如今不用過多關注,true 就能夠了
    whr.Open("GET", "https://autohotkey.com/download/1.1/version.txt", true)
    whr.Send()
    whr.WaitForResponse()
    version := whr.ResponseText
    MsgBox, % version
Return

 

::gettop::
    whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    ; Open() 的第三個參數表明同步或者異步,如今不用過多關注,true 就能夠了
    whr.Open("GET", "https://raw.githubusercontent.com/dragon8github/ahk/master/functions/gettop.js", true)
    whr.Send()
    TrayTip, 請稍後, 正在爲你下載gettop代碼,請保持網絡順暢, 20, 17
    whr.WaitForResponse()
    tmp := Clipboard
    Clipboard := whr.ResponseText
    send, ^V
    Clipboard := tmp
    TrayTip, 下載成功, (づ ̄3 ̄)づ╭❤~ , 20, 17
Return

 

 

 

 

一、官方示例

#z::Run https://autohotkey.com

^!n::if WinExist("Untitled - Notepad")
    WinActivate
else
    Run Notepad
return

 

1.0 、設置終止符(重要)

https://wyagd001.github.io/zh-cn/docs/Hotstrings.htm#EndChars

Hotstring("EndChars", "`n`t ")  ; 設置爲回車鍵、tab鍵和空格鍵

默認是這個:
Hotstring("EndChars", "-()[]{}:;")

 

1.1.1 將中文符號強制轉換爲英文

; 無視輸入法狀態發送字符串uStr函數
uStr(str)
{
    charList:=StrSplit(str)
    SetFormat, integer, hex
        for key,val in charList
        out.="{U+ " . ord(val) . "}"
    return out
}

,::SendInput % uStr(",")​
?::SendInput % uStr("?")​
.::SendInput % uStr(".")​
!::SendInput % uStr("!")
{::SendInput % uStr("{")
}::SendInput % uStr("}")
[::SendInput % uStr("[")
]::SendInput % uStr("]")
`;::SendInput % uStr(";")
>+;::SendInput % uStr(":")
(::SendInput % uStr("(")
)::SendInput % uStr(")")
>+'::
    a = "
    SendInput % uStr(a)
Return
'::
    a = '
    SendInput % uStr(a)
Return

 

 

 

 

 

1.一、快速重啓腳本

!r::
   send, ^s reload Return

 

1.二、使用常量,獲取年月日

!d::
    Send, %A_YYYY%/%A_MM%/%A_DD%
Return

 

 1.三、賦值剪切板

!x::
    a = fuck you!!!!!!
    Clipboard = %a%
Return

 

 

二、快捷輸入

^j::
    Send, My First Script
Return

 

2.一、明白 Send,和 SendInput的區別。前者是慢慢輸入,後者是直接輸入

::dg::
    Send, document.getElementById('')`;{left 3}
Return

::dg::
    SendInput, document.getElementById('')`;{left 3}
Return

 

三、補全

::ftw::Free the whales

輸入 ftw 而後按下【空格、tab、回車、分號,感嘆號等許多鍵時,會自動補全Free the whales】

 

四、彈出層

esc::
    MsgBox Escape!!!!
Return

 

五、彈出層2

::btw::
    MsgBox You typed "btw".
Return

 

 六、連續

^j::
    MsgBox Wow!
    MsgBox this is
    Run, Notepad.exe
#IfWinActive 無標題 - 記事本
WinWaitActive, 無標題 - 記事本 Send,
7 lines{!}{enter} SendInput, inside the ctrl{+}j hotkey Return

 亮點在於 #IfWinActive 無標題 - 記事本 和  WinWaitActive, 無標題 - 記事本。

前者是判斷當前是否爲記事本,後者是等待

 

七、組合鍵

Numpad0 & Numpad1::
    MsgBox You pressed Numpad1 while holding down Numpad0.
Return

Numpad0 & Numpad2::
    Run Notepad
Return

同時按下0+1或者0+2試試,就像按Ctrl + C 同樣便可,但必須是右側九宮格

 

 八、案例3的增強版,自動補全不須要其餘按鍵

:*:ftw::Free the whales

輸入 ftw就自動變成Free the whales

 

九、監聽當前窗口,其實案例6就已經展現了。這裏再補習一下

#IfWinActive 無標題 - 記事本
#space::
    MsgBox You pressed Win+Spacebar in Notepad.
Return

新開一個nodepad,而後按下快捷鍵便可。很是實用

 

十、如何添加註釋

; 這是註釋
#IfWinActive 無標題 - 記事本!q::
    MsgBox, You pressed Alt and Q in Notepad.
Return
#IfWinActive

 

 十一、#IfWinActive做用域、代碼塊 下才有效

; Notepad
#IfWinActive ahk_class Notepad
#space::
    MsgBox, You pressed Win+Spacebar in Notepad.
Return
::msg::You typed msg in Notepad
#IfWinActive

 只有在Nodepad下輸入msg + 【enter、space...等鍵】纔有效果

 

十二、輸入 j 補全

~j::
    Send, ack
Return

 

 1三、多個監聽

#i::
    Run, http://www.baidu.com/
Return

^p::
    Run, notepad.exe
Return

~j::
    Send, ack
Return

:*:acheiv::achiev
::achievment::achievement
::acquaintence::acquaintance
:*:adquir::acquir
::aquisition::acquisition
:*:agravat::aggravat
:*:allign::align
::ameria::America

 

 1四、組合鍵

^b::                                      
    Send, {ctrl down}c{ctrl up}               ; 等於按下Ctrl + C ,而後鬆開Ctrl鍵 
    SendInput, [b]{ctrl down}v{ctrl up}[/b]   ; 輸入[b]而後按下Ctrl + V,鬆開Ctrl鍵,而後輸入[/b]
Return     

正式開發不可能那麼複雜,而是使用熱鍵,譬如

^b::                                      
    Send, ^c               ; 等於按下Ctrl + C ,而後鬆開Ctrl鍵 
    SendInput, [b]^v[/b]   ; 輸入[b]而後按下Ctrl + V,鬆開Ctrl鍵,而後輸入[/b]
Return     

 

 1五、send換行快速使用enter

>^i::                                      
Send,
(
Line 1
Line 2
Apples are a fruit.
)

 

 1六、函數的使用

Add(x, y)
{
    return x + y  
}

^j::
    Send, % Add(2, 3)
Return

 

1七、函數直接Send,表達式,記得要加%

Add(x, y)
{
    Send, % x + y
}

^j::
    Add(2, 3)
Return

 

 1八、函數,拼接字符串

Add(x)
{
    return "{{}" x "{}}"
}

^j::
    Send, % Add("//...")
Return

 

1九、新建菜單,大有做爲的工具

更多實例請參考:https://wyagd001.github.io/zh-cn/docs/commands/Menu.htm

個人作法和官方的作法不同,並且也不符合複用和緩存的理念。但卻很是實用,更關鍵的是能用!若是按照官方的作法是有問題的。在正式實戰的時候

menu,add 默認會去掉重複項,但卻不會去掉分隔符,也就是空值,因此爲了方便直接每次顯示完後刪除全部最好了。

!p::
    ; Create the popup menu by adding some items to it.
    Menu, PythonMenu, Add, Item1, PythonHandler
    Menu, PythonMenu, Add, Item2, PythonHandler
    Menu, PythonMenu, Add  ; Add a separator line.

    ; Create another menu destined to become a submenu of the above menu.
    Menu, Submenu1, Add, Item1, PythonHandler
    Menu, Submenu1, Add, Item2, PythonHandler

    ; Create a submenu in the first menu (a right-arrow indicator). When the user selects it, the second menu is displayed.
    Menu, PythonMenu, Add, My Submenu, :Submenu1

    Menu, PythonMenu, Add  ; Add a separator line below the submenu.
    Menu, PythonMenu, Add, Item3, MenuHandler  ; Add another menu item beneath the submenu.
    Menu, PythonMenu, Show  ; i.e. press the Win-Z hotkey to show the menu.
    Menu, PythonMenu, DeleteAll
return

PythonHandler:
    MsgBox You selected %A_ThisMenuItem% from the menu %A_ThisMenu%.
return

 

 

20、彈窗獲取用戶輸入

https://wyagd001.github.io/zh-cn/docs/commands/InputBox.htm

#space::
InputBox, OutputVar, title, enter a music name?
if (OutputVar!="")
   MsgBox, That's an awesome name, %OutputVar%.

 也能夠用 ErrorLevel 來區分用戶點擊的是確認仍是取消

InputBox, UserInput, Phone Number, Please enter a phone number., , 640, 480
if ErrorLevel
    MsgBox, CANCEL was pressed.
else
    MsgBox, You entered "%UserInput%"

 

2一、獲取鼠標位置的顏色

!a::  ; Control+Alt+Z hotkey.
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
Clipboard = %color%
return

 

2二、彈出氣泡提示TrayTip

https://wyagd001.github.io/zh-cn/docs/commands/TrayTip.htm

!a::
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
Clipboard = %color%
TrayTip, my title, current color is `n %color%, 20, 17
return

 

23 關閉輸入法

SwitchIME(dwLayout){
    HKL:=DllCall("LoadKeyboardLayout", Str, dwLayout, UInt, 1)
    ControlGetFocus,ctl,A
    SendMessage,0x50,0,HKL,%ctl%,A
}

esc::
    ; 下方代碼可只保留一個
    SwitchIME(0x08040804) ; 英語(美國) 美式鍵盤
    ;SwitchIME(0x04090409) ; 中文(中國) 簡體中文-美式鍵盤
return
相關文章
相關標籤/搜索