君匡
2022/05/12阅读:796主题:自定义主题1
【AutoHotkey】windows和mac统一映射方案
title: 【AutoHotkey】windows 和 mac 统一映射方案 author: 君匡
起因
在公司用 Mac,在家用 Windows,需要 统一快捷键体验。
网上搜索之后,发现了一个开源的软件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
感谢
感谢现在努力的自己。
作者介绍