首先,我提前道歉,因为这可能是一个有点模糊的问题,因为到目前为止我没有太多的事情要做。
我正在编写一个 ANE,它接受一个 AS3 字符串并将其传递给一个 MFC C++ dll,该 dll 使用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
正在寻找要发送的密钥代码的十六进制值。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
or的值是什么,int(str)
因为我还没有弄清楚在从 AIR 调用它时如何进入该代码。作为旁注,如果有人对调试 ANE 有任何了解,请随时告诉我:)(我使用的是 VS2012)
我想这个问题的根源在于:
是否可以将 a 转换const uint8_t
为相应的虚拟键码?在这种情况下,我一次只处理一个按键。
如果不是,它似乎也KEYBDINPUT wScan
需要一个 unicode 字符 ifdwFlags
设置为KEYEVENTF_UNICODE
. 是否可以转换const uint8_t
为WORD
我可以使用的类型wScan
?
我一直在使用以下 MSDN 文档作为参考:
KEYBDINPUT:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms646271%28v=vs.85%29.aspx
发送输入:http : //msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx
谢谢!