百度空间 | 百度首页 
 
查看文章
 
小鸟学AHK(4)之高级教程:热键
2008-07-10 23:52

有朋友问了一些热键和热字符串的高级用法,本来我是想给如我一般的菜鸟一个入门的介绍,既然问到了,不回答面子过不去,可是俺也不会啊~~回头恶补了一下,发现要写成简易的文字还真是难,因为原文已经非常简易了。。。。只好原般照抄下来,关于热键和热字符串的简单用法看(1)就可以了,想深入系统学习的有志高手看下面吧。原文来自yonken翻译的AHK的帮助文档。

下章发热字符串,很想快点过去这段,给大家发些应用的小脚本。别着急啊

热键,也就是快捷键,可以用来触发某些指定的动作(例如运行一些程序或 宏指令(Macro))。下面这个例子中Win+N被设置为运行记事本的一个快捷键,井号[#]代表Win键(徽标键):

#n::
Run Notepad  ;“开始→运行”中可运行的程序都可以使用,其他程序需要指定路径
return

上面的最后一行的"return(返回)" 用以表示此热键的结束。不过,如果此热键只需要处理一行命令的话,那一行命令就可以放到双冒号的右边(不需要空格),换句话来说就是 return(返回) 可以省略了:

#n::Run Notepad

要使一个热键有更多调节键,只需把它们连续列出即可。下面这个例子中 ^! 表示Control+Alt:

^!s::
MsgBox 您按了Ctrl+Alt+S.
return

值得注意的是,和其它常用的热键一样,它们是有一个先后顺序的,例如上面的例子中,如果先按下S键然后才按Control和Alt将不能触发热键。举个例子来说,我们用Ctrl+Alt+Del来调出Windows任务管理器,同样也是有个顺序的,您可以自己实践一下,以下不再说明。

您可以使用下列调节键来定义热键:

符号 相关描述
# Win (徽标键)
! Alt
^ Control
+ Shift
& &可用在两个按键(包括鼠标按键)之间来组合它们成为一个自定义的热键。详细说明请看 下面。
< 使用成对按键(如Alt、Ctrl、Win)中左边的一个。例如<!a 和 !a 差不多,但是<!a是只有当按下左边的那个Alt时才会触发热键。此功能不支持Windows 95/98/ME。
> 使用成对按键(如Alt、Ctrl、Win)中右边的一个。同上,此功能不支持 Windows 95/98/ME。
<^>! AltGr。如果您的键盘布局中AltGr键代替了右边的Alt键,这一系列的符号就是用来表示AltGr键的(仅支持Windows NT/2k/XP或更高级版本)。例如:
<^>!m::MsgBox 您按了AltGr+m.
<^<!m::MsgBox 您按了左边的Control+左边的Alt+m.
* 通配符:只要包含有指定调节键的按键被按下即触发热键,经常用在 映射(Remap) 按键或按钮的时候。例如:
*#c::Run Calc.exe ; Win+C, Shift+Win+C, Ctrl+Win+C等等,只要有Win+C即触发热键。
*ScrollLock::Run Notepad ; 按ScrollLock后运行记事本,不管是否同时有control/alt/shift/win按键按下。此功能不支持Windows 95/98/ME。
~

如果自定义的热键和系统/程序原有的热键相同,则这些热键同时触发。在以下的两个例子里,当用户按下鼠标右键后,自定义的热键功能和系统/程序原有的右键菜单将同时触发:
~RButton::MsgBox 您按下了鼠标右键
~RButton & C::MsgBox 您按下了C键和鼠标右键

需要说明的是:在上面的例子中若没有~(即RButton)则将屏蔽原有的右键菜单,另外,一些专门用来代替 alt-tab 的按键将总是忽略这一设置,此功能不支持Windows 95/98/ME。

$

此符号只有当脚本使用 Send(发送) 命令发送的按键正好包含有热键本身的时候才会用到。在不同的系统上使用$前缀运行起来会有一些变化:

在Windows NT4/2k/XP 或更高级版本:将强制使用 键盘钩子(keyboard hook) 来执行热键。它的副作用就是阻止了 Send(发送) 命令触发热键。使用$ 前缀与使用指定的 #UseHook 等效。

在Windows 95/98/Me 以及AutoHotkey v1.0.23以上: 在其 线程(thread) 的执行过程中热键将失效,此后才重新生效。它的副作用是就算 #MaxThreadsPerHotkey 被设置为大于1也跟设置为1一样。

UP

UP通常写在一个按键名后面,用来表示当某按键被松开后触发热键而不是在其被按下后。下面的例子把左边的Win键映射(替换)成左边的Control键:

*LWin::Send {LControl Down}
*LWin Up::Send {LControl Up} ; 这样当左边的Control键坏了的时候就可以用左边的Win键来代替它。注意:并非完全替代,例如当按下LWin+Alt+Del的时候,并不会像按下Ctrl+Alt+Del一样出现Windows任务管理器。

"Up" 还可以配合一些常用的热键,例如: ^!r Up::MsgBox 您按下并松开了Ctrl+Alt+R.

此功能不支持 游戏操纵杆按钮。同时还要求在v1.0.28版本以上以及 Windows NT4/2000/XP或更高级版本才能有效。

(查看 按键列表 获得完整的键盘/鼠标/游戏操纵杆按键名列表)


可以把热键标记当作是普通标记来使用:您可以使用 Gosub/Goto 命令转到指定的标记,也可以定义多个热键标记到相同的子程序,例如:

^Numpad0::
^Numpad1::
MsgBox 按下Control+Numpad0或Control+Numpad1都会显示此信息。
return

如果一个热键没有定义任何动作,则这个按键或组合键将被屏蔽。下面的这个例子就屏蔽了右边的Win键:

RWin::return


仅在Windows NT, 2K, XP及其上平台有效的功能:

您可以使用" & "连接两个按键来自定义一个组合热键。在下面的这个例子里,您可以按着小键盘上的0然后再按下1来触发热键:

Numpad0 & Numpad1::Run Notepad
Numpad0 & Numpad2::Run Calc

在上面的例子里,Numpad0 是个前缀按键。正如下面的这个例子一样,前缀按键也可以设定其自己的动作,但只有当按键被松开的时候才被触发,而且在按下按键的时候不会更改任何热键:

Numpad0::WinMaximize A   ; 最大化激活窗口。

滚动鼠标滚轮(向上滚动或向下滚动)可以被定义为热键,例子:

MButton & WheelDown::MsgBox 您按着鼠标中键同时向下滚动了滚轮。
^!WheelUp::MsgBox 您按着Control+Alt同时向上滚动了鼠标滚轮。

还有一个功能是控制Numlock,Capslock,或Scrolllock这些键,使其保持开着或关闭的状态。例如:SetNumlockState, AlwaysOn

Windows内置的热键如Win-E(#e)和Win-R(#r)可通过在脚本中为它分配其他动作而达到屏蔽的目的。详细说明请查看 撤销或屏蔽热键 部分。

取替 Alt-Tab: AltTab和ShiftAltTab是两个比较特殊的命令,只跟热键结合使用才会有用,它们是用来取替Alt-Tab和Alt-Shift-Tab的。例如, 在下面这个例子里,你可以使用左边的Alt结合鼠标滚轮上下滚动来代替Alt-Tab和Alt-Shift-Tab进行切换。

LAlt & WheelDown::AltTab
LAlt & WheelUp::ShiftAltTab

类似地,只用鼠标也完全可以取替Alt-Tab,像下面一样,按下中键将显示切换界面,然后滚动鼠标滚轮即可进行切换,再次按下中键即可切换到选定窗口并退出切换界面:

MButton::AltTabMenu
WheelDown::AltTab
WheelUp::ShiftAltTab

如果您要用右手在键盘上切换(代替alt-tab),比较方便的方法是这样:

RControl & RShift::AltTab ; 按住右边的Ctrl键和Shift键来切换
RControl & Enter::ShiftAltTab ; 按住右边的Ctrl键和回车键来切换()

The other Alt-tab actions available are:
1) AltTabAndMenu: 如果存在切换界面则向右切换,否则显示切换界面。
2) AltTabMenuDismiss: 关闭切换界面。

