Я разрабатываю плагин для браузера, который будет взаимодействовать с JavaScript.Я использовал фреймворк с открытым исходным кодом firebreath для разработки плагина, который бы упаковывал плагин NPAPI (не для браузеров) и activex (используемый в ie) в одном dll file.
Следующий код отлично работает в браузерах, отличных от ie, которые используют плагин NPAPI (" enter ", " delete"," backspace"можно нажимать правильно):
//VKey stands for the key users pressed like "VK_RETURN","VK_BACK","VK_DELETE",etc
keybd_event(Vkey,0, KEYEVENTF_EXTENDEDKEY | 0,0);
Но если я запускаю плагин в т.е. , ничего не происходит.Я пробовал SendInput тоже, но все равно ничего не происходит:
KEYBDINPUT kb={0};
INPUT Input={0};
kb.wScan = VK_BACK;
kb.dwFlags = KEYEVENTF_UNICODE;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
::SendInput(1,&Input,sizeof(Input));
Что странно, если комбинация клавиш работает правильно, т.е.например (ctrl + x):
> keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL,0), 0 ,0);
> keybd_event(bCharKey,(BYTE)0, 0 ,0);
> Sleep(10);
> keybd_event(bCharKey,(BYTE)0, KEYEVENTF_KEYUP,0);
> keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL,0),
> KEYEVENTF_KEYUP,0);
Поэтому я изменяю keybd_event на PostMessage:
::PostMessage(hbrowser,WM_KEYDOWN,vKey,1); //vKey stands for key pressed
::PostMessage(hbrowser,WM_KEYUP,vKey,1);
" VK_TAB ", " VK_DELETE"," VK_RETURN"," VK_TAB"," VK_SPACE"работает, но" VK_BACK"не работает.