2

KeyboardEventオブジェクトを手動でディスパッチして、キーボード入力をシミュレートしたいと思います。このようなイベントを作成するには、キー コードを渡す必要があります。

ああ、私は特定の文字列しか持っていません

const text: String = "Hello";

char コードは を使用して簡単に取得できますString::charCodeAtが、キー コードはどのように取得できますか? 任意の文字 (例: "H") に対して、1 つのキー コード、キー コードといくつかの修飾子 (この場合は 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 は必要なかったことがわかりました。代わりに、私が見逃していたことが 2 つあります。

  1. プレーンテキスト (「Hello」など) の入力には、 をディスパッチするflash.events.TextEvent 必要があります。
  2. イベントは、プロパティを使用してアクセスできる埋め込み編集コントロールにディスパッチする必要がありtextDisplayます。
于 2013-01-07T10:21:43.327 に答える