找出按下的字符键

时间:2009-04-14 18:54:06

标签: flex flash actionscript-3 keyboard

如果我向KeyboardEvent.KEY_DOWN添加一个监听器,我可以找到keyCode和charCode。

keyCode根据键盘映射到不同的字符。

根据帮助,charCode同样没用:

  

字符代码值是英文键盘值。例如,如果按Shift + 3,则charCode在日语键盘上为#,就像在英语键盘上一样。

那么,我怎样才能找出用户按哪个字符?

4 个答案:

答案 0 :(得分:2)

你遗漏了引用的一个非常重要的部分,或者你找不到它的地方遗漏了:

  

例如,如果按Shift + 3,则   getASCIICode()方法在a上返回#   日本键盘,就像它一样   一个英文键盘。

     

http://livedocs.adobe.com/flex/201/langref/flash/events/KeyboardEvent.html

这可能更有帮助:

  

charCode属性是当前字符集中该键的数值(默认字符集是UTF-8,它支持ASCII)。

     

http://livedocs.adobe.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000480.html

您的应用程序确定使用了哪些字符集,这意味着即使您必须使用不同键盘本地的单独键来生成相同的字符,它也将具有相同的charCode。

答案 1 :(得分:1)

注意:(这是关于键盘消息的一般情况,并不仅适用于动作脚本。我误读了这个问题并提供了更深入的答案,然后提供了帮助)

真的,从键盘到Windows char的路径是非常复杂的,它是这样的:

  • 键盘将扫描码发送至键盘设备驱动程序(KDD)。
  • KDD向系统消息队列发送消息。
  • 系统然后将消息发送到创建具有当前键盘焦点的窗口的前台线程。
  • 线程的消息循环拾取消息并找出正确的字符翻译。

键入的'真正'字符在完成整个过程之前不会计算,因为每个窗口和线程可以位于不同的语言环境中,如果不知道语言环境和键缓冲区,则无法真正“翻译”键历史。

“WM_KEYDOWN”和“WM_KEYUP”消息不能仅使用MapVirtualKey或其他东西进行转换,因为您不知道有多少按键构成单个字符。简单的方法就是处理'WM_CHAR'事件并使用它。请考虑以下事项:

  • en-US语言环境,你按下以下键a +'+ a,你得到以下输出“a'a”
  • pt-BZ语言环境,你按下以下键a +'+ a,你得到以下输出“aá”

因此,在这两个示例中,您将获得3个KEYDOWN,KEYUP消息,但在第一个中您获得3个WM_CHAR,在第二个中您只获得2个。

以下文章对基本概念非常有用: http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx

答案 2 :(得分:1)

您无法有效使用charCodekeyCode来确定输入的字符。您必须仅比较字符串。 KeyboardEvent没有给你输入的文字,这也是愚蠢的。

就我而言,除KeyboardEvent.KEY_DOWN事件外,我还实施了TextEvent.TEXT_INPUT个事件。在后者的处理程序中,我实现了所有需要charCode的功能,并且每个键盘区域设置都没有变化(例如空格键或输入)。在前者中,我检查了事件的text属性,以比较我需要的locale独立。

忘了提这个帖子暗示我的解决方案:How to find out the character pressed key in languages?

答案 3 :(得分:0)

键入日语平假名等字符通常需要几次击键,有时甚至从下拉菜单中选择适当的字符。您可能想要收听不同的事件,例如文本字段的更改事件。