怎么只屏蔽单击win键,但是保留win+任意按钮的快捷键

求一个ahk脚本或其他方法
只屏蔽单击左右的win键,但是保留win+任意按钮的快捷键

#Requires AutoHotkey v2.0

; 屏蔽左 Win 键
~LWin::Send("{Blind}{vkE8}")

; 屏蔽右 Win 键
~RWin::Send("{Blind}{vkE8}")

通过不屏蔽win键按下,但在win键按下时发出一个不存在的组合键上实现。

  • 单独按win,系统会认为你按了 win+vkE8,因为这个组合键不存在,所以什么都不会发生。
  • 按组合键,先按下win,系统以为你按了win+vkE8,没事发生,又因为~,这时候系统以为你松开了vkE8,但继续按着win键,在等待下一个组合键,之后当你按D,L之类的组合键的时候,系统就检测到你按了Win + D,Win + L了。
7 个赞

太强了 感谢大佬

大佬如果还想要单独按下win发出其他快捷键比如win+E,或者双击win按下发出其他快捷键比如win+L,但不影响原本win+其他按键的快捷键有思路吗,好像不了用这个win+vkE8 的思路

~在哪儿体现了?没看懂"又因为~"这块

~LWin::Send("{Blind}{vkE8}")

LWin前边有个“~”

在AHK中,波浪号(~)是一个修饰符,表示“不屏蔽原按键的原有功能”,同时触发“::”后我要他执行的操作。

这样写对于系统来说,

用户按下win不丢等价于:

  • 按了一下win+vkE8
  • 马上松开vkE8

用户按下win,再按下D,再按下L等价于:

  • 用户按了win+vkE8
  • 马上松开vkE8
  • 但没松win
  • 又按了D:那不就是按了win+D
  • 又按了L:那不就是按了win+L

可以继续沿用这个思路,比如实现
「单独按下右win发出win+E,同时不影响原本win+其他按键的快捷键」
的AHK就这样写,把那个{vkE8}改成e就行了。

#Requires AutoHotkey v2.0

; 屏蔽左 Win 键
~LWin::Send("{Blind}{vkE8}")

; 屏蔽右 Win 键
~RWin::Send("{Blind}e")

至于双击win嘛,我没啥思路 :rofl:

我感觉用计时器和计数器应该可以搞定?之后抽时间再研究一下

看到屏蔽win键,我第一反应是键盘映射工具,像kanana之类的

但是ahk鼠标键盘都能改哈哈
感觉只能修改键盘映射的软件还是太局限了