apache-flex - 是否有可能确切地知道在 AS3 中按下了什么小键盘键(禁用 Num Lock)?

标签 apache-flex flash actionscript-3 keyboard

在 Actionscript 3 中,我看到如果我按下“8”键(从小键盘),我得到小键盘键“8”的 keyCode 结果,但是当我禁用“Num Lock”并按下小键盘键时“8”,我收到向上箭头键的 keyCode 的事件...

如何区分小键盘上的键(禁用 Num Lock)和原来的键,如 Arrows、End、Insert、Delete 等?

我已经尝试使用事件的 keyLocation 属性,该属性的值对于箭头是 0,对于数字键盘是 3,但是当 Num Lock 被禁用时,该属性的值是 4 , 6, 2 and 8 in the numpad is 0, 所以我无法区分禁用数字键盘和箭头键的数字。

Keyboard 类的 numLock 属性也不起作用,因为我不知道我是按了向上箭头键还是禁用了 8 键 Num Lock (因为它们触发了相同的事件,或者我认为)

最佳答案

我一直无法找到一种方法来完成您的要求。我怀疑实际的关键代码本身被操作系统层驱动程序吸收,并且永远不会到达 FLEX 以供读取。这是通过在我的 iMac(没有 MS Natural 驱动程序)上使用我的 Microsoft Natural 键盘进行测试而得到的。没有驱动程序,键盘无法打开 numlock,并且键码保持不变。

我不知道这是否有帮助,但我确实编写了一个小测试程序来确定在每个平台上 flex 可以看到哪些键代码、位置和字符代码。

这是测试应用的代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="onApplicationComplete()" viewSourceURL="srcview/index.html">
    <mx:Script>
        <![CDATA[
            public function onApplicationComplete():void
            {
                stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
            }

            public function onKeyDown(keyboardEvent:KeyboardEvent):void
            {
                charCodeLabel.text = keyboardEvent.charCode.toString();
                keyCodeLabel.text = keyboardEvent.keyCode.toString();
                switch(keyboardEvent.keyLocation)
                {
                    case KeyLocation.LEFT:
                        keyLocationBox.text = "Left";
                        break;
                    case KeyLocation.NUM_PAD:
                        keyLocationBox.text ="Num Pad";
                        break;
                    case KeyLocation.RIGHT:
                        keyLocationBox.text = "Right";
                        break;
                    default:
                        keyLocationBox.text = "Standard";
                }

            }
        ]]>
    </mx:Script>
    <mx:Label x="46" y="34" text="Just click anywhere inside the flash movie and start typing."/>
    <mx:Label x="46" y="72" text="You typed Char Code:"/>
    <mx:Label x="232" y="72" text="Key Code:"/>
    <mx:Label x="183" y="72" id="charCodeLabel"/>
    <mx:Label x="303" y="72" id="keyCodeLabel"/>
    <mx:Label x="46" y="98" text="Key Location:"/>
    <mx:Label x="134" y="98" width="68" id="keyLocationBox"/>

</mx:Application>

如果需要,您也可以简单地使用我在此处上传的实时版本:Flex Online Key Code Tool

关于apache-flex - 是否有可能确切地知道在 AS3 中按下了什么小键盘键(禁用 Num Lock)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410894/

相关文章:

java - Flex 或 Actionscript 中的 Java 语法荧光笔

apache-flex - Flex 中的 JSON。 "Access of undefined property JSON"

flash - 开始Flash游戏开发

Facebook.getAuthResponse() 似乎已损坏

actionscript-3 - 如何打乱位图数据?

apache-flex - flex 如何刷新已创建的 View

apache-flex - 是否有在 SWC 组件中嵌入元数据(例如版本、许可证)的标准化方法?

xml - 使用 e4x 语法删除特定节点

flash - 如何在Flash中制作PDF阅读器?

java - 从 Java 类自定义 Granite DS Actionscript 代码生成