标签: scancodes

SDL物理密钥代码和SDL虚拟密钥代码之间有什么区别?

结构SDL_KeysymSDL_ScancodeSDL_Keycode成员.他们之间有什么区别?文档并没有真正为我清除它.我试过两个,他们似乎做同样的事情.

c keyboard scancodes sdl-2

15
推荐指数
2
解决办法
8315
查看次数

将字符映射到国际键集的键码

所以我在这里提到了一个pi零键盘模拟器:

https://www.rmedgar.com/blog/using-rpi-zero-as-keyboard-setup-and-device-definition

我创建了它从本地文本文件中读取的类型文本(在java中开发的所有东西 - 原因:)).
我现在的问题是我的pi零附加的各种计算机上配置的键集差异很大(德语,英语,法语......).这取决于计算机,这会导致几个打字错误(例如,z而不是y).

所以我现在建立了一些"转换表",将字符映射到适合计算机的键码.这样的表看起来像这样:

public scancodes_en_us() {
    //We have (Character, (scancode, modifier))
    table.put("a",Pair.create("4","0"));
    table.put("b",Pair.create("5","0"));
    table.put("c",Pair.create("6","0"));
    table.put("d",Pair.create("7","0"));
    table.put("e",Pair.create("8","0"));
    table.put("f",Pair.create("9","0"));
    table.put("g",Pair.create("10","0"));
    table.put("h",Pair.create("11","0"));
    table.put("i",Pair.create("12","0"));
    table.put("j",Pair.create("13","0"));
    table.put("k",Pair.create("14","0"));
    table.put("l",Pair.create("15","0"));
    table.put("m",Pair.create("16","0"));
    table.put("n",Pair.create("17","0"));
    table.put("o",Pair.create("18","0"));
    table.put("p",Pair.create("19","0"));
    table.put("q",Pair.create("20","0"));
    table.put("r",Pair.create("21","0"));
    table.put("s",Pair.create("22","0"));
    table.put("t",Pair.create("23","0"));
    table.put("u",Pair.create("24","0"));
    table.put("v",Pair.create("25","0"));
    table.put("w",Pair.create("26","0"));
    table.put("x",Pair.create("27","0"));
    table.put("y",Pair.create("28","0"));
    table.put("z",Pair.create("29","0"));
    table.put("A",Pair.create("4","2"));
    table.put("B",Pair.create("5","2"));
    table.put("C",Pair.create("6","2"));
    table.put("D",Pair.create("7","2"));
    table.put("E",Pair.create("8","2"));
    table.put("F",Pair.create("9","2"));
    table.put("G",Pair.create("10","2"));
    table.put("H",Pair.create("11","2"));
    table.put("I",Pair.create("12","2"));
    table.put("J",Pair.create("13","2"));
    table.put("K",Pair.create("14","2"));
    table.put("L",Pair.create("15","2"));
    table.put("M",Pair.create("16","2"));
    table.put("N",Pair.create("17","2"));
    table.put("O",Pair.create("18","2"));
    table.put("P",Pair.create("19","2"));
    table.put("Q",Pair.create("20","2"));
    table.put("R",Pair.create("21","2"));
    table.put("S",Pair.create("22","2"));
    table.put("V",Pair.create("25","2"));
    table.put("W",Pair.create("26","2"));
    table.put("X",Pair.create("27","2"));
    table.put("Y",Pair.create("28","2"));
    table.put("Z",Pair.create("29","2"));
    table.put("1",Pair.create("30","0"));
    table.put("2",Pair.create("31","0"));
    table.put("5",Pair.create("34","0"));
    table.put("6",Pair.create("35","0"));
    table.put("7",Pair.create("36","0"));
    table.put("8",Pair.create("37","0"));
    table.put("9",Pair.create("38","0"));
    table.put("0",Pair.create("39","0"));
    table.put("!",Pair.create("30","2"));
    table.put("@",Pair.create("31","2"));
    table.put("#",Pair.create("32","2"));
    table.put("$",Pair.create("33","2"));
    table.put("%",Pair.create("34","2"));
    table.put("^",Pair.create("35","2"));
    table.put("&",Pair.create("36","2")); …
Run Code Online (Sandbox Code Playgroud)

java scancodes raspberry-pi

13
推荐指数
1
解决办法
317
查看次数

获取char的键盘扫描码

我想与Virtualbox-VM进行交互,以无人值守地安装Virtualbox-Guest-Additions.因此,我必须向VM发送击键.我可以通过使用VBoxManage-API来实现这一点,我将扫描码的HEX发送到VM:

# sends "b" to the VM
VBoxManage controlvm "$VMNAME" keyboardputscancode <HEX>
Run Code Online (Sandbox Code Playgroud)

现在我想向VM发送一个完整的命令,例如:

mount /dev/scd0 /media/cdrom0<Enter>
Run Code Online (Sandbox Code Playgroud)

因此,我必须将该字符串的每个字符转换为扫描码,并使用VBoxManage将其发送到VM.

如何将这些字符转换为Linux上相应的键盘扫描码?我的VM具有与主机相同的键盘映射.我正在寻找可以使用的东西:

$ getscancode n
> 31
Run Code Online (Sandbox Code Playgroud)

linux scancodes

9
推荐指数
1
解决办法
7983
查看次数

SendInput()不是"发送"正确的移位字符?

void WriteChar(char c)
{
    INPUT input = {0};
    input.type = INPUT_KEYBOARD;
    input.ki.wVk= VkKeyScanEx(c, GetKeyboardLayout(0) ) ;   
    SendInput(1,&input, sizeof(INPUT));
}
Run Code Online (Sandbox Code Playgroud)

VkKeyScanEx为'/'和'?'(相同的键)返回不同的键代码,但是如果您尝试使用此方法编写包含'?'的消息,则只会写'/'.我不知道发生了什么事.同样的事情发生在';' 和':'.

我部分不了解密钥代码和扫描代码.大多数角色都有虚拟键码,但我找不到类似问号的东西.它们必须存在,但没有列出?

c++ winapi scancodes virtual-keyboard sendinput

7
推荐指数
2
解决办法
5601
查看次数

如何在linux中立即捕获关键笔划?

可能重复:
什么等同于Linux中的getch()和getche()?

我是linux编程的新手.:-)

