肥仔教程网

SEO 优化与 Web 开发技术学习分享平台

「AutoHotkey」windows和mac统一映射方案

起因

在公司用Mac,在家用Windows,需要 统一快捷键体验

网上搜索之后,发现了一个开源的软件AutoHotkey。

简单使用之后,又发现这个东西可以针对不同软件进行特别的按键映射,真的好厉害!

AutoHotkey官网

建议安装1.1.33.11的版本,而不是当前最新的1.1.34.01版本,原因之后会说。

学习基础语法

建议直接看AutoHotKey 按键映射极简教程,简单扼要的还有这个,初学者向导。

AU3_Spy.exe 提供的一个Windows程序ahk_class抓取的工具,后面脚本里程序的ahk_class就是通过这个软件抓取的,打开就知道怎么用了。

获取键盘映射

新建一个名为键盘钩子.ahk的文件,运行以下代码

SC02B::send,{SC02B}
return

在任务栏中双击键盘钩子.ahk,会打开一个页面,选择视图>按键记录和脚本信息(Ctrl+k),然后狂按你需要的那个键,按F5刷新,就能看见他的VK和SC值了

获取应用名称

windwos键+1 会复制当前应用的 ahk_class到剪贴板

#1::WinGetClass, Clipboard, A 
;windwos键+1 会复制当前应用的 ahk_class到剪贴板

然后就可以针对不同的窗口设定快捷键了

君匡魔改方案

禁用单击Alt

对我而言,首先便是禁用单击Alt,免得无意识敲击会导致焦点移动到上下文菜单栏,很是打断思路的。

Alt::Return

至于为什么我要求安装1.1.33.11的版本,原因就是在这里了。

经过在论坛上的讨论,我们发现最近两个版本对这条语句的支持呈现出极大的区别。

  • 1.1.33.11和更早版本是有效果的,所以建议大家安装这个版本
  • 1.1.34.00指定的Alt按键并没有被禁用
  • 1.1.34.01指定的Alt按键和其他的组合键都被禁用了

详细的讨论过程:论坛讨论。

快捷键映射

快捷键映射方案如下:

$!c::
Send {Ctrl Down}{c}{Ctrl Up}
Return
$!x::
Send {Ctrl Down}{x}{Ctrl Up}
Return
$!v::
Send {Ctrl Down}{v}{Ctrl Up}
Return
$!a::
Send {Ctrl Down}{a}{Ctrl Up}
Return
$!s::
Send {Ctrl Down}{s}{Ctrl Up}
Return
$!w::
Send {Ctrl Down}{w}{Ctrl Up}
Return
$!z::
Send {Ctrl Down}{z}{Ctrl Up}
Return
$!f::
Send {Ctrl Down}{f}{Ctrl Up}
Return
$!q::
Send {Alt Down}{F4}{Alt Up}
Return
$!Backspace::
Send {Delete}
Return
$!Left::
Send {Home}
Return
$!Right::
Send {End}
Return
$!+Left::
Send +{Home}
Return
$!+Right::
Send +{End}
Return

一些特别的映射就没有写出来。

鼠标切换桌面

鼠标切换桌面:

按住鼠标中键之后,用鼠标左右按键切换桌面

~MButton & XButton1::send #^{Right}
return
~MButton & XButton2::send #^{left}
return
~MButton & RButton::send #^{Right}
return
~MButton & LButton::send #^{left}
return

Capslock键切换中英文

把Windows下的CapsLock键调整为和Mac一致,即:

短按:中英文切换

长按:大小写切换

;管理员运行
if not A_IsAdmin
{
Run *RunAs "%A_ScriptFullPath%" 
ExitApp
}
;无环境变量
#NoEnv
;高进程
Process Priority,High
;一直关闭 Capslock
SetCapsLockState, AlwaysOff 
SetStoreCapslockMode, off
Capslock::
KeyWait, CapsLock
If (A_TimeSinceThisHotkey > 300)
SetTimer, mainp, -1
Else
Send ^{Space}
Return
mainp:
Send, {CapsLock}
Return

本质上是映射成为ctrl+空格,所以才可以完成中英文切换。

后来发现用这个方式没有办法将已经敲入的内容打到文本中,由于我是使用的手心输入法,所以我又改成为单按左侧Shfit就可以起效果 了。

If (A_TimeSinceThisHotkey > 700)
SetTimer, mainp, -1
Else
Send {LShift}

针对特别应用

对于记事本

#IfWinActive ahk_exe Notepad.exe
{
!q::
MsgBox, You pressed Alt+q in Notepad.
Return
}

对于windows资源管理器

#IfWinActive ahk_class CabinetWClass
{
^!q::
MsgBox, You pressed Ctrl+Alt+q CabinetWClass
Return
![::Send !{Left}
Return
!]::Send !{Right}
Return
}

对于谷歌浏览器

#IfWinActive ahk_exe chrome.exe
{
![::Send !{Left}
Return
!]::Send !{Right}
Return
}

最后一定要加一条单独的语句,结束个别窗口内的映射

#IfWinActive

感谢

  1. 感谢现在的好奇,为了能成为更好的自己。
  2. AutoHotkey官网
  3. 【AutoHotkey】我的windows和mac快捷键统一解决方案
  4. AutoHotKey 按键映射极简教程
  5. Win下最爱效率神器:AutoHotKey
  6. Windows下Capslock键切换中英文
  7. 高效利用CapsLock键
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言