君匡

V1

2022/05/12阅读:796主题:自定义主题1

【AutoHotkey】windows和mac统一映射方案

title: 【AutoHotkey】windows 和 mac 统一映射方案 author: 君匡

起因

在公司用 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. AutoHotkey 官网
  2. 【AutoHotkey】我的 windows 和 mac 快捷键统一解决方案
  3. AutoHotKey 按键映射极简教程
  4. Win 下最爱效率神器:AutoHotKey
  5. Windows 下 Capslock 键切换中英文
  6. 高效利用 CapsLock 键

分类:

工具介绍

标签:

开源软件

作者介绍

君匡
V1