Autohotkey window 下宏键盘、宏命令开发入门

? ? ? ?

我的AHK下载地址:https://github.com/dragon8github/Pandora/raw/master/pandora.exe

AutoHotKey 下载:https://autohotkey.com/download/

国内自制的ahk网站:https://www.autoahk.com/

推荐下载installer

Autohotkey window 下宏键盘、宏命令开发入门_第1张图片

 

官方网站:https://www.autohotkey.com/docs/AutoHotkey.htm

中文官网:https://wyagd001.github.io/zh-cn/docs/Tutorial.htm

AHK脚本编辑器推荐:http://fincs.ahk4.net/scite4ahk/  |  https://wyagd001.github.io/zh-cn/docs/commands/Edit.htm#Editors

个人推荐使用sublime text作为autohotkey的编辑器,只需要安装aotuhotkey插件即可。

Autohotkey window 下宏键盘、宏命令开发入门_第2张图片

 

常量列表,十分实用: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

 

1、代价加入 #InstallKeybdHook,并且开启脚本

2、左键点击右下角的图标 -> View -> Key History

Autohotkey window 下宏键盘、宏命令开发入门_第3张图片

将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

 

 

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
- 替换函数方法

 

// 1、替换热字符串
Loop, 1000 {
Hotstring("::h" . A_Index, "height: " . A_Index . "px;") 
}

// 2、替换为label
Loop, 1000 {
Hotstring(":X:h" . A_Index, "HEIGHT_HANDLE_LABEL")
}

HEIGHT_HANDLE_LABEL() {
MsgBox, % A_ThisHotkey
}

// 3、替换函数方法
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 := "
" 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一起使用

Autohotkey window 下宏键盘、宏命令开发入门_第4张图片

 

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,, "https://github.com">github
Gui, Add, Link,, "https://legacy.gitbook.com">gitbook
Gui, Add, Link,, "https://www.cnblogs.com/cylee">博客园

Gui, Add, Text,  W120 ys, 其他:
Gui, Add, Link,, "http://youmightnotneedjquery.com/">notjQuery
Gui, Add, Link,, "chrome://inspect/#devices">安卓调试
Gui, Add, Link,, "https://wyagd001.github.io/zh-cn/docs/Tutorial.htm">AHK官网

Gui, Add, Text,  W120 ys, 娱乐:
Gui, Add, Link,, "https://www.bilibili.com/">哔哩哔哩
Gui, Add, Link,, "http://www.dilidili.wang/">嘀哩嘀哩
Gui, Add, Link,, "http://i.youku.com/u/UNTUzOTAwMzQ0">Ted魔兽
Gui, Add, Link,, "http://e.xitu.io/">掘金前端

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

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

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

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

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

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

Gui, Add, Text,  W120 ys, 最近浏览:
Gui, Add, Link,, "http://guss.one/guss/register.html?code=ec19c0ca">guss
Gui, Add, Link,, "http://www.51ym.me/User/Default.aspx">易码
Gui, Add, Link,, "http://www.manbiwang.com/#/">满币网

 

 

获取控件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 

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

 

 

 Autohotkey window 下宏键盘、宏命令开发入门_第5张图片

 

 

自定义托盘到图标

Autohotkey window 下宏键盘、宏命令开发入门_第6张图片

 

 

文本插入

~^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

 

 

(重要)定义多个热键同个功能

Autohotkey window 下宏键盘、宏命令开发入门_第7张图片

 

修改托盘图标,但不能修改编译好的图标,其实没什么意思

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的东西

Autohotkey window 下宏键盘、宏命令开发入门_第8张图片

 

 

-12、字符串累加,时间输出

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

 

 

-11、确认框

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

 

-10、十分常用的功能,获取当前定义的快捷键A_ThisHotkey

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

 

 

-9、叠加剪切板

::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

 

 

-8、排序

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

 

 

 

-7、累加字符串,和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
}

 

 

-6、数组的创建和遍历

请注意,数组不能直接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

 

 

 

-5、打开文本,等待文本,聚焦文本

+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

 

 

-4、正则匹配,这里最难和最坑的其实就是对\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

 

 

-3、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

 

 

-2、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

 

-1、网络下载内容

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

 

 

 

 

1、官方示例

#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.1、快速重启脚本

!r::
   send, ^s reload Return

 

1.2、使用常量,获取年月日

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

 

 1.3、赋值剪切板

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

 

 

2、快捷输入

^j::
    Send, My First Script
Return

 

2.1、明白 Send,和 SendInput的区别。前者是慢慢输入,后者是直接输入

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

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

 

3、补全

::ftw::Free the whales

输入 ftw 然后按下【空格、tab、回车、分号,感叹号等许多键时,会自动补全Free the whales】

 

4、弹出层

esc::
    MsgBox Escape!!!!
Return

 

5、弹出层2

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

 

 6、连续

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

 亮点在于 #IfWinActive 无标题 - 记事本 和  WinWaitActive, 无标题 - 记事本。

前者是判断当前是否为记事本,后者是等待

 

7、组合键

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

Numpad0 & Numpad2::
    Run Notepad
Return

同时按下0+1或者0+2试试,就像按Ctrl + C 一样即可,但必须是右侧九宫格

 

 8、案例3的加强版,自动补全不需要其他按键

:*:ftw::Free the whales

输入 ftw就自动变成Free the whales

 

9、监听当前窗口,其实案例6就已经展示了。这里再补习一下

#IfWinActive 无标题 - 记事本
#space::
    MsgBox You pressed Win+Spacebar in Notepad.
Return

新开一个nodepad,然后按下快捷键即可。非常实用

 

10、如何添加注释

; 这是注释
#IfWinActive 无标题 - 记事本!q::
    MsgBox, You pressed Alt and Q in Notepad.
Return
#IfWinActive

 

 11、#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...等键】才有效果

 

12、输入 j 补全

~j::
    Send, ack
Return

 

 13、多个监听

#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

 

 14、组合键

^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     

 

 15、send换行快速使用enter

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

 

 16、函数的使用

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

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

 

17、函数直接Send,表达式,记得要加%

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

^j::
    Add(2, 3)
Return

 

 18、函数,拼接字符串

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

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

 

19、新建菜单,大有作为的工具

更多实例请参考: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%"

 

21、获取鼠标位置的颜色

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

 

22、弹出气泡提示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

 

你可能感兴趣的:(shell,php,操作系统)