带你领略autohotkey无限魅力-尊龙官方平台

带你领略autohotkey无限魅力

el/2024/3/25 15:38:48

记得以前曾经用过一个定时软件,可以通过写程序定制要完成的任务,于是在网上搜索这个软件,但是没有搜索到,却不小心闯入了“善用佳软”的家里,发现了autohotkey。发现它越来越强大,远远不至善用佳软里介绍的功能,此后一发不可收拾,几年来不断地完善自己的代码,到目前为止到了依恋它的程序!

找到了这样的好东西,自然想拿出来与大家分享一下。我的同事对这个脚本很感兴趣,也想学习一下,但由于我没有对它进行整理过,自然也说不清。其实autohotkey是一种脚本程序,相对其他编程来说很简单,但初学者会被它的多种函数的调用方法及多样的赋值方法而迷乱。现在,我下定决心整理一下autohotkey,拿出来与朋友们分享,希望它能提高你们的工作效率!

我基本上是通过autohotkey自带的帮助文档学习的,我觉得这份文档的质量很好,简单易懂,不过是英文的,如果是搞程序的,应该不会有什么困难。我的这份笔记,是通过介绍常用功能的脚本来学习autohotkey的使用的。其实,我只不过用了autohotkey的冰山一角,就已经能满足我各种各样的需求了。

在学习这份教程之前, 你也许要做以下几项准备工作:
1、安装autohotkey编译器,只有4m左右的大小,官方网址:http://www.autohotkey.com/
2、了解一下autohotkey的基本知识,例如:
    autohotkey 0级入门教程:让重复工作一键完成 http://blog.sina.com.cn/s/blog_46dac66f010005g7.html
    autohotkey:帮助win run更方便 http://blog.sina.com.cn/s/blog_46dac66f010005cf.html
    autohotkey组简介:http://www.douban.com/group/autohotkey/
3、多看autohotkey自带的帮助文档


有了autohotkey,很多小程序就不再需要, 如lunchy,定时关机的程序>,拾色器,更不需要可编程键盘了!
下面我罗列一下,我常用autohotkey做什么:

1、更改键盘 :(复制地址 http://cwin.cech.com.cn/home/ahk/page1.htm  到地址栏打开该网页可观看flash演示, 直接点击链接无效 )
    通过autohotkey 来 hook 键盘输入,再执行自己的程序,
    当然也可以不执行什么东西达到屏蔽按键的目的。
    比如:在玩一些全屏游戏时,很容易一不小心就按到{win}徽标键
    (注:就是左下角介于{ctrl}与{alt}之间的按键,在这份教程中,将用{}来表示一个按键,
    如{shift}、{esc}、{space}空格键、{pageup}上一页 等等),
    那么我想屏蔽{win}键就只要写一行代码就行:
   
        lwin::return    ; 注释: lwin表示左边的{win}键
       
    就这么一行代码就屏蔽了左边的window徽标键,
    这样在全屏玩游戏时不用担心不小心按到了左边的徽标键,就算按到也没反应的。
    后面分号以后的, 是注释,程序不会执行。在autohotkey中,行注释是以分号开头的,
    值得注意的是,如果分号不在行首,分号前面还有其他字符,则分号之前必须用空格隔开,
    否则程序不会将分号视为行注释,而将其视为单词的一部分。

    再举个例子:你可以将p键与q键调换, 两行代码即可:
        p::q
        q::p
    如此一来,你按键盘上的p就输出q, 反之亦然。
   
    精彩应用:
    你是否见过多媒体键盘,有控制多媒体播放,一键上网,一键静音等等
    其实autohotkey中就包含了这些逻辑按钮,可以就像上面那行代码那样轻松地实现。
   
    此外,有些特殊的键盘(如日本过来的ibm r40e笔记本的键盘)在中文操作系统没有一点用处,
    但有了autohotkey之后,你可以将这些没用的神秘键变废为宝,达到奇妙的效果。


    
2、hotstring 定义快捷输入:
    快捷输入,就是输入法中所谓的自定义词组或段落,
    以后就可以通过输入简短的自定义关键字来输出一段文字,如:
    ::mail::goomood-cwin@yahoo.com.cn
    ::blog::http://blog.csdn.net/teshorse
    如此,当我输入mail并回车时,便会输出我的邮箱goomood-cwin@yahoo.com.cn
    输入blog回车时,就会输出 http://blog.csdn.net/teshorse
    很简单吧! 你应该发现关键字mail与输出的内容之间,用了两个冒号分隔。
    对了,在autohotkey中,就是用两个冒号来分隔关键字与要执行的命令的
    细心的你还可能会发现,前面lwin::return之前没有两个冒号,而这里在关键字之前多了两个冒号::mail::...
    没有错,这两者是有区别的,关键字前不带冒号的,表示它是单个键或者是组合键,一按下该键或组合键,马上生效
    而关键字前带了两个冒号,表示这是一个单词,在输入这个单词之后,
    还要输入回车或者空格之类的键表示单词输入结束,后面的命令才会生效
   
    令人遗憾的是,这种方法不支持中文,
    不过我们可以借助剪贴板来让它支持中文,请留意后面教程

3、执行程序
    要执行一个程序,也是非常简单地,用run命令,一行代码即可:
    run , http://blog.csdn.net/teshorse         ; 打开我的博客
    run , c:/000.txt                            ; 打开文件或文件夹
    run notepad                            ; 直接打开记事本
   
    与前面介绍的hotstring结合起来,就可以定义一个关键字(我称之为hotstring热键的关键字吧)来执行打开程序的命令,如:
    #n::run notepad                            ; 同时按下{win}{n}键, 打开记事本
    ^!c::run calc.exe                            ; 同时按下{ctrl}{alt}{c} 组合键将打开计算器程序
    这里#n和^!c是组合键, 在组合键中, #代表{win}键,^代表{ctrl}, !代表{alt}, 代表{shift}
    {ctrl}、{alt}、{shift}一般有左右两个,可以在前面加<代表左边的那个,>代表右边的那个
    如<#n代表组合键 左{win}{n}, 而>#n代表组合键 右{win}{n}
   
    注意:^!z将会hook掉{ctrl}{alt}{z}, 即运行了有 ^!z::... 的脚本文件之后,
    按下组合键{ctrl}{alt}{z}之后,  其他程序将收不到这个组合键, 即屏蔽掉了这个热键
    比如qq程序的{ctrl}{alt}{z}热键就被屏蔽了, 按下ctr alt z不会弹出消息窗口了
   
    如果想某热键运行自己的程序,同时不影响其他程序设置该热键,那么在该热键关键字前加个符号~
    如 ~^!z::run notepad
    如此一来, 当前按下ctrl alt z的时候,会打开记事本,同时不会影响qq弹出消息窗口
   
    以后教程中,将介绍以下几个关于运行程序更高级的应用:
    运行窗口,快速启动程序
    在资源管理器中,一键用指定程序打开选中文件
    在文本编辑器是,一键打开当前编辑的文本所在的目录
    先来看一下flash预览一下它们的功能:
    todo: flash
   
4、对窗口进行操作
    窗口最大化、最小化:
        winmaximize a            ; 最大化当前窗口
        winrestore  a            ; 还原窗口大小
        winminimize a            ; 最小化当前活动窗口
    窗口置顶:
        winset,alwaysontop,, a    ; 将当前窗口置顶, 即始终保持窗口在其他窗口上面
    窗口透明:
        winset, transparent, 210, a        ; 设置当前窗口透明度, 210为透明度, 该值越小越透明
        winset, transparent, off, a        ; 取消透明度
    改变窗口大小和位置:
        winmove,a,,300,200,640,400        ; 将当前窗口移动到(300, 200), 并且设置宽度为640, 高度为400
    注意:在autohotkey中, 单词a代表当前窗口的标题
   
    以后讲解更高级的应用:自动缩放窗口大小,自动调整窗口透明度:

5、模拟用户输入
    通过使用send / sendinput / sendevent / sendraw 命令可以模拟用户输入
    例如可以将前面的 ::blog::http://blog.csdn.net/teshorse 改写成
    ::blog::
        send http://blog.csdn.net/teshorse
        return
    这种方法模拟了用户将http://blog.csdn.net/teshorse字符串一个一个字符输入
    注意: 当hotstring命令写成多行时, 必须在命令最后用return结束该命令, 否则会执行到后面其他的命令
    send 命令还可以模拟输入组合快捷键
    ::cn;::
        send ^{space}
        return
    这里就是通过cn;关键字, 调用send命令输出组合快捷键ctrl space, 在中文操作系统一般用来切换中英文输入法.
    你可以在输入文字的时候, 随时通过输入cn;;切换中英文输入法, 而不用再去按ctrl space.
   
    sendinput 与 send 效果一样, 只是将要输入的字符串当作一个整体一次性输出, 而不像send将一个字符一个字符进行输出.
    因此, sendinput 的输出速度要比send 快得多.
    sendraw 将字符串原样输出, 就像使用剪贴板粘贴一样, 因此:
    ::cn::
        sendraw ^{space}
        return
    输出的不是组合ctrl space, 而是字符串"^{space}"
   
    以后将会介绍奇妙的应用:
    自动给你格式化注释行, 即先选中你要注释的内容,
    然后按个快捷键并选择需要的线形, 就会根据内容长度,
    注释成一个漂亮的注释格式, 请看flash

    或许, 你可以使用send模拟玩家输入, 写出一个游戏的外挂出来.
   
6、修改系统时间
    写个修改系统时间的函数
    changesystemdate(datetoset)
    {
        char = -
        formattime,toset,�tetoset%,yyyy%char%mm%char�
        runwait %comspec% /c date %toset%,,hide,
    }
    调用该函数即可, 如:
    ::changesystime::
        changesystemdate(20090913)
        return
    可将系统时间设置为2009年9月13日
   
7、定时器,提醒任务,开关机
    示例: 写一个定时关机程序, 每当晚上超过23点就进入关机倒计时(30分钟),
    30分钟过后就会提醒关机睡觉, 再等一分钟还没关机, 则强制自动关机!
   
    settimer 每分钟检查,60000         ; settimer 命令启动定时器 "每分钟检查", 60000 是毫秒, 即一分钟执行一次
   
    每分钟检查:                        ; 定时器, 循环执行定时器里的代码.
        if (a_hour=23 or a_hour<5)    ; a_hour 是系统变量, 是当前系统时间中的小时
        {
            if (var_shutdown>30)    ; var_shutdown 是自定义变量, 倒计时, 单位(分钟)
            {
            var_shutdown := 30
            iniwrite %var_shutdown%,log.ini,time,shutdown    ; 将倒计时间写到配置文件log.ini
            }
        }
        if (var_shutdown<=0 or var_shutdown>var_maxtime)
        {
            iniread var_shutdown,log.ini,time,shutdown
            if(var_shutdown<=0)
                var_shutdown := var_mintime
            else if (var_shutdown>var_maxtime)
                var_shutdown := var_maxtime
        }
        if (var_shutdown<=1)        ; 倒计时剩下最后一分钟, 弹出消息窗口, 提醒用户关机
        {
            blockinput,mousemove
            msgbox 4,限定时间到, 本次开机时间还有一分钟结束`n准备关机!, 30
            sleep 6000
            shutdown, 9                ; 时间到, 强制关机, shutdown 是关机命令
            return
        }
        var_shutdown--
        iniwrite %var_shutdown%,log.ini,time,shutdown
    return
   
8、超级计算器, 示例:
    用文本输入:
    x:=12
    y:=23
    r:= sqrt(x*x y*y)
    cout(r)
   
    选中上面的几行代码, 按下 win alt r,将会输出得到结果 25.942244
   
9、自己的输入法
    这是我的得意之作,可以很快速地将一段文字定义成hotstring。
    与输入法中的自定义快捷段落不同的是,
    同样一个关键字,在不同的窗口将会输出不同的内容。
    举个具体一点例子,我可以定义一组关键字为myadd的hotstring,
    实现用qq跟张三聊天时输入myadd时输出“深圳市福田区会展中心”,
    跟李四聊天同样输入myadd时却输出“上海市浦东新区张江科技园”
    而在vs2005里则输出一段程序代码片段。
    输入法是无法做到的这个因窗口而异的功能!

    听晕了吧, 正在制作视频演示, 敬请期待!
   
最后, 总结一下本节教程要点:

1. 行注释用分号,当分号不在行首时,前面要用空格隔开
2. 不区分大小写
3. 关键字与程序命令之间,用两个冒号 :: 进行分隔
4. 单个键或组合键,关键字前面不要加两个冒号,一按此键命令马上执行
   如果关键字是一个单词,则要在前面加两个冒号,输入单词并回车命令才会执行
5. autohotkey可在window xp/2000/vista上很好地工作,在98之前高级功能受限,linux操作系统不支持
6. 单词a代表当前窗口的标题
7. 当hotstring命令写成多行时, 必须在命令最后用return结束该命令, 否则会执行到后面其他的命令
8. 使用send / sendinput / sendevent / sendraw 命令可以模拟用户输入
9. hotstring 可以识别窗口,可以根据不同的窗口输出不同的内容


http://www.ngui.cc/el/5126770.html

相关文章

autohotkey 控制窗口

今天终于录制完了第一个展示autohotkey 控制窗口的功能, 第一次录制有些紧张, 不管怎样, 先发出来给大家目睹一下autohotkey 控制窗口的强大能力! 代码后面附上:

cs模块与插件之间的参数传递

cs 模块与插件之间的参数传递 2009 年9 月29 日 星期二 11:54 一、整型参数的传递 写一个模块, 功能是动态存储一些数据, 以供插件调用 给插件的接口为 : get_user_info(csid, &card, &money); 从模块中读取 card/money 数据 set_user_info(csid…

autohotkey运行程序的命令

本节视频展示autohotkey运行程序的命令run的妙用。 1、一键用指定程序打开所选文件。例如在资源管理器中选择文本文件, 按f8用emeditor打开编辑 2、一键上网搜索。例如:选中单词, 按winf9上爱词霸网站搜索该单词, 按appskeyf9用google搜索该单词. 3、快速启动程序的运行窗口。…

手动设置:自动登录windows xp操作系统

新装的windows xp,没有设置密码,每次登录时却会弹出登录窗口,空密码并点击确定登录。 空密码不如让他自动登录,这样更快速地进入系统。以前用过优化大师可以让xp自动登录, 那么有没有什么办法不用借助软件实现自动登…

mfc中基于对话框程序快捷键的实现

作者: 苍竹先生 --------------------------------------------------------------------------- mfc中基于sdi和mdi的程序,默认情况下有快捷键资源,直接建立快捷键与消息的映射,就能实现程序的快捷键,而基于对话框的…

vc6.0 实现 从pdf提取文本内容

本文摘录了vc6.0下,利用minidx extract-text com组件读取文本内容的方法的两篇文章,并做了一些自己的笔记 一、《利用minidx extract-text com组件从word,xls,pdf……等文件中读取文本内容》 http://blog.minidx.com/2008/01/10/373.html demo(vc…

ahk 切换/获取当前的输入法

用ahk代码实现输入法的切换,和获取当前的输入法,这只是一个示例,你可以发挥把它做成更有用的程序,例如对指定的窗口使用指定的输入法,可以为 每个输入法设置一个单独的快捷键等。不过有个 bug,当输入法切换…

让虚拟机可以无线上网而主机不能上网

我的要求比较变态,希望笔记本(主机)不能上网,而虚拟机客户机可以无线上网。这是因为自从用过华硕那 款可以8秒启动系统的上网本之后,就越来越对预装了vista操作系统的hp笔记本的速度,无法容忍!多…

设置 vim 自动缩进

我用vim编辑autohotkey脚本,写脚本也算写程序吧,但是发现不能自动缩进,于是寻找自动缩进的设置方法,找到如下: 在ahk的语法文件vim/vim72/syntax/autohotkey.vim中添加这行代码即可: set autoindent …

使用autohotkey分析日志文件,得到分析报告。

使用 autohotkey 分析日志文件,得到分析报告。 由程序自动生成的日志文件一般有固定的格式,而且文件大小通常比较大。当需要分析这样的日志文件,需要用肉眼在成千上万条记录里面寻找异常,那将是大海捞针,十分费力费时…
网站地图