我想通过KeyboardEvent手动调度对象来模拟一些键盘输入。创建此类事件涉及传递关键代码。
唉,我只有一个给定的字符串
const text: String = "Hello";
我可以使用 轻松获取字符代码String::charCodeAt,但是如何获取密钥代码?对于任何给定的字符(例如:“H”),可能只有一个键码、一个键码加上一些修饰符(在本例中:Shift + keycode_of_h)甚至多个键码。有没有办法获取给定字符代码的键码(可能通过考虑用户的键盘映射)?
我想通过KeyboardEvent手动调度对象来模拟一些键盘输入。创建此类事件涉及传递关键代码。
唉,我只有一个给定的字符串
const text: String = "Hello";
我可以使用 轻松获取字符代码String::charCodeAt,但是如何获取密钥代码?对于任何给定的字符(例如:“H”),可能只有一个键码、一个键码加上一些修饰符(在本例中:Shift + keycode_of_h)甚至多个键码。有没有办法获取给定字符代码的键码(可能通过考虑用户的键盘映射)?
这不是太难,但只需要一点点设置。
首先创建一个字典或对象,将 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)));
}
编辑:我更新了它以使用键盘类上的常量,这样它就可以独立于设备或操作系统工作。
事实证明,我首先不需要 100% 正确的 KeyboardEvent。相反,我缺少两件事:
flash.events.TextEvent 需要为纯文本(如“Hello”)输入分派A。textDisplay属性访问的嵌入式编辑控件。