如果我向KeyboardEvent.KEY_DOWN添加一个监听器,我可以找到keyCode和charCode。
keyCode根据键盘映射到不同的字符。
根据帮助,charCode同样没用:
字符代码值是英文键盘值。例如,如果按Shift + 3,则charCode在日语键盘上为#,就像在英语键盘上一样。
那么,我怎样才能找出用户按哪个字符?
答案 0 :(得分:2)
你遗漏了引用的一个非常重要的部分,或者你找不到它的地方遗漏了:
例如,如果按Shift + 3,则 getASCIICode()方法在a上返回# 日本键盘,就像它一样 一个英文键盘。
http://livedocs.adobe.com/flex/201/langref/flash/events/KeyboardEvent.html
这可能更有帮助:
charCode属性是当前字符集中该键的数值(默认字符集是UTF-8,它支持ASCII)。
您的应用程序确定使用了哪些字符集,这意味着即使您必须使用不同键盘本地的单独键来生成相同的字符,它也将具有相同的charCode。
答案 1 :(得分:1)
注意:(这是关于键盘消息的一般情况,并不仅适用于动作脚本。我误读了这个问题并提供了更深入的答案,然后提供了帮助)
真的,从键盘到Windows char的路径是非常复杂的,它是这样的:
键入的'真正'字符在完成整个过程之前不会计算,因为每个窗口和线程可以位于不同的语言环境中,如果不知道语言环境和键缓冲区,则无法真正“翻译”键历史。
“WM_KEYDOWN”和“WM_KEYUP”消息不能仅使用MapVirtualKey或其他东西进行转换,因为您不知道有多少按键构成单个字符。简单的方法就是处理'WM_CHAR'事件并使用它。请考虑以下事项:
因此,在这两个示例中,您将获得3个KEYDOWN,KEYUP消息,但在第一个中您获得3个WM_CHAR,在第二个中您只获得2个。
以下文章对基本概念非常有用: http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx
答案 2 :(得分:1)
您无法有效使用charCode
或keyCode
来确定输入的字符。您必须仅比较字符串。 KeyboardEvent
没有给你输入的文字,这也是愚蠢的。
就我而言,除KeyboardEvent.KEY_DOWN
事件外,我还实施了TextEvent.TEXT_INPUT
个事件。在后者的处理程序中,我实现了所有需要charCode
的功能,并且每个键盘区域设置都没有变化(例如空格键或输入)。在前者中,我检查了事件的text属性,以比较我需要的locale独立。
忘了提这个帖子暗示我的解决方案:How to find out the character pressed key in languages?
答案 3 :(得分:0)
键入日语平假名等字符通常需要几次击键,有时甚至从下拉菜单中选择适当的字符。您可能想要收听不同的事件,例如文本字段的更改事件。