AutoHotkey 学习指南(最近更新: 2012-03-09)


2014-10-01 更新:AutoHotkey 学习指南系列教程来了。

AutoHotkey这不是一份AutoHotkey详尽教程, 而是一份向导, 由于经常遇到许多新人在刚开始接触 AutoHotkey 时看着帮助不知道如何上手, 所以amnesiac(AutoHotkey中文论坛管理员)写了这个向导,希望能节省大家入门 AutoHotkey 的时间, 并可以根据自己的需求有选择地学习。

提示: 欲先简要了解 AutoHotkey, 请参阅维基百科上的 AutoHotkey 词条.

目录:
一. 基础资料和工具
二. 入门教程
三. 进阶专题
四. 一些应用集合
五. 分享和贡献
六. 相关网站及讨论区
附录:文章更新历史

一. 基础资料和工具

1. 中文帮助

可到 AutoHotkey 中文站查看在线帮助或下载离线帮助.

2. 编辑工具推荐

(1) SciTE4AutoHotkey 详情介绍及下载

介绍: 当前版本为 v3.0 rc版, 对 AutoHotkey_L 的支持全面, 建议新人使用.

(2) 含有语法高亮支持的其他编辑工具

帮助 (1.1.00.00+ 版本) 的 Edit 命令中有相关说明和论坛链接, 请参见: [Edit 命令页面]

3. 从 Basic 到 AutoHotkey_L 的兼容问题

兼容性问题根据原因可大致分为编码问题和数据类型问题, 具体参见

(1) 帮助中 “AutoHotkey_L/脚本兼容性” 和其他相关部分.
(2) 官方 Wiki 中 AutoHotkey_L 主题

二. 入门教程

1. 帮助中的 “指南 (快速入门)” 和 “FAQ (常见问答)
2. 自动化操作入门指南 (作者: yoken)
3. [推荐]AutoHotkey 0级入门教程:让重复工作一键完成 (作者: xbeta)
4. [推荐]輕鬆學會彈指神功-揭露AutoHotkey絕技
5. [推荐]小众快餐店系列教程 (作者: sfufoet)
6. 小鸟学AHK系列教程 (作者: wildtoy)
7. 更快的使用你的键盘 (作者: Jerry He)
8. 使用 SciTE 编辑 AutoHotkey 的常见问答
9. [英文]Tutorial for Newbies (作者: jaco0646)
10. [英文]Turn Any Action into a Keyboard Shortcut
11. [英文]AutoHotkey Frequently Asked Questions
12. [英文]AutoHotkey Expression Examples: “” %% () and all that. (作者: deleyd)
13. [英文]Force an Expression (作者: evandevon)
14. [英文]Creating Your First AutoHotkey Script (作者: The Fattest)
15. [英文]Simple automation of Windows and programs (作者: Wolfgang Reszel)
16. [英文]Knock down repetitive email with AutoHotKey (作者: AdamPash)
17. [英文]10 Ways to Use AutoHotKey to Rock Your Keyboard (作者: Leo Babauta)
18. [英文]How to compile .AHK files and include your own icons (作者: deleyd)
19. [英文]Guide to the Ternary operator (a ? b:c) (作者: VxE)
20. [英文]Gaming Tutorial (作者: System Monitor)
21. [英文]Using GetKeyState to Extend Hotkeys

三. 进阶专题

1. 消息指南 (相关命令: SendMessage, PostMessage 和 OnMessage)

帮助中的 “向窗口或者窗口控件发送消息” (作者: Rajat)
帮助中的 “WinLIRC 客户端
系统消息使用简介
[英文]Find WM_COMMAND parameter with Winspector (作者: SKAN)
[英文]Tutorial: Message Stacking (作者: majkinetor)

2. 正则表达式

正则表达式第一阶
[英文]官方Wiki中的正则教程集合

3. COM教程

AHK的 Web 自动化编程 (作者: 彪悍的小玄)[AHKCN 群共享中, 已建议发到中文论坛]
数据库操作示例 (作者: linpinger)
WMI 脚本第一阶系列教程
[英文]IE and Gui Browser Com Tutorial (作者: tank)
[英文]Basic Webpage Controls with JavaScript / COM – Tutorial (作者: jethrow)
[英文]IE Web Recorder Developers Needed (作者: tank)
[英文]Example of Navigating a Website (作者: deleyd)
[英文]Internet Explorer Control

4. 脚本辅助工具

Script Manager [AutoHotkey 脚本管理器]
Easy Automation AHK
AHK Window Info [窗口信息查看工具]
Auto-Syntax-Tidy [自动整理脚本语法]

5. 其他

帮助中 “自动化 Winamp
HK4WIN [通过热键执行系统中的大量常用操作](作者: 宋瑞华)
发送消息到QQ网站 (作者: ddandyy)
Candy [把内容通过关联程序的快捷操作扩展](作者: 万年书妖)  Candy改进版使用介绍
Lock Screen Appinn [屏幕密码锁]
GridMove [便捷窗口管理工具](作者: GridMove)
Folder Menu [文件夹快速切换工具](作者: rexx) 使用介绍
AHK俄罗斯方块 (作者: dracula004)
Qliner Hotkeys [使用屏幕键盘设置热键] 使用介绍
Texter [在 GUI 中设置热字串](作者: AdamPash) 简单介绍
验证码识别 (作者: lskxt)
ViATc [使用类 VI 模式操作 TC](作者: linxinhong)
Appifyer [应用程序集成和启动工具](含视频)(作者: sumon)
nDroid [快速启动程序的工具](作者: Rajat)
林可LINK [快捷方式管理及通过热字符启动](作者: megalove)
[英文]Tutorial: Message Stacking (作者: majkinetor)
[英文]AutoHotkey Scripts to Automate Firefox (作者: nigelle)
[英文]PostgreSQL Functions and a simple test script (作者: Dave)

四. 一些应用集合

1. 帮助中的 “脚本展示
2. [英文]Ahk Standard Library Collection (作者: Tuncay)
3. [英文]List of AutoHotkey Scripts
4. [英文]List of AutoHotkey Functions
5. [英文]1 HOUR SOFTWARE by Skrommel [合集下载]
6. [英文]AHK-Scripts for TotalCMD [合集下载]
7. [英文]Rosetta Code AutoHotkey Category [合集下载]
8. [英文]Overcards.com AutoHotkey Category
9. [英文]JGPaiva’s AutoHotkey Coding Snacks

说明: 上面这些合集的制作均使用AutoHotkey和其他工具半自动收集整理而成的.

五. 分享和贡献

1. 如果您想和大家分享脚本, 却苦于没有空间或不会制作网页, 那么这些都不再是问题了, 详情请参见: 欢迎在 AutoHotkey.net 上分享您的脚本

2. 如果您对 AutoHotkey 有浓厚兴趣, 那么欢迎进行罗赛塔挑战, 详情请参见: 实现罗赛塔任务 – 提升 AutoHotkey

感想: 贡献不如我们想象的那么难, 使用它本身也是贡献. 在别人有需要时, 向其介绍这个脚本语言的相关情况. 进一步地, 例如在官方论坛/中文论坛或其他问答类网站, 在力所能及时帮忙回答, 或者和大家分享您的脚本工具/函数等. 还有帮忙反馈 bug 和相关情况或提供自己的建议, 帮助作者改进. 如果您有能力, 还可以协助参与开发 (这是开源项目的好处之一).

六. 相关网站及讨论区

官方网站[英文]: http://www.autohotkey.com
中文站: http://cn.autohotkey.com
AHKCN QQ群: 58806956


附录:文章更新历史

2012-03-09: 增加几个工具和应用, 去除过时信息, 更新过时链接, 一些细节的人性化调整.
2012-01-29: 增加几个教程和应用及其他细节调整.
2011-11-16: 与 Chris Mallett 交流后建立 AutoHotkey 中文站 (域名由他免费提供), 迁移在线帮助到中文站中, 同时更新本文中相关链接. 增加 WMI 教程, 系统消息教程, 还有后续内容且有待进一步完善, 期待大家的反馈.
2011-06-22: 由于在官方论坛和中文论坛中, AutoHotkey_L 成为多数人的首选, 为了不给初学者造成困惑, 这个指南中将逐渐减少对 Basic 的关注. 增加中文在线帮助, 增加脚本辅助工具, 增加分享和贡献部分, 增加一些应用.
2011-04-28: 一些应用集合增加打包下载, 增加一些不错的应用, 更新失效链接, 更新中文帮助.
2011-02-02: 初稿.


