我想通过手动调度KeyboardEvent
对象来模拟一些键盘输入。创建此类事件涉及传递密钥代码。
唉,我只有一个给定的字符串
const text: String = "Hello";
我可以使用String::charCodeAt
轻松获取字符代码,但如何获取密钥代码?对于任何给定的字符(例如:“H”),可能只有一个键码,一个键码加上一些修饰符(在这种情况下:Shift + keycode_of_h)或甚至多个键码。有没有办法获取给定char代码的关键代码(可能通过考虑用户的键盘映射)?
答案 0 :(得分: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)));
}
编辑:我更新了这个以使用Keyboard类上的常量,以便它可以独立于设备或操作系统工作。
答案 1 :(得分:1)
事实证明,我首先不需要100%正确的KeyboardEvent。相反,我失踪了两件事:
flash.events.TextEvent
。textDisplay
属性进行访问。