首先,我對此表示歉意,因爲這可能是一個模糊的問題,因爲截至目前我沒有太多的事情可以解決。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
謝謝!