问题标签 [scancodes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
349 浏览

c# - 通过 InputSimulator C# 转发一系列扫描码

我遇到了扫描码的挑战,以及如何将它们转换为虚拟键码和 ASCII。

我正在使用 Interception/Oblita 库来检索来自条形码扫描仪的所有扫描码。常规击键击键,如“A”“!” 而不是通过 InputSimulator 库转发的问题(链接:https ://www.nuget.org/packages/InputSimulator/ )

尝试使用丹麦语键盘布局转发特殊字符(如 ¨ 或 `)时会出现问题。

我在输入¨(Keydown)时收到这些扫描码

56 82 79 77 72

应该对应于 L-Alt + 0168 但是当转换为虚拟键时,我得到这个结果: L-ALT + INSERT + END + RIGHT + UP

我使用 user32 dll 中的 MapVirtualKey 映射键,扫描码和 maptype = 1 (MAPVK_VSC_TO_VK)

如何正确映射它们以便获得 Alt 组合键?是因为我需要使用另一种 p-invoke 方法进行映射吗?

0 投票
1 回答
1682 浏览

x86 - 将扫描码转换为 ASCII

所以我让 IRQ1 正常工作,但事实证明它打印了从端口 0x60 读取的扫描码。我知道我必须将这些转换为实际字符,但我似乎无法理解它。我正在尝试在 nasm 中执行此操作。我知道我可以使用键映射,但它提出了关于成败代码的问题(我应该使用哪个以及我应该如何处理另一个?)。没有数学公式可以将它们转换为 ASCII 吗?我已经在网上阅读了很多关于它的信息,但并没有太大帮助。任何有关如何将扫描代码转换为 nasm 字符的帮助表示赞赏。

0 投票
0 回答
109 浏览

keymapping - SendInput LShift 上的奇怪扫描码 02 2A (554)

我编写了一个程序来使用外部(无线)数字键盘作为游戏的输入设备。我正在使用 NUMPAD0,NUMPAD。和 ENTER 分别用于修饰键 shift、ctrl 和 alt,我已将其余的小键盘键映射到 WASD 和其他一些键。我已经设置了一个 LowLevelKeyboardProc 来拦截并吃掉小键盘的“真实”输入,并将自定义 WM_MESSAGE 发送到我的应用程序的 Windows 消息循环,然后通过 SendInput 发送键映射的“新”输入(使用我想要的键的扫描码模拟)。

这一切都工作正常,正如预期的那样。除了左移键:每当我按下映射到左移的 NUMPAD0 时,不仅会发送正确的扫描码 0x2A = 42,而且还会发送另一个扫描码为 0x022a = 554 的键。这似乎是某种标志第 9 位,因为 554 是 42 + 2^9,但我可以找到任何关于此的文档。 我已经阅读了关于前缀为 0xE0 的扩展 2 字节扫描码,但在这种情况下不是 0x02。这也只发生在模拟的 shift 键上;ctrl 和 alt 表现得很好。键盘钩子和 Windows 消息传递的相关部分:

LowLevelKeyboardProc:

Windows 消息的东西:

按下物理键盘上的普通 shift 键时的输出:

按下小键盘上的模拟 shift 键时输出:

另一件需要注意的是,这个奇怪的按键扫描代码 554 的按键事件也与其余的完全相反(见输出)。 因为我可以简单地吃掉这个奇怪的扫描码 554 的关键事件,这实际上在功能方面并没有太大的问题,但我仍然想知道这个扫描码 554 的全部内容。

0 投票
1 回答
61 浏览

visual-studio-code - 如何在 VSCode 键绑定中使用奇怪的字符

我想使用 AltGr + f 创建一个键绑定,或者可能是这 2 的结果一起创建的键绑定(đ),我已经尝试使用扫描码,但它们似乎不能作为键,我怎么能做这个?

0 投票
0 回答
21 浏览

keyboard - 将键盘扫描代码解析为实际输入的字符

我正在尝试制作一个覆盖用户在屏幕上输入的程序,但我遇到了一个我找不到解决方法的问题。

对我来说重要的是,该程序也可以处理其他键盘布局。试图弄清楚如何做到这一点,我查看了键盘记录器,但我查看的没有一个可以正确识别一直输入的字符。

我在想有可供下载的表格,将扫描代码与每个键盘布局的键相关联。但这似乎不是它的工作方式。

我会猜到这是一个已解决的问题。如果有人能把我推向正确的方向,那就太好了。理想情况下可以跨平台工作的东西

谢谢

0 投票
0 回答
59 浏览

objective-c - 如何在不需要额外权限的情况下合法地获取原始键盘扫描码(OSX)

在 OSX 的最新版本中,应用程序无法再访问 HID 设备,除非被授予额外的输入监控权限。

到目前为止,我有一堆代码直接处理来自 HID 设备的原始扫描码。部分是出于跨平台目的(它不是键盘记录器,是的,还有其他方法)。

似乎 Cocoa 并没有公开任何原始扫描码,似乎只使用虚拟键码发出 keyDown 事件。

是否有任何工具可以让我获得原始键盘扫描码而无需直接从 HID 设备读取?并且不需要输入监控权限?

0 投票
0 回答
37 浏览

c++ - 如何将普通扫描码翻译成 ascii 字符

我需要将这些扫描代码转换为 ascii 章程。

在本站: 1.4 普通扫描码

例如 :

是否有任何数学方程可以转换它或如何在 C++ 中构建 translate_keys() 函数?

0 投票
0 回答
256 浏览

c++ - C++(Windows):将虚拟键代码字符串表示(“VK_F6”)转换为十六进制(0x75)

在 C++ (Windows) 中是否有一种优雅的方式来获取虚拟键代码的字符串表示形式(例如 VK_NUMPAD0、VK_F6、VK_INSERT、VK_RSHIFT 等)并将其转换为相应的十六进制值(例如 0x60、0x75、0x2D、0xA1、 ETC。)?目前,我知道使用 switch 语句、if 语句、map 等会起作用(我正在使用这种技术),但这些都显得笨重和不优雅(它们是“硬编码”的,可能不是最通用的)解决方案。我想一定有一些专门为这种任务设计的 API。

我检查了 MSDN 文档中可能有帮助的任何 API,但我发现的最接近的是 VkKeyScan、MapVirtualKey 和 ToAscii,但这些似乎都不是我想要的(或者至少我不知道使用它们的组合)。我知道我错过了一些东西,可能只是不知道要寻找的正确想法。

期望(伪代码):

同样,是否有跨平台解决方案?我知道 VK_ 常量是特定于 Windows 的,但我很想知道是否有可在多个平台(包括 Windows)上工作的替代解决方案。我现在不需要支持他们,但我总是想记住这一点。

万一有人问这是否是 X vs Y 问题或类似问题,原因是我们使用的是半用户友好的配置文件(JSON),它允许我们应用程序中的各种命令绑定到键(和如果用户选择,则更改)。我们希望这个文件是一个相对容易编辑的文件,而不需要像十六进制那样在其中放入笨拙的数据类型。

0 投票
1 回答
108 浏览

rust - 从 Rust 中的扫描码中检索与键盘布局无关的类型字符

我想用 Rust 编写一个低级、快速的文本编辑器。对于图形/窗口,我计划使用 SFML 在 Windows、macOS 和 Linux 之间轻松快速地交叉兼容。

现在,我遇到的问题是在需要 Shift 键的文本编辑器中键入字符时。SFML,甚至其他查询本机操作系统系统调用(如keyboard_query )的库只为您提供“按下SHIFT 和3”之类的扫描码,现在,在我的键盘(英国Macintosh 键盘)上,我希望它£在文本编辑器中生成一个,但是美国人会希望它#为其他键盘布局生产,依此类推。

是否有一种可靠的跨平台方法可以知道某人想要输入哪个字符,而不管他们的键盘布局如何?

如果做不到这一点,有没有办法只在 macOS 中做到这一点?或者我是否必须为我想要支持的每个键盘布局输入 Shift+whatever 键生成的大映射?

0 投票
1 回答
53 浏览

winapi - 为什么winapi函数虽然有键盘驱动却需要扫码?

msdn中,

wVk
类型:WORD
一个虚拟键码。代码必须是 1 到 254 范围内的值。如果dwFlags成员指定KEYEVENTF_UNICODE则 wVk必须为 0。

键盘驱动程序确实将虚拟键码转换为扫描码。但是为什么winapi函数需要扫码呢?是不是因为API直接告诉操作系统,不依赖键盘驱动?