现在您该知道以上所有关于Alt-tab的命令都必须像上面的例子一样分配给热键,否则它们将无效。


注意

由于Numlock键有开启/关闭两种状态,使得每个小键盘上的按键可在不同状态下触发两个不同的热键。当然,也可以把它们设置为触发同一个热键而不管Numlock的状态如何:

NumpadEnd::
Numpad1::
MsgBox, 热键将忽略Numlock的状态而触发
return

如果(~)结合前缀按键使用过一次,则含有那个前缀按键的热键都会向激活窗口发送前缀按键的动作。例如在下面的例子里,鼠标右键(RButton)就是前缀按键,上面的第一行命令规定了在按着鼠标右键的同时按下左键将触发热键而显示对话框,而且由于~的存在,右键命令也同时触发(例如显示右键菜单,如果有的话);需要注意的是第二行的命令规定了在按着鼠标右键的同时往上滚动鼠标滚轮将触发热键而显示对话框,而且由于没有~,右键命令将被屏蔽(例如屏蔽右键菜单) ,然而当此脚本执行的时候,右键命令依然会触发(例如不该出现的右键菜单出现了),因此需要特别注意这一点。

~RButton & LButton::MsgBox 您按着右键同时按下了左键。
RButton & WheelUp::MsgBox 您按着右键同时往上滚动了鼠标滚轮。

Suspend(中断) 命令可以临时关闭除了指定热键以外的所有热键。

在脚本运行的过程中,热键可以通过 Hotkey(热键) 命令动态地创建。Hotkey命令还可以修改、关闭或开启脚本中已有的热键。

游戏操纵杆热键目前不支持像^ (Control)和# (Win)这样的调节键前缀。不过,您可以使用 GetKeyState 来模拟它的效果,如下面这个例子:

Joy2::
GetKeyState, ControlState, Control
if ControlState <> D ;在这里D表示按键被按下
 return  ; 表明如果按钮未被按下则没有动作
MsgBox 您按着Control键同时按下了游戏操纵杆的第二个按钮。
return

这个程序有点类似 多线程, 它允许在前一个热键子程序仍在运行的时候运行新的热键,例如上面有一个热键被触发并显示 MsgBox(对话框),新的热键仍可以运行。


类别:三剑客ahk.tc.bb | 添加到搜藏 | 分享到i贴吧 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu