最初に、これは少しあいまいな質問かもしれないので、前もってお詫び申し上げます。
私は、AS3 文字列を受け取り、それを Windows に入力する MFC C++ dll に渡す ANE を作成中です。SendInput
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx
現在、私はまだ Flash C API にあまり慣れていませんが、現在、AS3 から渡された文字列はconst uint8_t
C 側のように型付けされ、 FREGetObjectAsUTF8
. これを達成するために次のコードを使用しています。
uint32_t len;
cost uint8_t str;
FREGetObjectAsUTF8(argv[0], &len, &str); //string is a single char
キーストロークを送信するには、これを使用しています
void KeyboardHelper::sendKeyStroke(int vk){
INPUT input = {0};
input.type = INPUT_KEYBOARD;
input.ki.wScan = 0; //not scanning for hardware key
input.ki.time = 0;
input.ki.dwExtraInfo = 0;
//virtual key code for the key we want to press
input.ki.wVk = vk;
input.ki.dwFlags = 0; //keypress
SendInput(1, &input, sizeof(input));
}
input.ki.wVk
送信するキーコードの 16 進値を探しています。MSDN には、すべての 16 進数値と関連するキーストロークのリストがここにあります。
http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx
このコードは機能し、AIR アプリからキーストロークを入力できますが、正しいキーではありません。私の現在の間違ったコードに変換できるので、次のように呼び出してuint8_t
います。int
sendKeyStroke
FREGetObjectAsUTF8(argv[0], &len, &str); //line from above
keyboardHelper->sendKeyStroke(int(str));
繰り返しますが、これは機能しているように見えますが、ランダムな入力を取得するだけです。
また、AIR から呼び出されたときにこのコードにステップインする方法がわからなかったので、 str
orの値もよくわかりません。int(str)
補足として、ANE のデバッグについて何か知っている人がいたら、遠慮なく教えてください :) (私は VS2012 を使用しています)
この質問の根源はこれに帰着すると思います:
const uint8_t
を対応するバーチャル キー コードに変換することはできますか? この場合、一度に 1 つのキーストロークのみを処理します。
そうでない場合は、が に設定されているKEYBDINPUT wScan
場合、Unicode 文字を使用するようにも見えます。で使用できる型に変換することは可能でしょうか?dwFlags
KEYEVENTF_UNICODE
const uint8_t
WORD
wScan
次の MSDN ドキュメントを参照として使用しています。
KEYBDINPUT: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646271%28v=vs.85%29.aspx
SendInput: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx
ありがとう!