我只是想知道我的程序(使用C语言)是否可以立即捕获linux中的每一个键击,然后决定是否回显它以及如何显示它,就像telnet一样.

例如,如果用户敲击"A",我希望程序显示"B",如果他输入"B",则需要"C",依此类推.

听起来很有趣也没用.我只是好奇.

c linux scancodes

7
推荐指数
3
解决办法
1万
查看次数

Tkinter 国际绑定

Tkinter 有没有办法绑定可以在所有键盘布局中使用的键组合?(通过扫描码绑定)

例如,我需要在所有布局中使用键盘左下角相同物理键的'Control-Z'绑定,例如:     * 俄语布局、     * 希腊语布局等。

这是我尝试过的:

from Tkinter import *
root=Tk()
def f(event):
    print 'undo'
button1=Button(root, text=u'Button')
button1.pack()
button1.bind('<Control-z>', f)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

它不适用于俄语和希腊语键盘布局。

更新 2:

我用 Windows 做了一些更多的实验,现在一般规则是这样的:

    1) 如果语言基于拉丁字符集,键将“按值”映射(德语法语德沃夏克),以便将相同的操作映射到不同的物理键。
    2)如果不是(例如 俄语希腊语),则所有主要加速键都“按位置”映射(以匹配通常标记在同一键上的相应英文字母)。

只有第二种情况需要特别注意。如果这已经在某些库中实现了,有什么想法吗?

更新 3

即使没有俄语键盘或俄语 Windows,它也可以简单地复制。

1) 开始->控制面板->区域和语言选项
2) 语言->详细信息
3) 添加俄语。

就是这样。现在 Alt-Shift 会将您切换到俄语,您将能够输入以下有趣的符号:

俄语键盘

