2

我想通过KeyboardEvent手动调度对象来模拟一些键盘输入。创建此类事件涉及传递关键代码。

唉,我只有一个给定的字符串

const text: String = "Hello";

我可以使用 轻松获取字符代码String::charCodeAt,但是如何获取密钥代码?对于任何给定的字符(例如:“H”),可能只有一个键码、一个键码加上一些修饰符(在本例中:Shift + keycode_of_h)甚至多个键码。有没有办法获取给定字符代码的键码(可能通过考虑用户的键盘映射)?

4

2 回答 2

1

这不是太难,但只需要一点点设置。

首先创建一个字典或对象,将 UTF-8 值映射到键值,如下所示:

var keyCodes:Dictionary = new Dictionary();
keyCodes[49] = Keyboard.NUMBER_1; //1
// add the rest of the mappings... 

然后因为你需要指定 SHIFT

var shiftedKeyCodes:Dictionary = new Dictionary();
shiftedKeyCodes[33] = Keyboard.NUMBER_1; //!
// add the rest of the shifted mappings

然后像这样创建一个实用函数:

public function charCodeToKeyboardEvent(charCode:int):KeyboardEvent{
    var event:KeyboardEvent = new KeyboardEvent(KeyboardEvent.KEY_UP);
    event.charCode = charCode;
    if(keyCodes[charCode]){
        event.keyCode = keyCodes[charCode];
    } else if (shiftedKeyCodes[charCode]){
        event.keyCode = shiftedKeyCodes[charCode];
        event.shiftKey = true;
    } else {
        return null;
    }
    return event;
}

然后遍历您的字符串并执行以下操作:

for(var i:int = 0; i < myString.length; i++){
    dispatchEvent(charCodeToKeyboardEvent(myString.charCodeAt(i)));
}

编辑:我更新了它以使用键盘类上的常量,这样它就可以独立于设备或操作系统工作。

于 2013-01-04T18:35:17.123 回答
1

事实证明,我首先不需要 100% 正确的 KeyboardEvent。相反,我缺少两件事:

  1. flash.events.TextEvent 需要为纯文本(如“Hello”)输入分派A。
  2. 需要将事件分派到可以使用该textDisplay属性访问的嵌入式编辑控件。
于 2013-01-07T10:21:43.327 回答