创建计算机解释为真实的“假密钥”?

Jos*_*ous 20 keyboard drivers windows-10

解释

好的,这是键盘总体布局的照片。

我想知道的是:是否可以在标准键以外的键盘上模拟额外的键?例如,我可以让我的计算机认为我的键盘还有3 个标记为FK1、FK2 和 FK3 的额外键

这三个额外的键不会是字母键,如Home、Insert、Page up 等。
基本上它们什么都不做,除非被分配做某事。例如,如果我在程序中设置一个热键以使用FK1,它会注册它。

为什么?

我很高兴你问。我经常玩一个叫做ArmA 3的游戏,熟悉这个游戏的人都知道它几乎用完了键盘上的每个键。
为了在这个游戏中与我的伙伴交流,我使用 TeamSpeak。我有一个用于 teampeak 的音板,我希望能够使用热键而不是 alt-tabbing 和单击来激活不同的声音,但是我使用的所有 mod 在 ArmA 中几乎没有剩余的可用键。

即使您可以创建这些“假键”,如果它们不在实际键盘上,您将如何在游戏中使用它们?

很好的问题
我的键盘是 Logitech G910 Orion Spark,上面有 27 个宏。我假设我可以将这些宏中的每一个设置为在使用过程中调用假键盘按钮。

这可能读起来非常混乱,但我已经尽力了。

Windows 10 专业版 (x64)

Sir*_*ide 16

当您按下键盘上的某个键时,硬件会生成一个“扫描码”,然后软件会将其解释为某个按键。

密钥重新分配

KeyTweak允许您通过添加适当的注册表项来重新分配 Windows 从每个扫描代码解释的按键。

不幸的是,它不允许您添加额外的假密钥。它最接近的是允许重新分配某些键盘具有的媒体/网络控制键。它也不允许您分配键盘通常不使用的键码。所以如果你有美式键盘,它不会让你分配 Ó 或 £。所以你仍然只能使用普通的关键字母,你说你已经筋疲力尽了。

作假

AutoHotkey允许脚本生成扫描码和异常符号。

每当按下 Win+p 时,此脚本都会生成 £(我从互联网上获取了该符号,并将其粘贴到我用来创建脚本的文本编辑器中):

#p::
send, £
Run Code Online (Sandbox Code Playgroud)

根据您的游戏,您或许可以使用这样的脚本来获取 £ 作为您游戏中的密钥。但是,如果游戏正在等待生成实际的键盘扫描代码,这将不起作用。这取决于游戏与硬件的交互方式。

幸运的是,AutoHotkey 还可以生成键盘扫描码。这个脚本会在按下 Win+p 时生成一个空格,因为扫描码 39(十六进制)是空格(参见扫描码列表)。

#p::
send, {sc39}
Run Code Online (Sandbox Code Playgroud)

AutoHotkey 还有另一种生成虚拟键的方法。我没有研究过差异,但是这个脚本会在按下 win+p 时使用虚拟键生成空间:

#p::
send, {vk20}
Run Code Online (Sandbox Code Playgroud)

此参考列出了所有虚拟密钥代码,包括许多您尚未使用的非标准密钥:https : //autohotkey.com/board/topic/98757-how-to-create-a-new-virtual-钥匙/

您可以尝试创建一个向您的游戏发送非标准虚拟密钥的脚本。如果游戏注册了它并让您将其保存在其键盘设置页面中,那么您可能会让它起作用。

最后一块拼图是让 Logitech 宏调用生成虚拟键的 AutoHotkey 脚本。您将创建一个没有热键的 AutoHotkey 脚本,因此它在运行时会立即触发 - 例如

send, {vk7B}
Run Code Online (Sandbox Code Playgroud)

或者

send, £
Run Code Online (Sandbox Code Playgroud)

将 *.ahk 文件与 Autohotkey 程序关联,然后获取 Logitech 宏以打开保存的脚本。

注意:我没有在任何游戏中测试过这个。在不同的游戏中可能会有不同的结果 - 取决于他们接受的有效条目。在上面的 Virtual Keys 链接中,人们正在讨论几乎完全符合您想要做的事情,并且似乎在使用 F13-F24 键方面取得了一些成功,所以不妨先尝试一下。

vk7B    sc58    F12
vk7C    sc64    F13
vk7D    sc65    F14
vk7E    sc66    F15
vk7F    sc67    F16
vk80    sc68    F17
vk81    sc69    F18
vk82    sc6A    F19
vk83    sc6B    F20
vk84    sc6C    F21
vk85    sc6D    F22
vk86    sc6E    F23
vk87    sc76    F24
Run Code Online (Sandbox Code Playgroud)

编辑: 根据评论的要求;创建 F13 的简单脚本可能如下所示:

b::
send, {vk7C}
Run Code Online (Sandbox Code Playgroud)

每次在此脚本处于活动状态时(在时钟附近的托盘中)按“b”,都会发送 F13。此脚本将保持活动状态并在您每次点击 'b' 时运行,直到您将其杀死。一旦游戏在按键设置中注册了 F13,杀死这个脚本,并让罗技调用这样的脚本:

send, {vk7C}
Run Code Online (Sandbox Code Playgroud)

这个不会保持活动状态,它会运行一次然后结束,每次调用它。