另一个 Alt-Shift 会将您切换回来。

忘记维基百科关于语音俄语布局的说法。这些天不使用它们。至少在俄罗斯境内。

所有 Windows 应用程序(包括 wxPython 应用程序)都Ctrl-?用于撤消、Ctrl-?剪切、Ctrl-?复制等。

python bind tkinter scancodes

7
推荐指数
1
解决办法
2306
查看次数

Linux键盘扫描码问题:例如,向上箭头给^ [[A.

我们一直在努力了解Linux中的键盘扫描码行为.

当我们打开一个普通的bash shell时,箭头键按预期工作:UP显示历史记录中的上一个项目等.但是,当您生成一个进程时,箭头不再按预期工作.例如,UP打印^ [[A而不是上一个命令.

要证明这一点,请执行以下操作:

bash $ ping www.google.com

现在,按UPDOWN等等,您将在进程运行时看到错误映射的密钥代码.但是,当您终止该过程时,箭头键将再次起作用.

我们已经在CentOs,Ubuntu,Mac甚至是不同的shell(bash,sh,zsh)上测试过它,并且在任何地方都会发生同样的情况.我还尝试了使用kbd_mode的不同键盘模式,我们使用RAW和XLATE模式进行了测试.

在搜索答案时我能看到的最接近的东西是当IPython没有针对readline构建时,IPython用户经历了相同的行为.但是,据我所知,这与我们的案例无关.

我们正在开发一个基于C++ Tcl的控制台应用程序,它使用cin和cout与用户进行通信并获取输入.当我们尝试访问先前输入的命令的历史记录时,我们遇到箭头键问题.这对我们来说是一个主要问题,因为99%的人都希望箭头角色能够正常工作.

关于我们如何克服这一点的任何想法都将非常感激.

c++ linux bash shell scancodes

6
推荐指数
1
解决办法
1260
查看次数

使用X11在Linux上获取scancode而不是keycode

我正在尝试收听键盘输入(使用X11事件循环)并获取扫描码.这些扫描码应该指代密钥的物理位置,而不是它所键入的字符.问题是,我所能得到的只是KeySyms和KeyCodes,它们针对不同的语言进行了不同的映射(例如QWERTY vs QWERTZ).

我目前的解决方案是阅读"/ usr/share/X11/xkb/keycodes/evdev"文件.它包含密钥位置到密钥代码的映射.使用这个我可以简单地将任何键码转换回扫描码.我的猜测是,这不是一种稳定的做事方式.我根本不太了解Linux.这就是为什么我认为在这里问这可能是一个好主意.

假设大多数用户的机器正在使用这些evdev映射是否安全?如果没有,我还能在哪里找到实际使用的关键映射?或者是否有更好的解决方案?

linux x11 input xlib scancodes

6
推荐指数
1
解决办法
1537
查看次数

虚拟码和扫码的区别

Virtual Key Code和 和有什么区别Scan Code?我在这里读到有关扫描码的内容,但我不明白虚拟码的用途是什么以及扫描码与虚拟码有何不同?

例如在Java中:

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {                                       
   int code = evt.getKeyCode(); // WHAT DO I GET ? A Scan code or a Virtual Code..?
}
Run Code Online (Sandbox Code Playgroud)

C中:

KBDLLHOOKSTRUCT *kbhook = (KBDLLHOOKSTRUCT *) lParam;
printf("%u\n",kbhook->vkCode); // WHAT DO I GET ? A Scan code or a Virtual Code..?
Run Code Online (Sandbox Code Playgroud)

以上只是示例,我不想在此基础上澄清概念。

c c++ java scancodes

5
推荐指数
1
解决办法
6407
查看次数

F11和F12的Windows扫描码是不同的.为什么?

为什么它们与其他扫描代码分开?有什么理由吗?

F9 is 67
F10 is 68
Numlock is 69
F11 is 87
F12 is 88
Run Code Online (Sandbox Code Playgroud)

c windows firmware scancodes

5
推荐指数
1
解决办法
191
查看次数