起因

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

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

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

windows和mac统一映射方案(windows和mac统一映射方案)(1)

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的版本,原因就是在这里了。

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

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

快捷键映射

快捷键映射方案如下:

$!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键
,