我有一个键盘(罗技 Wave(如下图所示)我对此非常满意。不幸的是,制造商已将右键单击按钮更改为 FN 键。
是否有任何程序可以将 FN 键重新映射到其他键?
答案1
Fn 键可以重新映射或禁用吗?
通过 AutoHotKey 之类的程序深入研究重新映射 Fn 组合键,或者深入研究 Windows 的键盘扫描码,人们可能能够重新映射令人反感的组合键(Fn + Key)。(请参阅此答案的下文)。
由于 Fn 键通常处于硬件级别,因此无法在此级别编辑或禁用此功能。
[Fn] 这通常是不会生成单独代码的硬件键。
来源:UI 事件 KeyboardEvent 代码值 - W3C 候选推荐,2017
对于类似的钥匙 F-Lock,微软 MVP Jason Tsang 说道:
F Lock 键是键盘上的硬件开关。其状态无法通过编程控制。其默认状态为“关闭”。因此,每当键盘重置或断电时,F Lock 键将始终处于“关闭”状态。请注意,对于 2004 年 9 月之后发布的 Microsoft 键盘,键盘将在重新启动后保留 F Lock 状态。
Fn 键是什么?更多详细信息:
Fn 不是普通的键盘键,例如 Ctrl、Shift 和 AltGr 等修饰键。对于标准修饰键,键盘内的微控制器会发送修饰键本身的扫描码,然后由操作系统解释并与其他同时按下的按键相结合。Fn 键是一种元修饰键,当按下键盘上的其他键时,它会导致操作系统看到改变的扫描码。这允许键盘直接模拟全尺寸键盘,因此操作系统可以使用为全尺寸键盘设计的标准键盘映射。但是,由于操作系统没有 Fn 键的概念,因此与所有其他标准键盘键不同,该键通常无法在软件中重新映射。
为什么映射 Fn 键常常看似不可能?
事实上,键盘的工作方式如下(值仅仅是示例,行为被简化):
- 普通按键:发送字节0x00+按键扫描码字节
- 修饰符(alt/option、control、windows/command 和 fn):发送修饰符扫描码字节 + 键扫描码字节
- 特殊键(如 G15 键):发送标准(如音量键)或自定义(取决于制造商)扫描码
大多数“fn”键盘(包括苹果键盘)在发送数据之前只会处理组合键,因此按下和释放 fn 键不会执行任何操作。例如:
- 按 F1 -> 扫描码 0x1A -> 操作系统识别为 F1 键
- 按下 FN 和 F1 -> 扫描码 0x9A -> 操作系统识别为 VolumeUp 键
- 按下 FN -> 键盘微控制器等待另一个键,然后才发送任何数据
AutoHotKey 上的一张海报以反问句开头
I don't get any response when I press the Fn key.
fn 键不应该发送任何信号。它的作用是更改按下另一个键时发送的信号...
因此,Fn 键的真正作用在于它根本不存在于操作系统中,因此您无法在操作系统中实际“重新映射”它。您所能做的就是通过重新映射某个键来发送 fn 修改的单个信号,从而重新映射某个键的辅助功能...
所以基本上,自动化 fn-key 是不可行的。但是自动化其最终结果没有问题!...
因此不幸的是,在操作系统级别上无法实现自动化:您必须深入到硬件/驱动程序级别,而这通过 AutoHotKey 是不可行的。
有些人已成功通过 Autohotkey 重新映射 Fn 功能,少数人甚至成功看到了 Fn 键。
...您仍然可以按照以下步骤将其设为热键:
- 确保至少有一个正在运行的脚本使用了键盘钩子。您可以通过打开脚本的主窗口并从菜单栏中选择“查看->按键历史记录”来判断脚本是否具有键盘钩子。
- 双击该脚本的托盘图标以打开其主窗口。
- 按下键盘上的某个“神秘键”。
- 选择菜单项“查看->密钥历史记录”向下滚动到页面底部。
- 靠近底部的位置是按键的按下和松开事件。
- 注意:某些键不会生成事件,因此在此处不可见。如果是这种情况,您无法直接将该特定
键设为热键,因为您的键盘驱动程序或硬件处理该键的级别太低,AutoHotkey 无法访问。有关可能的解决方案,请参阅下文。如果您的键可检测到,请记下 列表第二列中的
3 位十六进制值(例如 159)。要 将此键定义为热键,请按照以下示例操作:
SC159:: ; Replace 159 with your key's value.
MsgBox, %A_ThisHotkey% was pressed.
return
反向:要将其他键重新映射为“神秘键”,请按照以下示例操作:
; Replace 159 with the value discovered above. Replace FF (if needed) with the
; key's virtual key, which can be discovered in the first column of the Key History screen.
#c::Send {vkFFsc159} ; See Send {vkXXscYYY} for more details.
来源:autohotkey.com/docs/KeyList.htm
使用 AutoHotKey 通过 DLL 进行重新映射
AutoHotkey 是一款适用于 Windows 的开源宏制作实用程序,其众多功能之一就是创建热键。AHK 论坛成员之一 Micha 创建了一个 DLL 文件,以添加对 AHK 的人机界面设备的支持。使用此 DLL 文件,可以读取几乎所有 HID 的按键;键盘、鼠标、遥控器等。
以下是 DLL 进程创建者在一篇旧文章中所说的内容:
首先,介绍一下键盘和 Fn 键的工作原理。每个键都有自己独特的代码,即扫描码,通过该代码,所连接的计算机可以确定某个键是否被按下以及何时被释放。Fn 键的工作原理略有不同。按住 Fn 键时,它会更改键盘上其他键(部分)的扫描码,这样单个键就可以将不同的扫描码发送回计算机,每个扫描码都与不同的功能相关。这就是为什么 Fn 键经常用于笔记本电脑、小型键盘或带有大量多媒体键的键盘。这样,您就可以在相对较少的键上添加许多功能。
问题是 Fn 键通常没有自己的扫描码。根据键盘和它所连接的计算机,Fn 键可能不会修改其他键的扫描码,因此不起作用。由于它也不会发出自己的扫描码,因此计算机根本无法知道甚至有一个 Fn 键,更不用说当它与另一个键组合按下时该做什么了。重新映射工具也无法帮助您,因为它们也是基于扫描码的使用。
根据指令记录Fn键值示例:
一旦运行,按下 Fn 键或其他特殊键,并写下相应的值。
; Filter bit 5 (Fn key) Transform, FnValue, BitAnd, 16, KeyStatus
重新映射 Fn 函数的示例代码
;
; Fn + Backspace = Delete
;
$Backspace::hotkeyBS()
hotkeyBS() {
global fnPressed
if (fnPressed = 1) {
Send {Delete}
} else {
Send {Backspace}
}
}
Return
- 在此下载最新的 AutoHotKey
- Github 非官方 Apple 无线键盘支持 (UAWKS)
- 在此处下载 Github UAWKS 最新的 FnMapper.ahk 文件
- 在此处下载 Github UAWKS 最新的 AutohotkeyRemoteControl.dll 文件
**SharpKeys**
SharpKeys 是一款管理注册表项的实用程序,允许 Windows 将一个键重新映射到任何其他键。该应用程序包含常用键盘键列表和 Type Key 功能,可自动识别大多数键盘键。它最初使用 .NET v2 在 C# 中开发,但已更新为支持 .NET 4.0 Client Profile。
还有 KeyTweak
KeyTweak 是一款简单的实用程序,允许用户重新定义键盘输入信号。该功能由注册表值实现,该注册表值首次记录在 Windows 2000 中,但也存在于 Windows NT 4.0 中。并包含在 XP、Vista 和 Windows 7 中。本节列出了 KeyTweak 的一些功能以及您可能想要使用 KeyTweak 的原因。
***其他信息:***
Microsoft 文档和链接
- 存档:Microsoft - 键盘扫描码规范文档
- 存档:Microsoft 如何禁用键盘上的 Windows 键
- thewindowsclub - 如何禁用键盘上的 Windows 键
- 存档:Microsoft 键盘布局创建器 1.4
通过 Bios 的操作键模式有什么作用?
此设置会更改笔记本电脑键盘顶部按钮的默认行为。这是什么意思?
如果“操作键模式”设置为“启用”,则要使用键盘顶行上显示为图标的附加功能,您无需按住 Fn 键。需要将其夹紧,以便上面的按钮可以像 F1..F12 一样工作。
当“操作键模式”处于“禁用”位置时(通常是默认设置),顶部按钮将作为标准 F1 ... F12 工作,而要使用其高级功能(以图标表示),您需要额外夹住 Fn。
**进一步阅读**
答案2
Shift+F10
右键单击的键盘快捷键是按住Shift,然后按F10。这是在以下情况下的替代方法:右键点击/context menu键不可用。