昨天我问我如何禁用或重新分配臭名昭著的 CAPS LOCK 键。接受的答案将我指向AutoHotkey,这是一个功能强大的免费开源实用程序,用于 Windows 自动击键和鼠标点击。
该工具包括一个脚本语言,甚至一个编译器(!),它似乎工作得很好。例如,我设法在 Windows Vista 中使用此脚本将鼠标中键映射到 ALT-TAB 组合键:
MButton::AltTabAndMenu
return
Run Code Online (Sandbox Code Playgroud)
现在,我想做同样的事情,将 CAPS LOCK 键重新分配给 ALT-TAB:
CapsLock::AltTabAndMenu
return
Run Code Online (Sandbox Code Playgroud)
但这并没有达到预期的效果。它没有显示“ALT TAB”正在运行的应用程序菜单,而是显示了 Vista 开始菜单,就像我按下了 WIN 键一样。
有什么建议?
有没有办法在 AutoHotKey 中有条件地定义热键?我想为不同物理键盘的不同机器做不同的键盘映射。
这就是我想要做的:
RegRead, ComputerName, HKEY_LOCAL_MACHINE, System\CurrentControlSet\Control\ComputerName, ComputerName
If ( ComputerName = BDWELLE-DIM8300 )
{
#Include %A_ScriptDir%\Mappings-BDWELLE-DIM8300.ahk
}
Run Code Online (Sandbox Code Playgroud)
或者
RegRead, ComputerName, HKEY_LOCAL_MACHINE, System\CurrentControlSet\Control\ComputerName, ComputerName
If ( ComputerName = BDWELLE-DIM8300 )
{
LWin::LAlt
[more hotkey definitions that only apply to this machine]
}
Run Code Online (Sandbox Code Playgroud)
但是由于 AHK 在解释 If 语句之前解析 Hotkey 定义和 #Include 语句,因此 Hotkeys 定义(无论是否隐藏在 #Include 中)不尊重 If 条件。
感谢您将我指向 AutoHotKey_L!
您是否有关于如何有条件地定义热键的具体示例?语法非常混乱。这是我正在尝试的(在安装 AutoHotKey_L.exe 代替 AutoHotKey.exe 之后):
RegRead, ComputerName, HKEY_LOCAL_MACHINE, System\CurrentControlSet\Control\ComputerName, ComputerName
#If ( ComputerName = BDWELLE-DIM8300 )
LWin::LAlt
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用......
我已经看到了很多信息(这里和其他地方),关于一旦用户选择文本,您就可以让 AutoHotkey 处理文本,但是有没有办法让 AHK 脚本选择文本本身?
我正在编写一个脚本来将文本输入到 Web 表单字段中,我需要该脚本来选择该字段中已有的任何文本并将其删除。
我看过ControlGet但这似乎只适用于您可以获得控件名称的对话框,这意味着它不适用于 Web 字段。有任何想法吗?
我知道如何创建一个 AutoHotkey 脚本来切换到(比如说)一个 Firefox 窗口。
但是假设我打开了许多 Firefox 窗口。我希望每次按下该键时都切换到下一个窗口。
编辑- firefox 只是一个例子。它可能是我想要的 PuTTY 窗户。
我发现根据我的喜好,卸载 USB 驱动器需要点击太多鼠标。是否有命令行方式(XP 和 Vista)?
此外,我的眼睛状况使手鼠标协调变得困难,因此任何没有太多点击的建议都将被低估,因为它没有回答我的问题。
但是我经常使用 AutoHotkey,一个用例是从 AHK 脚本调用它。因此,如果有一种方法可以在 AHK 中对其进行编码。将此添加到标签中。
进一步的问题 - 当计算机是 a 时移除磁盘是否安全。在待机或 b。冬眠了。我记得如果你从休眠的机器上拉出一个磁盘,W2000 就会得到 uspet。或者最好在休眠或待机之前明确卸载或同步 - 可能是在脚本中。
发现无法将自定义键盘快捷键绑定到我为 Outlook 2010 编写的宏后,我转向 AutoHotKey 并有一个可行的解决方案,但它很笨拙。这是一个脚本,我还有两个执行不同的宏。
#IfWinActive, Inbox
^!1::
Send, {ALTDOWN}{F8}{ALTUP}
WinWaitActive, ahk_class #32770, Macros, 0
Send, ActionSelectedMessages{ALTDOWN}r{ALTUP}
return
Run Code Online (Sandbox Code Playgroud)
它发送 Alt-F8 打开宏对话框,等待窗口打开,然后发送宏的名称,然后发送宏的名称,然后发送 Alt-R 以运行它。这有效,但随着对话框的打开和关闭而缓慢且丑陋。
所以我的问题是,是否有任何方法可以从 AutoHotKey 执行 Outlook 宏,而不会像此解决方案那样造成任何界面副作用?
我想重新映射Caps Lock键以发送Ctrl+ Alt+ Shift,但我还想发送我在它之后按下的任何键。
例如,如果我按Caps Lock+t然后我想AHK送Ctrl+ Alt+ Shift+t 同样,如果我按Caps Lock+j然后我想送Ctrl+ Alt+ Shift+ j。
以下不起作用,因为它在我按下任何尾随键之前发送它。(我这样做,所以我可以映射快捷键Ctrl+ Alt+ Shift+ [key],并使用Caps Lock键来执行它们。
Capslock::send {^~+}
Run Code Online (Sandbox Code Playgroud) 当按下组合键时,我可以使用 AutoHotKey 发送一些字符。问题是 AutoHotKey 似乎不适用于使用 Synergy。
这是真的?我的意思是,AutoHotKey 是否与 Synergy 一起使用?
从这个帖子中,我了解了 AutoIt。如何使用 AutoIt AHK 方式?我的意思是,我如何分配一个组合键来发送一些字符序列?
鉴于 w 后面的数字可能是可变长度,我该怎么做?autohotkey 热字符串是否支持正则表达式或变量模式匹配?
我目前有 w 扩展到 width:px 并且光标位于 px 之前。
:oR0:w::width:px;{left 3}
我一直在试图弄清楚如何从触控板上“捕捉”三指和四指滑动以将自定义键盘命令绑定到它们。我认为也可以以同样的方式禁用点击点击。
我的想法是使用Autohotkey来捕捉信号并将动作(或不动作)绑定到该鼠标输入。问题是默认驱动程序不会将此信息传递给系统。
有谁知道如何从系统获取原始输入到 Windows 中 Autohotkey 的鼠标信号?某些应用程序、DLL 或其他什么?
这些代码来自我能够从 Magic Trackpad 捕获的默认 Autohotkey:
VK SC Type Up/Dn Elapsed Key
02 000 d 1.22 RButton
02 000 u 0.00 RButton
9E 001 d 2.15 WheelDown
9E 001 d 0.03 WheelDown
9F 001 d 1.22 WheelUp
9F 001 d 0.02 WheelUp
9D 001 d 1.83 WheelRight
9D 001 d 0.00 WheelRight
9C 001 d 1.22 WheelLeft
9C 001 d 0.02 WheelLeft
Run Code Online (Sandbox Code Playgroud)
使用上面的 WheelLeft 函数,我使用 Autohotkey 中的以下函数创建了两个手指滑动的后退按钮:
WheelLeft::
winc_presses = 1 …
Run Code Online (Sandbox Code Playgroud)