《“AutoHotkey 学习指南(最近更新: 2012-03-09)”》 有 86 条评论

  1. 多谢善用佳软, 写这个的目的是想让刚接触 AutoHotkey 的人不再感到迷茫, 希望有这方面需求的人都可以认识并较容易的上手. 对这个指南, 我会继续更新, 最新版本参见: http://ahk.5d6d.com/thread-3696-1-1.html
    欢迎反馈相关意见和建议, 谢谢.

    对于这个文章我会持续进行更新, 欢迎大家提出建议和提供好的教程及资源等.
    ps: 虽然只是格式上简单的修改, 更容易阅读了.

    • 问个弱弱的问题:我遇到了热字串不生效的情况,win7 32系统,官网下载的AutoHotkey安装。
      代码很简单(t.ahk):
      ::tt:: test-问个弱弱的问题
      现象:
      1:必须运行两个.ahk程序(比如t.ahk, b.ahk,内容一样),而且得多试两次之后才能替换,只运行t.ahk不行。
      2:就算能替换了,也只能把tt替换成test-,后面的“问个弱弱的问题”丢失

    • @skystar, 06年刚接触时我曾开始翻译了一小部分帮助, 后来本本丢了, 我就没在去翻译了, 一放到了去年 9 月, 因缘际会, 就把原来论坛其他管理员组织的翻译余下部分完成. 这段时间发现, 从 05/06 年到 08 年底, AutoHotkey 在国内一直持续发展, 到 09 年似乎急转直下了. 现在回头看看, 国内不少博客里写的这方面文章教程, 在 08 年底 09 年初到顶峰, 之后许多戛然而止, 中文论坛的情况也类似, 有点纳闷. 欣喜的是, 现在情况在慢慢好起来.

    • @skystar, 恩,非常巧的是昨晚正好遇到一个人也是喜欢写AHK脚本的,于是探讨了很长时间,可见这门语言还没有消失

    • @囧啊囧, 真该好好握个手,记得从善用佳软写第一个AHK的介绍的时候,就开始了解下载并试用了,文档也看了研究了一些,但是最囧的就是不知道用他干嘛(虽然功能很多)
      后来就一直搁浅了,直到去年8月出来了ALTRun,虽然我很喜欢AHK,但是对我个人来说确实没什么必要用AHK了(之前用AHK就是想要快速启动而已)

  2. 上学时有需要想用autohotkey,但是当时没有中文资料,嚼不动,没办法,后来改用autoit了。autoit有中文社区,也有网友翻译的中文帮助文档。感觉我autoit的语法跟严谨一点,作为程序员,我还是比较喜欢autoit的语法风格。

    • @netfeel, 嗯, 相对来说 AutoHotkey 的语法灵活一些, 对于之前习惯函数式语法的人刚开始接触时可能对命令和表达式这样的语法会感到新鲜, 也可能会有些困惑, 帮助中对这方面描述较详细, 我遇到一些人在写了几个简单脚本后, 这样的问题就没了.(我个人感觉, 命令式语法相对于函数式, 对大部分非编程专业人士, 可能容易上手些.)

  3. ahk开发人员的功底明显不如autoit的。原来当autoit开源时,ahk还可以抄。于是autoit开发人员怒了,于是au3不再容易得到源码了。并且两个有亲戚关系的脚本语言的中文社区,ahk的简直根本没法与au3比了,au3的中文社区,有一大批热心“高手”答疑,并且au3已经完全完成成帮助/工具等的中文化。

    现在autoit的走向已经向一门“普通编程语言走去,而ahk走向更加地脚本化语言了
    对于语法结构两者越来越区别了:ahk向C语言方向走近,而au3向VB.net走近。就现在而言,au3能实现的功能更多。

    • @happytc, 首先我想说明我对工具是从我的需求出发衡量的, 如果我有偏爱, 也说明它更适合我的需求, 这点上我尽量真实于自己, 却不一定客观.

      您的一些观点我很赞同, 譬如ahk的中文社区差了许多, 帮助和工具等中文化程度不足, 这些是现状, 同时我们也注意到 AutoHotkey 在国外使用的比较广泛. 至于它们之间的历史情况, 从我看到的一些公开的资料中, 我比较赞成这么说: AutoHotkey 是从 Autoit2 的源码发展而来, “抄” 这个词较适合国内企业间的一些做法, 我觉得这时是贬义的, 用在开源界不太妥当. 说到普通的语言, 这点上两者都类似, 面向的以非专业编程人士为主, 其中的区别细微, 可能与个人喜好有关了. AutoHotkey 的命令式风格我感觉更接近批处理, 而 Autoit3的风格则是 Basic 风格.对于实现的功能, 两者没有什么区别, 都能调用WinAPI, 您所说的可能是指在一些方面对于非编程人士实现功能的方便性, Autoit 带有较多较方便的au3库文件.

      前面说了一堆, 可能看烦了, 抱歉. 最后, 我想说明, 从我自己来说, Autoit 我也喜欢, 并且和thesnow/无谓的蛋蛋等也有过相关的探讨. AutoHotkey或 Autoit 以及其他语言的推广都是为了方便大家的学习和工作, 推广 AutoHotkey 是给大家更多的选择, 并没有排斥 Autoit 的想法和做法. 我想对于需要的人都可以找到最适合自己的工具, 是我们大家共同的目标吧.

      • @amnesiac, 呵,要说热键ahk强大,还说不上吧,它仅仅是调用winapi的 RegisterHotKey()函数而已。这个随便那个语言都可以调用的。至于你说的“热字串”不知是啥意思,估计是说的正则吧。这个也是基本的语言都是调用相同的的正则引擎,就说不到那个强大了。

        倒希望ahk在ActiveX/COM方面赶快多开发点。这样会使它强大很多

        • @amnesiac, 其实我主要编程是用C/C++,脚本以前一般用Perl,后来用ahk多,在我被boss要求写一篇“ahk V.S. au3优缺点比较”后开始学au3,现在倒喜欢上au3了,用Perl和ahk都少了。

        • @happyTC, 很愿意看到你从你需求出发对它们分析的这篇文章.

          我认识一个人, 他的工作是用C/C++主要做驱动开发, 在这两者中他选择了AHK, 谈到原因时他只说了简洁强大. (我理解他所说的简洁强大不局限于热键和热字串).

          我前面提到了, 比较起C/C++或.NET或perl/python这些, AHK和AU3的定位是比较一致的, 不过如果从细节上看, 它们之间还有区别, 这些可能需要深度使用才能感觉到.每个人用软件时个人需求, 看软件的视角和使用的方式的差异, 都会让我们在实际环境中的真实感受和别人有差异, 这些都可以理解.

  4. 对我来说,想学太深,是有点难.
    不过在工作上,已经可以帮我应付好些重复劳动了.

    太Cool了,哈哈.

    最近在研究,用AHK,帮我点画面.呵呵

  5. win+方向上下左右是一定要设置的.千万别浪费了
    ==================================================================
    自从tc后,以前设置的一大堆键可以剩下80%了
    ==================================================================
    共享个每天用得最多的 ,因为经常要在电脑面前纸上写东西画图,所以直接就在键盘上写了,锁定后不用担心误输入,又避免了win+l锁定屏幕后参照不了屏幕上的内容..
    ::/abcd::
    BlockInput,Off
    ToolTip, un-locked
    Sleep,1000
    ToolTip
    Send,{ALT UP}{SHIFT UP}
    Send,{F12 UP}
    return

    +!F12::
    BlockInput,On
    ToolTip,Locking Locking Locking Locking Locking Locking Locking
    return
    ==================================================================

    有个未解决问题,新浪微博的pc客户端,nnd,怎么postmessage都没用,难道这种flex开发的有什么机关吗? 抓消息模拟消息发送搞了一晚上都还不行…大神救命啊

  6. 我对论坛不太熟悉, 去年设置限制了游客下载附件, 后来想去除, 却找不到哪里设置了. 暂时还需要麻烦点先登录, 我已经给别的管理员消息了, 上来后能设置好.

    我发的含附件的帖子, 原有一两个设置了下载限制, 后面都去除了, 之前让大家麻烦比较抱歉.

    • @amnesiac, 前两天有另一管理员检查了设置,其中没有限制游客下载附件,猜测可能是5D6D那里限制了,很抱歉,下载附件时还需要登录才行。

  7. ahk学起来真的好难呀!我学了将近2个小时竟一点语法都没参透,仍然停留在套用别人的脚本上。现在唯一能玩的也就只有Run和快捷键了…

    • @junili, 能套用别人的脚本说明已经理解了一些,我的感觉是命令式的语法,对于之前没有编程经验的人是比较容易上手的。例如《AutoHotkey 0级入门教程:让重复工作一键完成》中:

      msgbox, 这是我的第一个AutoHotkey脚本 `n 我既关注效率,也尊重版权
      run, http://xbeta.info/autohotkey-guide.htm

      上面首行,msgbox是显示消息框(message box的缩写),后面的参数是需要显示在消息框中的内容。次行,看到run,我们知道是运行一些东西,接着是需要打开的网页。如果把这两句按平常我们和别人对话一样读出来,会感觉到像下命令那样:给我显示消息框,内容是…;我需要运行,目标是…。和平常我们人与人之间(上级对下属下达任务时)的交流类似,只是这里和计算机交流指令要程式化一些。

  8. 其实ahk最缺的就是一份全中文的函数帮助。
    可惜,ahk国内没有象au3那样一群热心的人干这种事,关键是持续更新。

  9. 在善用佳软的脚本做修改,想作一个类似的firefox应用,但不成功。
    firefoxd在最小化时不能被激活,但是如果作为当前窗口,可以被最小化。估计是第三行有误,但找不出问题。请高手指点一下。谢谢。
    #f::
    DetectHiddenWindows, On
    IfWinNotActive ahk_class MozillaWindowClass
    WinActivate
    Else
    WinMinimize
    Return

    • @hi_lucky, try this:
      将%P_Firefox%换成你firefox的路径

      #c::
      DetectHiddenWindows, on
      IfWinNotExist ahk_class MozillaWindowClass
      ;;IfWinNotExist ahk_class Chrome_WidgetWin_0
      ;; Run %P_BroswerChrome%
      Run %P_Firefox%
      Else
      ;; IfWinNotActive ahk_class Chrome_WidgetWin_0
      IfWinNotActive ahk_class MozillaWindowClass
      {
      WinActivate
      WinWaitActive
      ControlSend, MozillaWindowClass1, ^) ;焦点落入搜索栏
      }
      ;;it doesn’t work with vimperator
      Else
      WinMinimize
      Return

      Return

        • @aptx4869, 谢谢你。没想到回的这么快。我还在那个http://xbeta.info/ahk-1.htm贴子里感谢你呢。我用了tc的那个快捷键,真是太方便了。

          试了一下。基本成功,但有问题。
          firefox最小化时是正常的。但从最小化转成最大化时,需要按三遍快捷键(win+c)才可以激活firefox,不知道是什么原因。
          ps:1、我是firefox5+vimperator,难道和这个有关系?
          2、我自己改的哪个,错在哪里?我是新手,看你写的这个挺深奥,不明白。

          谢谢。

        • @aptx4869,
          刚才不仔细,需要把firefox的路径改一下,于是又试了一遍。发现:
          需要按三遍快捷键,这下需要按7次了,不知道为什么。
          ps:%P_BroswerChrome% 是一个变量吗,需要改成什么吗?

          谢谢。

      • @aptx4869,
        这次看明白了,也成功了(可惜是在非vimperator状态下)。如果用vimperator,想激活firefox,需要按三遍以上。vimperator是不可以放弃的,看样子只能放弃这个功能了。

        • @hi_lucky, 话说你没有语法高亮功能的编辑器么,怎么会看不出注释……
          PS 下面这行也可以注释掉
          ControlSend, MozillaWindowClass1, ^) ;焦点落入搜索栏

        • @ aptx4869,
          这次成功了,我把WinWaitActive才注释了,所以才不成功。
          PS:我用的是vim,初学者。不会编程。

          再次感谢。你的这两个应用真是太方便了。

          • @ aptx4869
            @hi_lucky
            谢谢两位前辈的努力,我在2018年5月5日才看到两位的讨论,我也有同样的问题,看到两位的指点,我也成功实现了快捷键呼出隐藏Chrome浏览器。时隔七年,真是沧海桑田,造化弄人啊。经典的东西,经过多少年都不会被磨灭,知识穿越千年,依然照耀着人类前进的方向,向两位大牛致敬!

  10. 我想做一个脚本:每当激活一个窗口(包括新打开程序、使用Alt+TAB切换、由最小化激活),鼠标自动移动至激活窗口中心(仅一次),刚接触AutoHotkey,仅会使用快捷键移至激活窗口:
    !x::
    WinGetPos, X, Y, Width, Height, A ; “A”表示使用当前激活窗口为目标窗口
    W :=Width
    H :=Height
    MouseMove, W/3, 7*H/24, 2
    Return

    • @imacqing, 可以用 SetTimer 或循环中监视新窗口的激活

      GroupAdd, AllWindows ; 使用窗口组, 根据帮助中的说明这里添加了除特殊的 Program Manager 窗口外的所有窗口, 所以如果需要可以还必须适当修改
      CurrentWinID := “”

      Loop
      {
      Sleep, 200 ; 去除这句在一些系统中可能会比较卡, 实际中根据自己的情况去除或调节暂停的时间
      WinWaitActive, ahk_group AllWindows
      if (CurrentWinID = WinExist(“A”))
      continue
      CurrentWinID := WinExist(“A”)
      WinGetPos, X, Y, Width, Height, A ; “A”表示使用当前激活窗口为目标窗口
      W :=Width
      H :=Height
      MouseMove, W/3, 7*H/24, 2
      }
      Return

      我想可能有些细节还需要您自己调整.

      • @amnesiac, 使用过程中发现了不少问题,不知能不能把任务栏、单击激活的窗口排除在外?因为原来单击下层窗口菜单、按钮会激活窗口并且直接生效的,现在却是移动光标;单击下层窗口边框会出现移动、调整窗口的情况。

        • @imacqing, 我的方式是我对这个问题思考的思路, 对于您具体的情况我想您比较了解, 所以您是不是打算慢慢调整下代码呢? 这个过程也许会比我们这样交流来的快, 并且也充满了乐趣

        • @imacqing, 谢谢你的再次回答,那可不可以回答一下:能不能把任务栏、单击激活的窗口排除在外?因为我不知道有什么特征值可以区分单击激活的窗口与其他方式激活的窗口,如果不可以区分,我想这样的想法也就行不通了,也就此作罢。所以还得劳烦一下善老大。

        • @imacqing,
          依照老大你的建议,改成如下,可以实现点击激活不移动鼠标,总体上还算理想,但是Alt+TAB切换程序时鼠标的移动就变得时有时无了;有时在激活窗口中延迟移动鼠标;有时还出现二次(不多于三次)移动鼠标的情况,更难懂的是第一个if中最后那个or“orCurrentWinID = MousePointWinID”后不需要空格才实现了“点击激活不移动鼠标”,有空格则什么情况下激活都不会移动鼠标,小弟编程功底尚浅,着实摸不着头脑了,再次请教。。。

          GroupAdd, AllWindows ; 使用窗口组, 根据帮助中的说明这里添加了除特殊的 Program Manager 窗口外的所有窗口, 所以如果需要可以还必须适当修改
          CurrentWinID := “”
          MousePointWinID := “”

          Loop
          {
          Sleep, 200 ; 去除这句在一些系统中可能会比较卡, 实际中根据自己的情况去除或调节暂停;的时间
          WinWaitActive, ahk_group AllWindows

          WinGetClass, classa, A
          MouseGetPos, ox, oy, id, control
          WinGetClass, classb, ahk_id %id%

          if (CurrentWinID = WinExist(“A”) or WinActive(“ahk_class Shell_TrayWnd”) or classa != classb orCurrentWinID = MousePointWinID)
          continue
          if (WinActive(“ahk_class Shell_TrayWnd” or WinActive(“ahk_class ROCKETDOCK”) or WinActive(“ahk_class Static”) or WinActive(“ahk_class classa”) or WinActive(“ahk_class classb”))
          continue

          CurrentWinID := WinExist(“A”)
          MousePointWinID := WinExist(“ahk_class classb”)
          WinGetPos, X, Y, Width, Height, A ; “A”表示使用当前激活窗口为目标窗口
          A :=X
          B :=Y
          W :=Width
          H :=Height
          MouseMove, 5*W/12, 5*H/12, 1
          sleep,150
          send {Ctrl} ;显示鼠标位置
          sleep,200
          send {Ctrl}
          }
          Return

        • @imacqing,
          两个 if 语句看得我头晕了, 这里简化一下 (这样的简化我想满足了两个 if 语句中的条件, 不清楚是否符合您的要求):
          if (CurrentWinID = WinExist(“A”) or WinActive(“ahk_class Shell_TrayWnd”) or WinActive(“ahk_class ROCKETDOCK”) or WinActive(“ahk_class Static”) or id = WinExist(“A”))
          continue ; 这里 id = WinExist(“A”) 表明鼠标下的窗口为活动窗口

          其中中间的三个 Winactive() 还可以适当简化, 例如 InStr(“Shell_TrayWnd;ROCKETDOCK;Static”, classa), 或使用窗口组 (如果要排除的窗口较多)

          对于前面提到的第一个 if 语句, 这里简单分析: classa != classb orCurrentWinID = MousePointWinID
          这样的语句语法上没有问题, 却会让我们逻辑混乱. 首先计算 classa != classb orCurrentWinID, 逻辑运算结果为 1 或 0, 再把结果与 MousePointWinID 比较, 显然窗口 ID 永远不会是 1 或 0, 所以这个表达式结果总是假.

          补充一下, 这里不太适合这样的讨论, 可以直接给我邮件或在中文论坛发贴.

  11. 我想做一个脚本:每当激活一个窗口(包括新打开程序、使用Alt+TAB切换、由最小化激活),鼠标自动移动至激活窗口中心(仅一次),刚接触AutoHotkey,仅会使用快捷键移至激活窗口:
    !x::
    WinGetPos, X, Y, Width, Height, A ; “A”表示使用当前激活窗口为目标窗口
    W :=Width
    H :=Height
    MouseMove, W/3, 7*H/24, 2
    Return

  12. 有这么个需要,有一个软件我要开三个模板的窗口A、B、C,然后轮流打印,比如数据有20条吧,要切到A打1,切到B打1,切到C打1;回到A打2,到B打2,再到C打2,以此类推。
    每到一个窗口,比如切到A,按CTRL+P,按一下TAB,输入1,再按一下TAB输入1,回车。其他的也是这样,ABC的1打完了,要增1再打ABC的2,类推。
    请问如何写这个脚本或者给个思路,谢谢啦!

  13. 应该是09年下半年开始中文论坛的几个主要管理员渐渐忙自己生活上的事了吧,毕竟生活上的压力一直都在,几个人基本上属于同个年代,正是慢慢融入社会,可能主要是工作转型吧。

    像我自己就是因为工作的变动从而将AutoHotkey暂搁在了一边,同时也是因为自己水平和能力的限制,在编制了一批适用自己的脚本后,提升的空间慢慢缩小,而英文帮助文档的翻译又要静下心来费很大的气力,那时我是窝在家里,趁夜深人静才有一定的定力来翻译的……

    再加上管理论坛的杂事,以及组织网友翻译,发布任务,二审翻译,再打包发布,经常是最后还是自己重新翻译了一次……

    Helfee还是不错的,一直多多少少有跟着,那时候Bloom好似也坚持了很久。还有3m等等。

    我在2010年中途有重拾,但之后生活上的变动又让我将它放下了……

    直到最近我才知道AutoHotkey官方发生了那么多改变。

    也正是由于巧合,正要用到一个自动网络投票的脚本,才又和Helfee碰在一起,Helfee给力地一口气编了个,之后测试修改,我才又一次体会到了AutoHotkey的强大和方便。

    以后如果有空,应该还是会投点时间进去吧,呵呵~

    • 你好,我是ahk8的版主、管理 萝卜L/RobertL,有些关于域名配置的问题Morler大说需要联系域名持有人..
      抱歉,在善用佳软这挖坟了。实在不知道怎么联系了,我也在贴吧帖子、私信你了。

    • @allen, 嗯, 这样的方法可行
      如果只是在某个或某些窗口中使用此热键, 可以加上窗口判断, 这样不会意外地影响其他窗口.

  14. 关注博主博客一段时间了,内容很符合我的胃口,以后还会经常来的,…..壬辰年(龙)二月廿十 2012-3-12

  15. 你好,久仰大名。我是现ahk8论坛不称职的第N代版主/管理(ID:robertl/萝卜L),请问你是ahk8域名的持有人吗,目前ahk8因为DNS问题无法访问,可能需要进行设置。服务器主人morler曾给我说过(把解析地址改为http://n3007.ns.yunjiasu.com 、http://n3007.ns.yunjiasu.com ),但我不懂给忽略了。或者,你知晓应该联系谁吗?好像是Bloom。我邮箱是robertlzj @qq.com

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据