首先,我对此表示歉意,因为这可能是一个模糊的问题,因为截至目前我没有太多的事情可以解决。ANE C API - 将uint8_t字符串转换为MFC虚拟密钥代码
我在写一个ANE接受一个AS3字符串并将其关闭,以它输入到Windows MFC C++ DLL使用SendInput
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx
现在我还没过程对Flash C API过于熟悉,但我目前的想法是,从AS3传递过来的字符串在C端输入为const uint8_t
,并使用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
正在寻找的键码的十六进制值将被发送。 MSDN有这里所有的十六进制值和相关按键的列表:
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));
同样,这似乎工作,但我只是得到一个随机输入。
我也不是很确定str
或int(str)
的值是什么,因为我没有想到如何从AIR调用这个代码。作为一个侧面说明,如果有人知道有关调试ANE的随意让我知道:)什么(我使用VS2012)
我想这个问题的根源归结为:
是否有可能将const uint8_t
转换为相应的虚拟键码?在这种情况下,我一次只能处理一个按键。
如果不是,它也好像KEYBDINPUT wScan
采取一个Unicode字符如果dwFlags
设置为KEYEVENTF_UNICODE
。是否有可能将const uint8_t
转换为我可以在wScan
中使用的WORD
类型?
我一直在使用下面的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
谢谢!