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