MrV*_*dez 20 keyboard function-keys keymap
我有一个键盘(Logitech Wave,如下图),我很满意。不幸的是,制造商更改了 FN 键的右键单击按钮。
是否有任何程序可以将 FN 键重新映射到其他东西?
Dha*_*ree 14
Fn 键可以重新映射或禁用吗?
通过 AutoHotKey 之类的程序深入研究重新映射 Fn 组合,或深入研究 Windows 的键盘扫描码,人们可能能够重新映射令人反感的组合键(Fn + Key)。(请参阅此答案的进一步内容)。
由于 Fn 键通常位于硬件级别,因此无法在此级别编辑或禁用此操作。
[Fn] 这通常是一个不会生成单独代码的硬件密钥。
来源:UI 事件 KeyboardEvent 代码值 - W3C 候选推荐,2017
微软 MVP Jason Tsang 在 F-Lock 上说到:
F Lock 键是键盘中的一个硬件开关。它的状态不能以编程方式控制。它的默认条件是“关闭”。因此,每当键盘复位或断电时,F Lock 键将始终处于“关闭”状态。请注意,对于 2004 年 9 月之后发布的 Microsoft 键盘,键盘将通过重新启动保持 F Lock 状态。
Fn 不是普通的键盘键,例如修饰符 Ctrl、Shift 和 AltGr。对于标准的修改键,键盘内的微控制器会发送修改器本身的扫描码,然后由操作系统解释并与其他同时按下的按键相结合。Fn 键是元修饰键的一种形式,当按下键盘上的其他键时,它会使操作系统看到更改的扫描码。这允许键盘直接模拟全尺寸键盘,因此操作系统可以使用专为全尺寸键盘设计的标准键盘映射。但是,由于操作系统没有 Fn 键的概念,与所有其他标准键盘键不同,该键通常无法在软件中重新映射。
来源 - A)highrez 论坛帖子可能基于 B)维基百科帖子
为什么通常看起来不可能映射 Fn 键?
事实上,键盘工作如下(值只是示例,行为被简化):
- 普通按键:发送字节 0x00 + 按键扫描码字节
- 修饰符(alt/option、control、windows/command 和 fn):发送修饰符扫描码字节 + 键扫描码字节
- 特殊键(如 G15 键):发送标准(如音量键)或自定义(取决于制造商)扫描码
大多数“fn”键盘(包括苹果)只是在发送数据之前处理组合键,因此按下和释放 fn 键根本不起作用。例如:
- 按 F1 -> Scancode 0x1A -> 操作系统识别为 F1 键
- 按 FN 和 F1 -> Scancode 0x9A -> 操作系统识别为 VolumeUp 键
- 按 FN -> 键盘微控制器在发送任何数据之前等待另一个键
AutoHotKey 上的一张海报以一个反问句开始
I don't get any response when I press the Fn key.
fn 键不应该发送任何信号。它的作用是改变当你按下另一个键时发送的信号......
因此,关于 Fn-key 的真正意义在于它根本不存在于操作系统中,因此您实际上无法在操作系统中“重新映射”它。您所能做的就是通过重新映射键以发送 fn 修改的单个信号来重新映射某个键的辅助功能...
所以基本上,自动化 fn-key 是不可行的。然而,自动化其最终结果是没有问题的!...
因此,不幸的是,在操作系统级别上没有自动化是可行的:您必须深入到硬件/驱动程序级别,而这通过 AutoHotKey 是不可行的。
有些人通过 Autohotkey 成功地重新映射了 Fn 功能,少数人甚至在看到 Fn 键时也成功了。
...您仍然可以通过使用以下步骤将其设置为热键:
- 确保至少有一个使用键盘挂钩的脚本正在运行。您可以通过打开其主窗口并从菜单栏中选择“查看-> 键历史记录”来判断脚本是否具有键盘挂钩。
- 双击该脚本的托盘图标以打开其主窗口。
- 按键盘上的“神秘键”之一。
- 选择菜单项“View->Key history”向下滚动到页面底部。
- 靠近底部的地方是您的按键的按键按下和按键按下事件。
- 注意:某些键不会生成事件,因此在此处不可见。如果是这种情况,您不能直接将该特定
键设为热键,因为您的键盘驱动程序或硬件处理它的级别太低,AutoHotkey 无法访问。有关可能的解决方案,请参见
下文。如果可以检测到您的密钥,请记下
列表第二列中的3 位十六进制值(例如 159)。要
将此键定义为热键,请按照以下示例操作:
SC159:: ; Replace 159 with your key's value.
MsgBox, %A_ThisHotkey% was pressed.
return
Run Code Online (Sandbox Code Playgroud)
反向:要重新映射一些其他密钥以成为“神秘密钥”,请遵循以下示例:
; 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.
Run Code Online (Sandbox Code Playgroud)
来源:autohotkey.com/docs/KeyList.htm
使用 AutoHotKey 通过 DLL 进行重新映射
AutoHotkey 是 Windows 的开源宏制作实用程序,其众多功能之一是创建热键。Micha 是 AHK 论坛的成员之一,创建了一个 DLL 文件以添加对 AHK 的人机接口设备支持。使用这个 DLL 文件,几乎可以读出每个 HID 的密钥;键盘、鼠标、遥控器等。
这是 DLL Process Creator 在一篇旧文章中所说的:
首先,有关键盘工作原理的一些信息,特别是 Fn 键。每个键都有自己唯一的代码,即扫描代码,通过该代码,它所连接的计算机可以确定某个键是否被按下以及何时被释放。Fn 键的作用有点不同。当您按住 Fn 键时,它会更改键盘上(某些)其他键的扫描码,以便单个键可以将不同的扫描码发送回计算机,每个扫描码都连接到不同的功能。这就是为什么 Fn 键经常用于笔记本电脑、较小的键盘或带有大量多媒体键的键盘的原因。这样您就可以为相对较少的键添加许多功能。
问题是 Fn 键通常没有自己的扫描码。根据键盘和它连接的计算机,Fn 键可能不会修改其他键的扫描码,因此不起作用。因为它也不发出自己的扫描码,所以电脑连Fn键都没有办法知道,更不用说当它与另一个键组合按下时该怎么办了。重映射工具也帮不了你,因为它们也是基于扫描码的使用。
根据说明记录 Fn 键值的示例:
运行后,按 Fn 键或其他特殊键,并记下相应的值。
; Filter bit 5 (Fn key) Transform, FnValue, BitAnd, 16, KeyStatus
Run Code Online (Sandbox Code Playgroud)
重映射 Fn 函数的示例代码
;
; Fn + Backspace = Delete
;
$Backspace::hotkeyBS()
hotkeyBS() {
global fnPressed
if (fnPressed = 1) {
Send {Delete}
} else {
Send {Backspace}
}
}
Return
Run Code Online (Sandbox Code Playgroud)
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 文档和链接
通过 Bios 的操作键模式有什么作用?
此设置更改笔记本电脑键盘顶部按钮的默认行为。这是什么意思?
如果“Action Keys Mode”设置为“Enabled”,则要使用显示为键盘顶行图标的附加功能,您无需按住 Fn 键。它需要被夹住,以便上面的按钮像 F1..F12 一样工作。
如果“操作键模式”处于“禁用”位置(通常是默认设置),顶部按钮将作为标准 F1 ... F12 工作,并且要使用它们的高级功能,如图标所示,您需要另外夹住 Fn。
Fn
Ubutnu 中的密钥 归档时间: |
|
查看次数: |
40541 次 |
最近记录: |