我有一个非常满意的键盘(Logitech Wave,如下图所示)。不幸的是,制造商已更改了右键单击FN键的按钮。
是否有任何程序可以将FN键重新映射到其他内容?
我有一个非常满意的键盘(Logitech Wave,如下图所示)。不幸的是,制造商已更改了右键单击FN键的按钮。
是否有任何程序可以将FN键重新映射到其他内容?
Answers:
可以重新映射或禁用Fn键吗?
通过诸如AutoHotKey之类的程序来挖掘重新映射Fn组合,或者挖掘Windows的键盘扫描代码,人们可能能够重新映射攻击性的组合键(Fn + Key)。(请进一步查看此答案)。
由于Fn键通常位于硬件级别,因此它将无法在此级别进行编辑或禁用。
[Fn]这通常是不会生成单独代码的硬件密钥。
来源:UI Events KeyboardEvent代码值-W3C候选推荐书,2017年
在类似的钥匙上,F锁Microsoft MVP Tsang Tsang说:
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->扫描代码0x1A->操作系统识别为F1键
- 按FN和F1->扫描代码0x9A->操作系统识别为VolumeUp键
- 按下FN->键盘微控制器在发送任何数据之前等待另一个键
资料来源:AutoHotKey论坛
AutoHotKey上的一张海报以修辞问题开头
I don't get any response when I press the Fn key.
fn键不应发送任何信号。它的作用是更改按另一个键时发送的信号...
因此,关于Fn键的真正问题是它根本不存在于操作系统中,因此您实际上无法在操作系统中“重新映射”它。您所能做的就是通过重新映射某个键以发送经过fn修改的单个信号来重新映射某个键的辅助功能...
因此,基本上,自动化fn-key是不可行的。但是自动化最终结果是没有问题的!...
因此,不幸的是,在OS级别上没有自动化是不可行的:您将不得不降至硬件/驱动程序级别,而通过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
资料来源:请按照此处的完整说明进行操作
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的操作键模式有什么作用?
此设置更改笔记本电脑键盘顶部按钮的默认行为。这是什么意思?
如果将“动作键模式”设置为“已启用”,则要使用在键盘的第一行显示为图标的其他功能,无需按住Fn键。需要夹紧它,以便上方的按钮像F1..F12一样工作。
如果“动作键模式”处于“禁用”位置(通常是默认设置),则顶部按钮将用作标准F1 ... F12,并且要使用其高级功能(用图标表示),您需要额外夹紧Fn。
资料来源:俄语HelpAdmins.ru文章的翻译